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