]> git.ipfire.org Git - thirdparty/squid.git/blob - src/StatCounters.h
4a4484eca7f5339ec5b59bc7ceafa35d7b08a1f1
[thirdparty/squid.git] / src / StatCounters.h
1 /*
2 * Copyright (C) 1996-2025 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 SQUID_SRC_STATCOUNTERS_H
10 #define SQUID_SRC_STATCOUNTERS_H
11
12 #include "base/ByteCounter.h"
13 #include "comm/Incoming.h"
14 #include "StatHist.h"
15
16 #if USE_CACHE_DIGESTS
17 /** statistics for cache digests and other hit "predictors" */
18 class CacheDigestGuessStats
19 {
20 public:
21 int trueHits = 0;
22 int falseHits = 0;
23 int trueMisses = 0;
24 int falseMisses = 0;
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:
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 #if USE_POLL || USE_SELECT
125 Comm::Incoming comm_dns;
126 Comm::Incoming comm_tcp;
127 Comm::Incoming comm_udp;
128 #endif
129 StatHist select_fds_hist;
130
131 struct {
132 struct {
133 int opens = 0;
134 int closes = 0;
135 int reads = 0;
136 int writes = 0;
137 int seeks = 0;
138 int unlinks = 0;
139 } disk;
140
141 struct {
142 int accepts = 0;
143 int sockets = 0;
144 int connects = 0;
145 int binds = 0;
146 int closes = 0;
147 int reads = 0;
148 int writes = 0;
149 int recvfroms = 0;
150 int sendtos = 0;
151 } sock;
152 int selects = 0;
153 } syscalls;
154 int aborted_requests = 0;
155
156 struct {
157 int files_cleaned = 0;
158 int outs = 0;
159 int ins = 0;
160 } swap;
161
162 struct {
163 uint64_t attempts = 0;
164 uint64_t refusalsDueToLocking = 0;
165 uint64_t refusalsDueToZeroSize = 0;
166 uint64_t refusalsDueToTimeLimit = 0;
167 uint64_t failures = 0;
168 } hitValidation;
169
170 };
171
172 extern StatCounters statCounter;
173
174 #endif /* SQUID_SRC_STATCOUNTERS_H */
175