From bb50acdcb8073654ea667b8c0272e335bd43f844 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Thu, 14 Apr 2022 20:12:14 +0200 Subject: Merging upstream version 1.34.0. Signed-off-by: Daniel Baumann --- ml/Host.h | 44 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 40 insertions(+), 4 deletions(-) (limited to 'ml/Host.h') diff --git a/ml/Host.h b/ml/Host.h index 86591d7ae..61d3b1625 100644 --- a/ml/Host.h +++ b/ml/Host.h @@ -14,7 +14,27 @@ namespace ml { class RrdHost { public: - RrdHost(RRDHOST *RH) : RH(RH) {} + RrdHost(RRDHOST *RH) : RH(RH) { + AnomalyRateRS = rrdset_create( + RH, + "anomaly_detection", + "anomaly_rates", + NULL, // name + "anomaly_rates", + NULL, // ctx + "Average anomaly rate", + "anomaly rate", + "netdata", + "ml", + 39189, + Cfg.DBEngineAnomalyRateEvery, + RRDSET_TYPE_LINE + ); + + AnomalyRateRS->flags = static_cast( + static_cast(AnomalyRateRS->flags) | RRDSET_FLAG_HIDDEN + ); + } RRDHOST *getRH() { return RH; } @@ -35,12 +55,13 @@ public: protected: RRDHOST *RH; + RRDSET *AnomalyRateRS; // Protect dimension and lock maps std::mutex Mutex; - std::map DimensionsMap; - std::map LocksMap; + std::unordered_map DimensionsMap; + std::unordered_map LocksMap; }; class TrainableHost : public RrdHost { @@ -49,9 +70,22 @@ public: void train(); + void updateResourceUsage() { + std::lock_guard Lock(ResourceUsageMutex); + getrusage(RUSAGE_THREAD, &ResourceUsage); + } + + void getResourceUsage(struct rusage *RU) { + std::lock_guard Lock(ResourceUsageMutex); + memcpy(RU, &ResourceUsage, sizeof(struct rusage)); + } + private: std::pair> findDimensionToTrain(const TimePoint &NowTP); void trainDimension(Dimension *D, const TimePoint &NowTP); + + struct rusage ResourceUsage{}; + std::mutex ResourceUsageMutex; }; class DetectableHost : public TrainableHost { @@ -88,12 +122,14 @@ private: static_cast(Cfg.ADMinWindowSize * Cfg.ADWindowRateThreshold) }; - CalculatedNumber AnomalyRate{0.0}; + CalculatedNumber WindowAnomalyRate{0.0}; size_t NumAnomalousDimensions{0}; size_t NumNormalDimensions{0}; size_t NumTrainedDimensions{0}; + unsigned AnomalyRateTimer{0}; + Database DB{Cfg.AnomalyDBPath}; }; -- cgit v1.2.3