IntervalAction.cc
Go to the documentation of this file.
1 /*
2  * Copyright (C) 1996-2023 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 /* DEBUG: section 16 Cache Manager API */
10 
11 #include "squid.h"
12 #include "base/TextException.h"
13 #include "ipc/Messages.h"
14 #include "ipc/TypedMsgHdr.h"
15 #include "mgr/IntervalAction.h"
16 #include "SquidMath.h"
17 #include "Store.h"
18 #include "tools.h"
19 
20 void GetAvgStat(Mgr::IntervalActionData& stats, int minutes, int hours);
21 void DumpAvgStat(Mgr::IntervalActionData& stats, StoreEntry* sentry);
22 
24 {
25  memset(this, 0, sizeof(*this));
26 }
27 
30 {
31  if (!timerisset(&sample_start_time) || timercmp(&sample_start_time, &stats.sample_start_time, >))
32  sample_start_time = stats.sample_start_time;
33  if (timercmp(&sample_end_time, &stats.sample_end_time, <))
34  sample_end_time = stats.sample_end_time;
35  client_http_requests += stats.client_http_requests;
36  client_http_hits += stats.client_http_hits;
37  client_http_errors += stats.client_http_errors;
38  client_http_kbytes_in += stats.client_http_kbytes_in;
39  client_http_kbytes_out += stats.client_http_kbytes_out;
40  client_http_all_median_svc_time += stats.client_http_all_median_svc_time;
41  client_http_miss_median_svc_time += stats.client_http_miss_median_svc_time;
42  client_http_nm_median_svc_time += stats.client_http_nm_median_svc_time;
43  client_http_nh_median_svc_time += stats.client_http_nh_median_svc_time;
44  client_http_hit_median_svc_time += stats.client_http_hit_median_svc_time;
45  server_all_requests += stats.server_all_requests;
46  server_all_errors += stats.server_all_errors;
47  server_all_kbytes_in += stats.server_all_kbytes_in;
48  server_all_kbytes_out += stats.server_all_kbytes_out;
49  server_http_requests += stats.server_http_requests;
50  server_http_errors += stats.server_http_errors;
51  server_http_kbytes_in += stats.server_http_kbytes_in;
52  server_http_kbytes_out += stats.server_http_kbytes_out;
53  server_ftp_requests += stats.server_ftp_requests;
54  server_ftp_errors += stats.server_ftp_errors;
55  server_ftp_kbytes_in += stats.server_ftp_kbytes_in;
56  server_ftp_kbytes_out += stats.server_ftp_kbytes_out;
57  server_other_requests += stats.server_other_requests;
58  server_other_errors += stats.server_other_errors;
59  server_other_kbytes_in += stats.server_other_kbytes_in;
60  server_other_kbytes_out += stats.server_other_kbytes_out;
61  icp_pkts_sent += stats.icp_pkts_sent;
62  icp_pkts_recv += stats.icp_pkts_recv;
63  icp_queries_sent += stats.icp_queries_sent;
64  icp_replies_sent += stats.icp_replies_sent;
65  icp_queries_recv += stats.icp_queries_recv;
66  icp_replies_recv += stats.icp_replies_recv;
67  icp_replies_queued += stats.icp_replies_queued;
68  icp_query_timeouts += stats.icp_query_timeouts;
69  icp_kbytes_sent += stats.icp_kbytes_sent;
70  icp_kbytes_recv += stats.icp_kbytes_recv;
71  icp_q_kbytes_sent += stats.icp_q_kbytes_sent;
72  icp_r_kbytes_sent += stats.icp_r_kbytes_sent;
73  icp_q_kbytes_recv += stats.icp_q_kbytes_recv;
74  icp_r_kbytes_recv += stats.icp_r_kbytes_recv;
75  icp_query_median_svc_time += stats.icp_query_median_svc_time;
76  icp_reply_median_svc_time += stats.icp_reply_median_svc_time;
77  dns_median_svc_time += stats.dns_median_svc_time;
78  unlink_requests += stats.unlink_requests;
79  page_faults += stats.page_faults;
80  select_loops += stats.select_loops;
81  select_fds += stats.select_fds;
82  average_select_fd_period += stats.average_select_fd_period;
83  median_select_fds += stats.median_select_fds;
84  swap_outs += stats.swap_outs;
85  swap_ins += stats.swap_ins;
86  swap_files_cleaned += stats.swap_files_cleaned;
87  aborted_requests += stats.aborted_requests;
88  hitValidationAttempts += stats.hitValidationAttempts;
89  hitValidationRefusalsDueToLocking += stats.hitValidationRefusalsDueToLocking;
90  hitValidationRefusalsDueToZeroSize += stats.hitValidationRefusalsDueToZeroSize;
91  hitValidationRefusalsDueToTimeLimit += stats.hitValidationRefusalsDueToTimeLimit;
92  hitValidationFailures += stats.hitValidationFailures;
93  syscalls_disk_opens += stats.syscalls_disk_opens;
94  syscalls_disk_closes += stats.syscalls_disk_closes;
95  syscalls_disk_reads += stats.syscalls_disk_reads;
96  syscalls_disk_writes += stats.syscalls_disk_writes;
97  syscalls_disk_seeks += stats.syscalls_disk_seeks;
98  syscalls_disk_unlinks += stats.syscalls_disk_unlinks;
99  syscalls_sock_accepts += stats.syscalls_sock_accepts;
100  syscalls_sock_sockets += stats.syscalls_sock_sockets;
101  syscalls_sock_connects += stats.syscalls_sock_connects;
102  syscalls_sock_binds += stats.syscalls_sock_binds;
103  syscalls_sock_closes += stats.syscalls_sock_closes;
104  syscalls_sock_reads += stats.syscalls_sock_reads;
105  syscalls_sock_writes += stats.syscalls_sock_writes;
106  syscalls_sock_recvfroms += stats.syscalls_sock_recvfroms;
107  syscalls_sock_sendtos += stats.syscalls_sock_sendtos;
108  syscalls_selects += stats.syscalls_selects;
109  cpu_time += stats.cpu_time;
110  wall_time += stats.wall_time;
111  ++count;
112 
113  return *this;
114 }
115 
118 {
119  return new IntervalAction(cmd, 5, 0);
120 }
121 
124 {
125  return new IntervalAction(cmd, 60, 0);
126 }
127 
128 Mgr::IntervalAction::IntervalAction(const CommandPointer &aCmd, int aMinutes, int aHours):
129  Action(aCmd), minutes(aMinutes), hours(aHours), data()
130 {
131  debugs(16, 5, MYNAME);
132 }
133 
134 void
136 {
137  debugs(16, 5, MYNAME);
138  data += dynamic_cast<const IntervalAction&>(action).data;
139 }
140 
141 void
143 {
144  GetAvgStat(data, minutes, hours);
145 }
146 
147 void
149 {
150  debugs(16, 5, MYNAME);
151  Must(entry != nullptr);
152  DumpAvgStat(data, entry);
153 }
154 
155 void
157 {
159  msg.putPod(data);
160 }
161 
162 void
164 {
166  msg.getPod(data);
167 }
168 
void GetAvgStat(Mgr::IntervalActionData &stats, int minutes, int hours)
Definition: stat.cc:864
void setType(int aType)
sets message type; use MessageType enum
Definition: TypedMsgHdr.cc:100
void checkType(int aType) const
Definition: TypedMsgHdr.cc:94
void dump(StoreEntry *entry) override
@ mtCacheMgrResponse
Definition: Messages.h:36
double client_http_all_median_svc_time
IntervalActionData & operator+=(const IntervalActionData &stats)
struct timeval sample_start_time
#define timerisset(tvp)
Definition: snmp_api_util.h:85
#define timercmp(tvp, uvp, cmp)
Definition: snmp_api_util.h:76
struct timeval sample_end_time
void pack(Ipc::TypedMsgHdr &msg) const override
pack collected action info into a message to be sent to Coordinator
void putPod(const Pod &pod)
store POD
Definition: TypedMsgHdr.h:126
static Pointer Create5min(const CommandPointer &cmd)
double client_http_miss_median_svc_time
void unpack(const Ipc::TypedMsgHdr &msg) override
unpack action info from the message received by Coordinator
double hitValidationRefusalsDueToTimeLimit
double hitValidationRefusalsDueToZeroSize
double client_http_hit_median_svc_time
void DumpAvgStat(Mgr::IntervalActionData &stats, StoreEntry *sentry)
Definition: stat.cc:1000
IntervalAction(const CommandPointer &cmd, int aMinutes, int aHours)
#define Must(condition)
Definition: TextException.h:75
struct msghdr with a known type, fixed-size I/O and control buffers
Definition: TypedMsgHdr.h:34
#define MYNAME
Definition: Stream.h:219
void collect() override
calculate and keep local action-specific information
implement aggregated interval actions
void getPod(Pod &pod) const
load POD
Definition: TypedMsgHdr.h:118
double hitValidationRefusalsDueToLocking
static Pointer Create60min(const CommandPointer &cmd)
#define debugs(SECTION, LEVEL, CONTENT)
Definition: Stream.h:192
void add(const Action &action) override
incrementally merge in remote information (of the same action type)

 

Introduction

Documentation

Support

Miscellaneous