]>
git.ipfire.org Git - thirdparty/squid.git/blob - src/mgr/InfoAction.cc
4 * DEBUG: section 16 Cache Manager API
9 #include "base/TextException.h"
10 #include "HttpReply.h"
11 #include "ipc/Messages.h"
12 #include "ipc/UdsOp.h"
13 #include "ipc/TypedMsgHdr.h"
14 #include "mgr/Filler.h"
15 #include "mgr/InfoAction.h"
16 #include "mgr/Request.h"
17 #include "mgr/Response.h"
18 #include "SquidTime.h"
22 extern void GetInfo(Mgr::InfoActionData
& stats
);
23 extern void DumpInfo(Mgr::InfoActionData
& stats
, StoreEntry
* sentry
);
24 extern void DumpMallocStatistics(StoreEntry
* sentry
);
26 Mgr::InfoActionData::InfoActionData()
28 xmemset(this, 0, sizeof(*this));
32 Mgr::InfoActionData::operator += (const InfoActionData
& stats
)
34 if (!timerisset(&squid_start
) || timercmp(&squid_start
, &stats
.squid_start
, >))
35 squid_start
= stats
.squid_start
;
36 if (timercmp(¤t_time
, &stats
.current_time
, <))
37 current_time
= stats
.current_time
;
38 client_http_clients
+= stats
.client_http_clients
;
39 client_http_requests
+= stats
.client_http_requests
;
40 icp_pkts_recv
+= stats
.icp_pkts_recv
;
41 icp_pkts_sent
+= stats
.icp_pkts_sent
;
42 icp_replies_queued
+= stats
.icp_replies_queued
;
44 htcp_pkts_recv
+= stats
.htcp_pkts_recv
;
45 htcp_pkts_sent
+= stats
.htcp_pkts_sent
;
47 request_failure_ratio
+= stats
.request_failure_ratio
;
48 avg_client_http_requests
+= stats
.avg_client_http_requests
;
49 avg_icp_messages
+= stats
.avg_icp_messages
;
50 select_loops
+= stats
.select_loops
;
51 avg_loop_time
+= stats
.avg_loop_time
;
52 request_hit_ratio5
+= stats
.request_hit_ratio5
;
53 request_hit_ratio60
+= stats
.request_hit_ratio60
;
54 byte_hit_ratio5
+= stats
.byte_hit_ratio5
;
55 byte_hit_ratio60
+= stats
.byte_hit_ratio60
;
56 request_hit_mem_ratio5
+= stats
.request_hit_mem_ratio5
;
57 request_hit_mem_ratio60
+= stats
.request_hit_mem_ratio60
;
58 request_hit_disk_ratio5
+= stats
.request_hit_disk_ratio5
;
59 request_hit_disk_ratio60
+= stats
.request_hit_disk_ratio60
;
60 store_swap_size
+= stats
.store_swap_size
;
61 store_swap_max_size
+= stats
.store_swap_max_size
;
62 store_mem_size
+= stats
.store_mem_size
;
63 store_pages_max
+= stats
.store_pages_max
;
64 store_mem_used
+= stats
.store_mem_used
;
65 objects_size
+= stats
.objects_size
;
66 unlink_requests
+= stats
.unlink_requests
;
67 http_requests5
+= stats
.http_requests5
;
68 http_requests60
+= stats
.http_requests60
;
69 cache_misses5
+= stats
.cache_misses5
;
70 cache_misses60
+= stats
.cache_misses60
;
71 cache_hits5
+= stats
.cache_hits5
;
72 cache_hits60
+= stats
.cache_hits60
;
73 near_hits5
+= stats
.near_hits5
;
74 near_hits60
+= stats
.near_hits60
;
75 not_modified_replies5
+= stats
.not_modified_replies5
;
76 not_modified_replies60
+= stats
.not_modified_replies60
;
77 dns_lookups5
+= stats
.dns_lookups5
;
78 dns_lookups60
+= stats
.dns_lookups60
;
79 icp_queries5
+= stats
.icp_queries5
;
80 icp_queries60
+= stats
.icp_queries60
;
81 if (stats
.up_time
> up_time
)
82 up_time
= stats
.up_time
;
83 cpu_time
+= stats
.cpu_time
;
84 cpu_usage
+= stats
.cpu_usage
;
85 cpu_usage5
+= stats
.cpu_usage5
;
86 cpu_usage60
+= stats
.cpu_usage60
;
88 proc_data_seg
+= stats
.proc_data_seg
;
90 maxrss
+= stats
.maxrss
;
91 page_faults
+= stats
.page_faults
;
92 #if HAVE_MSTATS && HAVE_GNUMALLOC_H
93 ms_bytes_total
+= stats
.ms_bytes_total
;
94 ms_bytes_free
+= stats
.ms_bytes_free
;
95 #elif HAVE_MALLINFO && HAVE_STRUCT_MALLINFO
96 mp_arena
+= stats
.mp_arena
;
97 mp_uordblks
+= stats
.mp_uordblks
;
98 mp_ordblks
+= stats
.mp_ordblks
;
99 mp_usmblks
+= stats
.mp_usmblks
;
100 mp_smblks
+= stats
.mp_smblks
;
101 mp_hblkhd
+= stats
.mp_hblkhd
;
102 mp_hblks
+= stats
.mp_hblks
;
103 mp_fsmblks
+= stats
.mp_fsmblks
;
104 mp_fordblks
+= stats
.mp_fordblks
;
105 #if HAVE_STRUCT_MALLINFO_MXFAST
106 mp_mxfast
+= stats
.mp_mxfast
;
107 mp_nlblks
+= stats
.mp_nlblks
;
108 mp_grain
+= stats
.mp_grain
;
109 mp_uordbytes
+= stats
.mp_uordbytes
;
110 mp_allocated
+= stats
.mp_allocated
;
111 mp_treeoverhead
+= stats
.mp_treeoverhead
;
114 total_accounted
+= stats
.total_accounted
;
115 #if !(HAVE_MSTATS && HAVE_GNUMALLOC_H) && HAVE_MALLINFO && HAVE_STRUCT_MALLINFO
116 mem_pool_allocated
+= stats
.mem_pool_allocated
;
118 gb_saved_count
+= stats
.gb_saved_count
;
119 gb_freed_count
+= stats
.gb_freed_count
;
120 max_fd
+= stats
.max_fd
;
121 biggest_fd
+= stats
.biggest_fd
;
122 number_fd
+= stats
.number_fd
;
123 opening_fd
+= stats
.opening_fd
;
124 num_fd_free
+= stats
.num_fd_free
;
125 reserved_fd
+= stats
.reserved_fd
;
126 store_open_disk_fd
+= stats
.store_open_disk_fd
;
127 store_entries
+= stats
.store_entries
;
128 store_mem_entries
+= stats
.store_mem_entries
;
129 hot_obj_count
+= stats
.hot_obj_count
;
130 n_disk_objects
+= stats
.n_disk_objects
;
136 Mgr::InfoAction::Pointer
137 Mgr::InfoAction::Create(const CommandPointer
&cmd
)
139 return new InfoAction(cmd
);
142 Mgr::InfoAction::InfoAction(const CommandPointer
&cmd
):
149 Mgr::InfoAction::add(const Action
& action
)
152 data
+= dynamic_cast<const InfoAction
&>(action
).data
;
156 Mgr::InfoAction::respond(const Request
& request
)
159 int fd
= Ipc::ImportFdIntoComm(request
.fd
, SOCK_STREAM
, IPPROTO_TCP
, Ipc::fdnHttpSocket
);
161 Must(request
.requestId
!= 0);
162 AsyncJob::Start(new Mgr::Filler(this, fd
, request
.requestId
));
166 Mgr::InfoAction::collect()
172 Mgr::InfoAction::dump(StoreEntry
* entry
)
177 #if XMALLOC_STATISTICS
178 if (UsingSmp() && IamWorkerProcess())
179 storeAppendPrintf(entry
, "by kid%d {\n", KidIdentifier
);
180 DumpMallocStatistics(entry
);
181 if (UsingSmp() && IamWorkerProcess())
182 storeAppendPrintf(entry
, "} by kid%d\n\n", KidIdentifier
);
184 if (IamPrimaryProcess())
185 DumpInfo(data
, entry
);
189 Mgr::InfoAction::pack(Ipc::TypedMsgHdr
& msg
) const
191 msg
.setType(Ipc::mtCacheMgrResponse
);
196 Mgr::InfoAction::unpack(const Ipc::TypedMsgHdr
& msg
)
198 msg
.checkType(Ipc::mtCacheMgrResponse
);