/* * Copyright (C) 1996-2023 The Squid Software Foundation and contributors * * Squid software is distributed under GPLv2+ license and includes * contributions from numerous individuals and organizations. * Please see the COPYING and CONTRIBUTORS files for details. */ /* DEBUG: section 16 Cache Manager API */ #include "squid.h" #include "base/TextException.h" #include "ipc/Messages.h" #include "ipc/TypedMsgHdr.h" #include "mgr/ServiceTimesAction.h" #include "Store.h" #include "tools.h" void GetServiceTimesStats(Mgr::ServiceTimesActionData& stats); void DumpServiceTimesStats(Mgr::ServiceTimesActionData& stats, StoreEntry* sentry); Mgr::ServiceTimesActionData::ServiceTimesActionData() { memset(this, 0, sizeof(*this)); } Mgr::ServiceTimesActionData& Mgr::ServiceTimesActionData::operator += (const ServiceTimesActionData& stats) { for (int i = 0; i < seriesSize; ++i) { http_requests5[i] += stats.http_requests5[i]; http_requests60[i] += stats.http_requests60[i]; cache_misses5[i] += stats.cache_misses5[i]; cache_misses60[i] += stats.cache_misses60[i]; cache_hits5[i] += stats.cache_hits5[i]; cache_hits60[i] += stats.cache_hits60[i]; near_hits5[i] += stats.near_hits5[i]; near_hits60[i] += stats.near_hits60[i]; not_modified_replies5[i] += stats.not_modified_replies5[i]; not_modified_replies60[i] += stats.not_modified_replies60[i]; dns_lookups5[i] += stats.dns_lookups5[i]; dns_lookups60[i] += stats.dns_lookups60[i]; icp_queries5[i] += stats.icp_queries5[i]; icp_queries60[i] += stats.icp_queries60[i]; } ++count; return *this; } Mgr::ServiceTimesAction::Pointer Mgr::ServiceTimesAction::Create(const CommandPointer &cmd) { return new ServiceTimesAction(cmd); } Mgr::ServiceTimesAction::ServiceTimesAction(const CommandPointer &aCmd): Action(aCmd), data() { debugs(16, 5, MYNAME); } void Mgr::ServiceTimesAction::add(const Action& action) { debugs(16, 5, MYNAME); data += dynamic_cast(action).data; } void Mgr::ServiceTimesAction::collect() { debugs(16, 5, MYNAME); GetServiceTimesStats(data); } void Mgr::ServiceTimesAction::dump(StoreEntry* entry) { debugs(16, 5, MYNAME); Must(entry != nullptr); DumpServiceTimesStats(data, entry); } void Mgr::ServiceTimesAction::pack(Ipc::TypedMsgHdr& msg) const { msg.setType(Ipc::mtCacheMgrResponse); msg.putPod(data); } void Mgr::ServiceTimesAction::unpack(const Ipc::TypedMsgHdr& msg) { msg.checkType(Ipc::mtCacheMgrResponse); msg.getPod(data); }