added congestion analysis to HostStatus
[pingcheck] / src / host / hoststatus.h
CommitLineData
91fcc471
TJ
1/*
2The software in this package is distributed under the GNU General
3Public License version 2 (with a special exception described below).
4
5A copy of GNU General Public License (GPL) is included in this distribution,
6in the file COPYING.GPL.
7
8As a special exception, if other files instantiate templates or use macros
9or inline functions from this file, or you compile this file and link it
10with other works to produce a work based on this file, this file
11does not by itself cause the resulting work to be covered
12by the GNU General Public License.
13
14However the source code for this file must still be made available
15in accordance with section (3) of the GNU General Public License.
16
17This exception does not invalidate any other reasons why a work based
18on this file might be covered by the GNU General Public License.
19*/
6c14bbee
GMF
20#ifndef HOST_STATUS_H
21#define HOST_STATUS_H
ddf41c89
GMF
22
23#include <string>
24
96c4e7a4 25#include "host/pingstatus.h"
72e54d1c 26#include "link/linkstatus.h"
ddf41c89
GMF
27
28//-----------------------------------------------------------------------------
6c14bbee 29// HostStatus
ddf41c89
GMF
30//-----------------------------------------------------------------------------
31
c5e4bfa1 32/**
c01a6023
GMF
33 * @brief This class analyze the host status (up or down) based on the pings
34 * responses (success or failure). And notifies its status.
c5e4bfa1
GMF
35 * Scope: one object per host.
36 */
6c14bbee 37class HostStatus
ddf41c89
GMF
38{
39public:
6c14bbee 40 HostStatus(
ddf41c89 41 const std::string &host_address,
cd4048df 42 const int ping_fail_limit_percentage,
a7b15639
CH
43 const int ping_congestion_limit_percentage,
44 const int ping_duration_congestion_thresh,
91aa83f9 45 const int n_parallel_pings,
c6c54dfb 46 const LinkStatusItem link_analyzer
ddf41c89 47 );
6c14bbee 48 ~HostStatus();
ddf41c89
GMF
49
50 void set_resolved_ip_count( const int resolved_ip_count );
a341119a 51 bool exceeded_ping_failed_limit() const;
a7b15639 52 bool exceeded_ping_congestion_limit() const;
96c4e7a4
CH
53 void update_ping_statistics( const PingStatus &ping_success,
54 const long ping_duration_us );
ddf41c89
GMF
55
56private:
a7b15639
CH
57 void update_fail_stats( const PingStatus &ping_success );
58 void update_congestion_stats( const PingStatus &ping_success,
59 const long ping_duration_us );
d8a91bd6
GMF
60 bool tried_all_resolved_ip() const;
61 void analyze_ping_statistics();
c1fff16a 62 void reset_ping_counters();
c5e4bfa1
GMF
63 void increase_ping_performed_count();
64 void increase_ping_failed_count();
a7b15639 65 void increase_ping_congestion_count();
6827496c 66 void analyze_ping_failed_count();
a7b15639
CH
67 void analyze_ping_congestion_count();
68
69 std::string log_prefix();
ddf41c89
GMF
70
71private:
d3e8a9f9 72 /// the DNS address of the host to analyze
c1fff16a 73 std::string HostAddress;
d3e8a9f9 74 /// the object responsible to analyze the link
c6c54dfb 75 const LinkStatusItem LinkAnalyzer;
d3e8a9f9 76 /// the maximum amount of pings that can fail without warning
cd4048df 77 int PingFailLimitPercentage;
a7b15639
CH
78 /// the maximum amount of pings that can be congested without warning
79 int PingCongestionLimitPercentage;
80 /// the threshold in micro seconds that ping can take with/out congestion
81 long PingDurationCongestionsThresh;
d3e8a9f9 82 /// the amount of IPs that are aliases to the host DNS
ddf41c89 83 int ResolvedIpCount;
d3e8a9f9 84 /// the amount of pings sent until now
ddf41c89 85 int PingsPerformedCount;
d3e8a9f9 86 /// the amount of pings sent that failed until now
ddf41c89 87 int PingsFailedCount;
a7b15639
CH
88 /// the amount of pings sent that indicate congestion until now
89 int PingCongestionCount;
d3e8a9f9
GMF
90 /// boolean flag that indicate if the last set of failed pings exceed the
91 /// limit
a341119a 92 bool ExceededPingFailedLimit;
a7b15639
CH
93 /// boolean flag that indicate if the last set of congested pings exceed the
94 /// limit
95 bool ExceededPingCongestionLimit;
91aa83f9
CH
96 /// number of pingers that ping the same IP in parallel
97 int NParallelPingers;
ddf41c89
GMF
98
99};
100
6c14bbee 101#endif // HOST_STATUS_H