summaryrefslogtreecommitdiffstats
path: root/library/cpp/actors/core/process_stats.cpp
diff options
context:
space:
mode:
authorAlexey Efimov <[email protected]>2022-03-24 12:43:54 +0300
committerAlexey Efimov <[email protected]>2022-03-24 12:43:54 +0300
commit43a2b5dd73d8a7aa80d4c1ba4ee70428fffbd17e (patch)
treeabebfb404c82a24c52c2372f497eadefd899dfb3 /library/cpp/actors/core/process_stats.cpp
parent057f22cbb5bfa82df4bfde220d5aaaa08f34257b (diff)
switch metrics registry to shared_ptr KIKIMR-14218
ref:5ef16c21e373b05982980dcd3016950f15a884e8
Diffstat (limited to 'library/cpp/actors/core/process_stats.cpp')
-rw-r--r--library/cpp/actors/core/process_stats.cpp51
1 files changed, 50 insertions, 1 deletions
diff --git a/library/cpp/actors/core/process_stats.cpp b/library/cpp/actors/core/process_stats.cpp
index ef793760b54..0fdad83da59 100644
--- a/library/cpp/actors/core/process_stats.cpp
+++ b/library/cpp/actors/core/process_stats.cpp
@@ -231,7 +231,6 @@ namespace {
NMonitoring::TDynamicCounters::TCounterPtr SystemUptimeSeconds;
};
-
class TRegistryCollector: public TProcStatCollectingActor<TRegistryCollector> {
using TBase = TProcStatCollectingActor<TRegistryCollector>;
public:
@@ -290,6 +289,52 @@ namespace {
NMonitoring::TIntGauge* NumThreads;
NMonitoring::TIntGauge* SystemUptimeSeconds;
};
+
+ class TRegistryCollectorShared: public TProcStatCollectingActor<TRegistryCollectorShared> {
+ using TBase = TProcStatCollectingActor<TRegistryCollectorShared>;
+ public:
+ TRegistryCollectorShared(TDuration interval, std::weak_ptr<NMonitoring::TMetricRegistry> registry)
+ : TBase{interval}
+ , Registry(std::move(registry))
+ {
+ }
+
+ void UpdateCounters(const TProcStat& procStat) {
+ std::shared_ptr<NMonitoring::TMetricRegistry> registry = Registry.lock();
+ if (registry) {
+ registry->IntGauge({{"sensor", "process.VmSize"}})->Set(procStat.Vsize);
+ registry->IntGauge({{"sensor", "process.AnonRssSize"}})->Set(procStat.AnonRss);
+ registry->IntGauge({{"sensor", "process.FileRssSize"}})->Set(procStat.FileRss);
+ registry->IntGauge({{"sensor", "process.CGroupMemLimit"}})->Set(procStat.CGroupMemLim);
+ registry->IntGauge({{"sensor", "process.UptimeSeconds"}})->Set(procStat.Uptime.Seconds());
+ registry->IntGauge({{"sensor", "process.NumThreads"}})->Set(procStat.NumThreads);
+ registry->IntGauge({{"sensor", "system.UptimeSeconds"}})->Set(procStat.SystemUptime.Seconds());
+
+ // it is ok here to reset and add metric value, because mutation
+ // is performed in siglethreaded context
+
+ NMonitoring::TRate* userTime = registry->Rate({{"sensor", "process.UserTime"}});
+ NMonitoring::TRate* sysTime = registry->Rate({{"sensor", "process.SystemTime"}});
+ NMonitoring::TRate* minorPageFaults = registry->Rate({{"sensor", "process.MinorPageFaults"}});
+ NMonitoring::TRate* majorPageFaults = registry->Rate({{"sensor", "process.MajorPageFaults"}});
+
+ userTime->Reset();
+ userTime->Add(procStat.Utime);
+
+ sysTime->Reset();
+ sysTime->Add(procStat.Stime);
+
+ minorPageFaults->Reset();
+ minorPageFaults->Add(procStat.MinFlt);
+
+ majorPageFaults->Reset();
+ majorPageFaults->Add(procStat.MajFlt);
+ }
+ }
+
+ private:
+ std::weak_ptr<NMonitoring::TMetricRegistry> Registry;
+ };
} // namespace
IActor* CreateProcStatCollector(ui32 intervalSec, NMonitoring::TDynamicCounterPtr counters) {
@@ -299,4 +344,8 @@ namespace {
IActor* CreateProcStatCollector(TDuration interval, NMonitoring::TMetricRegistry& registry) {
return new TRegistryCollector(interval, registry);
}
+
+ IActor* CreateProcStatCollector(TDuration interval, std::weak_ptr<NMonitoring::TMetricRegistry> registry) {
+ return new TRegistryCollectorShared(interval, std::move(registry));
+ }
}