diff options
| author | Alexey Efimov <[email protected]> | 2022-03-24 12:43:54 +0300 |
|---|---|---|
| committer | Alexey Efimov <[email protected]> | 2022-03-24 12:43:54 +0300 |
| commit | 43a2b5dd73d8a7aa80d4c1ba4ee70428fffbd17e (patch) | |
| tree | abebfb404c82a24c52c2372f497eadefd899dfb3 /library/cpp/actors/core/process_stats.cpp | |
| parent | 057f22cbb5bfa82df4bfde220d5aaaa08f34257b (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.cpp | 51 |
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)); + } } |
