]> git.ipfire.org Git - thirdparty/squid.git/blob - src/mgr/IoAction.cc
Source Format Enforcement (#1234)
[thirdparty/squid.git] / src / mgr / IoAction.cc
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 "IoStats.h"
14 #include "ipc/Messages.h"
15 #include "ipc/TypedMsgHdr.h"
16 #include "mgr/IoAction.h"
17 #include "SquidMath.h"
18 #include "Store.h"
19 #include "tools.h"
20
21 void GetIoStats(Mgr::IoActionData& stats);
22 void DumpIoStats(Mgr::IoActionData& stats, StoreEntry* sentry);
23
24 Mgr::IoActionData::IoActionData()
25 {
26 memset(this, 0, sizeof(*this));
27 }
28
29 Mgr::IoActionData&
30 Mgr::IoActionData::operator += (const IoActionData& stats)
31 {
32 http_reads += stats.http_reads;
33 for (int i = 0; i < IoStats::histSize; ++i)
34 http_read_hist[i] += stats.http_read_hist[i];
35 ftp_reads += stats.ftp_reads;
36 for (int i = 0; i < IoStats::histSize; ++i)
37 ftp_read_hist[i] += stats.ftp_read_hist[i];
38
39 return *this;
40 }
41
42 Mgr::IoAction::Pointer
43 Mgr::IoAction::Create(const CommandPointer &cmd)
44 {
45 return new IoAction(cmd);
46 }
47
48 Mgr::IoAction::IoAction(const CommandPointer &aCmd):
49 Action(aCmd), data()
50 {
51 debugs(16, 5, MYNAME);
52 }
53
54 void
55 Mgr::IoAction::add(const Action& action)
56 {
57 debugs(16, 5, MYNAME);
58 data += dynamic_cast<const IoAction&>(action).data;
59 }
60
61 void
62 Mgr::IoAction::collect()
63 {
64 GetIoStats(data);
65 }
66
67 void
68 Mgr::IoAction::dump(StoreEntry* entry)
69 {
70 debugs(16, 5, MYNAME);
71 Must(entry != nullptr);
72 DumpIoStats(data, entry);
73 }
74
75 void
76 Mgr::IoAction::pack(Ipc::TypedMsgHdr& msg) const
77 {
78 msg.setType(Ipc::mtCacheMgrResponse);
79 msg.putPod(data);
80 }
81
82 void
83 Mgr::IoAction::unpack(const Ipc::TypedMsgHdr& msg)
84 {
85 msg.checkType(Ipc::mtCacheMgrResponse);
86 msg.getPod(data);
87 }
88