1 /*
2  * Copyright (C) 1996-2021 The Squid Software Foundation and contributors
3  *
4  * Squid software is distributed under GPLv2+ license and includes
5  * contributions from numerous individuals and organizations.
6  * Please see the COPYING and CONTRIBUTORS files for details.
7  */
8 
9 #ifndef STATCOUNTERS_H_
10 #define STATCOUNTERS_H_
11 
12 #include "base/ByteCounter.h"
13 #include "StatHist.h"
14 
15 #if USE_CACHE_DIGESTS
16 /** statistics for cache digests and other hit "predictors" */
17 class CacheDigestGuessStats
18 {
19 public:
20     int trueHits = 0;
21     int falseHits = 0;
22     int trueMisses = 0;
23     int falseMisses = 0;
24     int closeHits = 0;     /// \todo: temporary remove it later
25 };
26 #endif
27 
28 /** General collection of process-wide statistics.
29  *
30  * \note if you add a field to StatCounters which requires any non-trivial
31  *  initialization or copy you MUST sync statCountersInitSpecial()
32  */
33 class StatCounters
34 {
35 public:
StatCounters()36     StatCounters() : timestamp(current_time) {}
37 
38     struct {
39         int clients = 0;
40         int requests = 0;
41         int hits = 0;
42         int mem_hits = 0;
43         int disk_hits = 0;
44         int errors = 0;
45         ByteCounter kbytes_in;
46         ByteCounter kbytes_out;
47         ByteCounter hit_kbytes_out;
48         StatHist missSvcTime;
49         StatHist nearMissSvcTime;
50         StatHist nearHitSvcTime;
51         StatHist hitSvcTime;
52         StatHist allSvcTime;
53     } client_http;
54 
55     struct {
56 
57         struct {
58             int requests = 0;
59             int errors = 0;
60             ByteCounter kbytes_in;
61             ByteCounter kbytes_out;
62         } all , http, ftp, other;
63     } server;
64 
65     struct {
66         int pkts_sent = 0;
67         int queries_sent = 0;
68         int replies_sent = 0;
69         int pkts_recv = 0;
70         int queries_recv = 0;
71         int replies_recv = 0;
72         int hits_sent = 0;
73         int hits_recv = 0;
74         int replies_queued = 0;
75         int replies_dropped = 0;
76         ByteCounter kbytes_sent;
77         ByteCounter q_kbytes_sent;
78         ByteCounter r_kbytes_sent;
79         ByteCounter kbytes_recv;
80         ByteCounter q_kbytes_recv;
81         ByteCounter r_kbytes_recv;
82         StatHist querySvcTime;
83         StatHist replySvcTime;
84         int query_timeouts = 0;
85         int times_used = 0;
86     } icp;
87 
88     struct {
89         int pkts_sent = 0;
90         int pkts_recv = 0;
91     } htcp;
92 
93     struct {
94         int requests = 0;
95     } unlink;
96 
97     struct {
98         StatHist svcTime;
99     } dns;
100 
101     struct {
102         int times_used = 0;
103         ByteCounter kbytes_sent;
104         ByteCounter kbytes_recv;
105         ByteCounter memory;
106         int msgs_sent = 0;
107         int msgs_recv = 0;
108 #if USE_CACHE_DIGESTS
109         CacheDigestGuessStats guess;
110 #endif
111         StatHist on_xition_count;
112     } cd;
113 
114     struct {
115         int times_used = 0;
116     } netdb;
117     int page_faults = 0;
118     unsigned long int select_loops = 0;
119     int select_fds = 0;
120     double select_time = 0.0;
121     double cputime = 0.0;
122 
123     struct timeval timestamp;
124     StatHist comm_udp_incoming;
125     StatHist comm_dns_incoming;
126     StatHist comm_tcp_incoming;
127     StatHist select_fds_hist;
128 
129     struct {
130         struct {
131             int opens = 0;
132             int closes = 0;
133             int reads = 0;
134             int writes = 0;
135             int seeks = 0;
136             int unlinks = 0;
137         } disk;
138 
139         struct {
140             int accepts = 0;
141             int sockets = 0;
142             int connects = 0;
143             int binds = 0;
144             int closes = 0;
145             int reads = 0;
146             int writes = 0;
147             int recvfroms = 0;
148             int sendtos = 0;
149         } sock;
150         int selects = 0;
151     } syscalls;
152     int aborted_requests = 0;
153 
154     struct {
155         int files_cleaned = 0;
156         int outs = 0;
157         int ins = 0;
158     } swap;
159 };
160 
161 extern StatCounters statCounter;
162 
163 #endif /* STATCOUNTERS_H_ */
164 
165