started parallel pings, not quite done yet since need to delay them
[pingcheck] / src / host / hoststatus.h
1 /*
2 The software in this package is distributed under the GNU General
3 Public License version 2 (with a special exception described below).
4
5 A copy of GNU General Public License (GPL) is included in this distribution,
6 in the file COPYING.GPL.
7
8 As a special exception, if other files instantiate templates or use macros
9 or inline functions from this file, or you compile this file and link it
10 with other works to produce a work based on this file, this file
11 does not by itself cause the resulting work to be covered
12 by the GNU General Public License.
13
14 However the source code for this file must still be made available
15 in accordance with section (3) of the GNU General Public License.
16
17 This exception does not invalidate any other reasons why a work based
18 on this file might be covered by the GNU General Public License.
19 */
20 #ifndef HOST_STATUS_H
21 #define HOST_STATUS_H
22
23 #include <string>
24
25 #include "host/pingstatus.h"
26 #include "link/linkstatus.h"
27
28 //-----------------------------------------------------------------------------
29 // HostStatus
30 //-----------------------------------------------------------------------------
31
32 /**
33  * @brief This class analyze the host status (up or down) based on the pings
34  * responses (success or failure). And notifies its status.
35  * Scope: one object per host.
36  */
37 class HostStatus
38 {
39 public:
40     HostStatus(
41             const std::string &host_address,
42             const int ping_fail_limit_percentage,
43             const int n_parallel_pings,
44             const LinkStatusItem link_analyzer
45     );
46     ~HostStatus();
47
48     void set_resolved_ip_count( const int resolved_ip_count );
49     bool exceeded_ping_failed_limit() const;
50     void update_ping_statistics( const PingStatus &ping_success,
51                                  const long ping_duration_us );
52
53 private:
54     bool tried_all_resolved_ip() const;
55     void analyze_ping_statistics();
56     void reset_ping_counters();
57     void increase_ping_performed_count();
58     void increase_ping_failed_count();
59     void analyze_ping_failed_count();
60
61 private:
62     /// the DNS address of the host to analyze
63     std::string HostAddress;
64     /// the object responsible to analyze the link
65     const LinkStatusItem LinkAnalyzer;
66     /// the maximum amount of pings that can fail without warning
67     int PingFailLimitPercentage;
68     /// the amount of IPs that are aliases to the host DNS
69     int ResolvedIpCount;
70     /// the amount of pings sent until now
71     int PingsPerformedCount;
72     /// the amount of pings sent that failed until now
73     int PingsFailedCount;
74     /// boolean flag that indicate if the last set of failed pings exceed the
75     /// limit
76     bool ExceededPingFailedLimit;
77     /// number of pingers that ping the same IP in parallel
78     int NParallelPingers;
79
80 };
81
82 #endif // HOST_STATUS_H