]> git.ipfire.org Git - thirdparty/squid.git/blob - src/mgr/IoAction.cc
SourceFormat Enforcement
[thirdparty/squid.git] / src / mgr / IoAction.cc
1 /*
2 * Copyright (C) 1996-2017 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 gopher_reads += stats.gopher_reads;
39 for (int i = 0; i < IoStats::histSize; ++i)
40 gopher_read_hist[i] += stats.gopher_read_hist[i];
41
42 return *this;
43 }
44
45 Mgr::IoAction::Pointer
46 Mgr::IoAction::Create(const CommandPointer &cmd)
47 {
48 return new IoAction(cmd);
49 }
50
51 Mgr::IoAction::IoAction(const CommandPointer &aCmd):
52 Action(aCmd), data()
53 {
54 debugs(16, 5, HERE);
55 }
56
57 void
58 Mgr::IoAction::add(const Action& action)
59 {
60 debugs(16, 5, HERE);
61 data += dynamic_cast<const IoAction&>(action).data;
62 }
63
64 void
65 Mgr::IoAction::collect()
66 {
67 GetIoStats(data);
68 }
69
70 void
71 Mgr::IoAction::dump(StoreEntry* entry)
72 {
73 debugs(16, 5, HERE);
74 Must(entry != NULL);
75 DumpIoStats(data, entry);
76 }
77
78 void
79 Mgr::IoAction::pack(Ipc::TypedMsgHdr& msg) const
80 {
81 msg.setType(Ipc::mtCacheMgrResponse);
82 msg.putPod(data);
83 }
84
85 void
86 Mgr::IoAction::unpack(const Ipc::TypedMsgHdr& msg)
87 {
88 msg.checkType(Ipc::mtCacheMgrResponse);
89 msg.getPod(data);
90 }
91