From fb09230d37e55ffe20d4678535b4b866e45665c7 Mon Sep 17 00:00:00 2001 From: Guilherme Maciel Ferreira Date: Fri, 25 Mar 2011 15:30:22 +0100 Subject: [PATCH] Read the configured interval that a link must be up to notify --- Readme | 2 ++ conf/pingcheck.conf | 1 + scripts/system_status_alert.sh | 4 ++-- src/config/configuration.cpp | 13 +++++++++++++ src/config/configuration.h | 6 ++++++ src/config/configurationreader.cpp | 14 ++++++++++++++ src/config/configurationreader.h | 3 +++ 7 files changed, 41 insertions(+), 2 deletions(-) diff --git a/Readme b/Readme index 595dfd7..5dda988 100644 --- 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 diff --git a/conf/pingcheck.conf b/conf/pingcheck.conf index 7e3a5ad..e5c2d3c 100644 --- a/conf/pingcheck.conf +++ b/conf/pingcheck.conf @@ -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 diff --git a/scripts/system_status_alert.sh b/scripts/system_status_alert.sh index 96c5884..9b7a9a6 100755 --- a/scripts/system_status_alert.sh +++ b/scripts/system_status_alert.sh @@ -3,13 +3,13 @@ up() { - echo "SYSTEM OK" + echo "LINK UP" } down() { - echo "SYSTEM DOWN" + echo "LINK DOWN" } diff --git a/src/config/configuration.cpp b/src/config/configuration.cpp index 5256b31..d362cfb 100644 --- a/src/config/configuration.cpp +++ b/src/config/configuration.cpp @@ -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; diff --git a/src/config/configuration.h b/src/config/configuration.h index ab11e55..4a65af9 100644 --- a/src/config/configuration.h +++ b/src/config/configuration.h @@ -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 get_hosts() const; void set_hosts( const std::vector &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 Hosts; }; diff --git a/src/config/configurationreader.cpp b/src/config/configurationreader.cpp index 2f472d3..20de0eb 100644 --- a/src/config/configurationreader.cpp +++ b/src/config/configurationreader.cpp @@ -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()->default_value( DefaultHostsDownLimit ), HostsDownLimitCmdDesc.c_str() ) ( PingFailLimitCmdStr.c_str(), value()->default_value( DefaultPingFailLimit ), PingFailLimitCmdDesc.c_str() ) ( StatusNotifierCmdCmdStr.c_str(), value(), StatusNotifierCmdCmdDesc.c_str() ) + ( StableLinkUpIntervalCmdStr.c_str(), value()->default_value( DefaultStableLinkUpInterval ), StableLinkUpIntervalCmdDesc.c_str() ) ( HostNameCmdStr.c_str(), value< vector >(), HostNameCmdDesc.c_str() ) ( HostIntervalCmdStr.c_str(), value< vector >(), 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(); + 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 ) ) diff --git a/src/config/configurationreader.h b/src/config/configurationreader.h index 620c2c3..d52c311 100644 --- a/src/config/configurationreader.h +++ b/src/config/configurationreader.h @@ -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; -- 1.7.1