Read the configured interval that a link must be up to notify
authorGuilherme Maciel Ferreira <guilherme.maciel.ferreira@intra2net.com>
Fri, 25 Mar 2011 14:30:22 +0000 (15:30 +0100)
committerGuilherme Maciel Ferreira <guilherme.maciel.ferreira@intra2net.com>
Fri, 25 Mar 2011 14:30:22 +0000 (15:30 +0100)
Readme
conf/pingcheck.conf
scripts/system_status_alert.sh
src/config/configuration.cpp
src/config/configuration.h
src/config/configurationreader.cpp
src/config/configurationreader.h

diff --git a/Readme b/Readme
index 595dfd7..5dda988 100644 (file)
--- a/Readme
+++ b/Readme
@@ -176,6 +176,8 @@ This configurations are shared among and affect all the hosts.
 - status-notifier-cmd: the command line that is called when a host is down, or
   up. Accepted variables are:
     ${status} - down or up
+- stable-link-up-interval: how long (in minutes) the pings don't have to fail
+  in order to consider the link up, or stable.
 
 
 4.2. Host
index 7e3a5ad..e5c2d3c 100644 (file)
@@ -1,6 +1,7 @@
 hosts-down-limit=4
 ping-fail-limit=40
 status-notifier-cmd=./system_status_alert.sh ${status}
+stable-link-up-interval=10
 
 [host]
 name=www.intra2net.com
index 96c5884..9b7a9a6 100755 (executable)
@@ -3,13 +3,13 @@
 
 up()
 {
-    echo "SYSTEM OK"
+    echo "LINK UP"
 }
 
 
 down()
 {
-    echo "SYSTEM DOWN"
+    echo "LINK DOWN"
 }
 
 
index 5256b31..d362cfb 100644 (file)
@@ -17,6 +17,9 @@ Configuration::Configuration() :
     MinPingFailLimit( 0 ),
     MaxPingFailLimit( 100 ),
     StatusNotifierCmd( "" ),
+    StableLinkUpInterval( 0 ),
+    MinStableLinkUpInterval( 0 ),
+    MaxStableLinkUpInterval( 60 ),
     Hosts()
 {
 }
@@ -71,6 +74,16 @@ void Configuration::set_status_notifier_cmd( const string &status_notifier_cmd )
     StatusNotifierCmd = status_notifier_cmd;
 }
 
+int Configuration::get_stable_link_up_interval() const
+{
+    return StableLinkUpInterval;
+}
+
+void Configuration::set_stable_link_up_interval( const int stable_link_up_interval )
+{
+    StableLinkUpInterval = stable_link_up_interval;
+}
+
 vector< HostItem > Configuration::get_hosts() const
 {
     return Hosts;
index ab11e55..4a65af9 100644 (file)
@@ -30,6 +30,9 @@ public:
     std::string get_status_notifier_cmd() const;
     void set_status_notifier_cmd( const std::string &status_notifier_cmd );
 
+    int get_stable_link_up_interval() const;
+    void set_stable_link_up_interval( const int stable_link_up_interval );
+
     std::vector<HostItem> get_hosts() const;
     void set_hosts( const std::vector<HostItem> &hosts_list );
 
@@ -42,6 +45,9 @@ private:
     const int MinPingFailLimit;
     const int MaxPingFailLimit;
     std::string StatusNotifierCmd;
+    int StableLinkUpInterval;
+    const int MinStableLinkUpInterval;
+    const int MaxStableLinkUpInterval;
     std::vector<HostItem> Hosts;
 
 };
index 2f472d3..20de0eb 100644 (file)
@@ -31,6 +31,9 @@ ConfigurationReader::ConfigurationReader() :
     PingFailLimitCmdDesc( "Maximum percentage of pings that can fail for a given host." ),
     StatusNotifierCmdCmdStr( "status-notifier-cmd" ),
     StatusNotifierCmdCmdDesc( "The command to execute to alert about host status." ),
+    DefaultStableLinkUpInterval( 5 ), // 5 minutes
+    StableLinkUpIntervalCmdStr( "stable-link-up-interval" ),
+    StableLinkUpIntervalCmdDesc( "How long the link must be responsive in order to consider it stable" ),
     HostNameCmdStr( "host.name" ),
     HostNameCmdDesc( "Host address" ),
     DefaultHostInterval( 60 ), // 60 seconds
@@ -117,6 +120,7 @@ options_description ConfigurationReader::get_configuration_options() const
         ( HostsDownLimitCmdStr.c_str(), value<int>()->default_value( DefaultHostsDownLimit ), HostsDownLimitCmdDesc.c_str() )
         ( PingFailLimitCmdStr.c_str(), value<int>()->default_value( DefaultPingFailLimit ), PingFailLimitCmdDesc.c_str() )
         ( StatusNotifierCmdCmdStr.c_str(), value<string>(), StatusNotifierCmdCmdDesc.c_str() )
+        ( StableLinkUpIntervalCmdStr.c_str(), value<int>()->default_value( DefaultStableLinkUpInterval ), StableLinkUpIntervalCmdDesc.c_str() )
         ( HostNameCmdStr.c_str(), value< vector<string> >(), HostNameCmdDesc.c_str() )
         ( HostIntervalCmdStr.c_str(), value< vector<int> >(), HostIntervalCmdDesc.c_str() )
     ;
@@ -163,6 +167,16 @@ bool ConfigurationReader::parse_configuration_options( const variables_map &vm )
         cout << StatusNotifierCmdCmdStr << "=" << status_notifier_cmd << endl;
     }
 
+    // stable-link-up-interval
+    if ( vm.count( StableLinkUpIntervalCmdStr ) )
+    {
+        int stable_link_up_interval = vm[ StableLinkUpIntervalCmdStr ].as<int>();
+        Config.set_stable_link_up_interval( stable_link_up_interval );
+
+        cout << StableLinkUpIntervalCmdStr << "=" << stable_link_up_interval
+             << endl;
+    }
+
     // [host] name
     int hosts_names_count = 0;
     if ( vm.count( HostNameCmdStr ) )
index 620c2c3..d52c311 100644 (file)
@@ -69,6 +69,9 @@ private:
     const std::string PingFailLimitCmdDesc;
     const std::string StatusNotifierCmdCmdStr;
     const std::string StatusNotifierCmdCmdDesc;
+    const int DefaultStableLinkUpInterval;
+    const std::string StableLinkUpIntervalCmdStr;
+    const std::string StableLinkUpIntervalCmdDesc;
     const std::string HostNameCmdStr;
     const std::string HostNameCmdDesc;
     const int DefaultHostInterval;