|
@@ -413,6 +413,7 @@ void DetectableHost::detectOnce() {
|
|
|
size_t NumAnomalousDimensions = 0;
|
|
|
size_t NumNormalDimensions = 0;
|
|
|
size_t NumTrainedDimensions = 0;
|
|
|
+ size_t NumActiveDimensions = 0;
|
|
|
|
|
|
bool CollectAnomalyRates = (++AnomalyRateTimer == Cfg.DBEngineAnomalyRateEvery);
|
|
|
if (CollectAnomalyRates)
|
|
@@ -428,6 +429,13 @@ void DetectableHost::detectOnce() {
|
|
|
|
|
|
Dimension *D = DP.second;
|
|
|
|
|
|
+ if (!D->isActive()) {
|
|
|
+ D->updateAnomalyBitCounter(AnomalyRateRS, AnomalyRateTimer, false);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ NumActiveDimensions++;
|
|
|
+
|
|
|
auto P = D->detect(WindowLength, ResetBitCounter);
|
|
|
bool IsAnomalous = P.first;
|
|
|
double AnomalyScore = P.second;
|
|
@@ -444,11 +452,11 @@ void DetectableHost::detectOnce() {
|
|
|
}
|
|
|
|
|
|
if (NumAnomalousDimensions)
|
|
|
- WindowAnomalyRate = static_cast<double>(NumAnomalousDimensions) / DimensionsMap.size();
|
|
|
+ WindowAnomalyRate = static_cast<double>(NumAnomalousDimensions) / NumActiveDimensions;
|
|
|
else
|
|
|
WindowAnomalyRate = 0.0;
|
|
|
|
|
|
- NumNormalDimensions = DimensionsMap.size() - NumAnomalousDimensions;
|
|
|
+ NumNormalDimensions = NumActiveDimensions - NumAnomalousDimensions;
|
|
|
}
|
|
|
|
|
|
if (CollectAnomalyRates) {
|
|
@@ -460,6 +468,7 @@ void DetectableHost::detectOnce() {
|
|
|
this->NumAnomalousDimensions = NumAnomalousDimensions;
|
|
|
this->NumNormalDimensions = NumNormalDimensions;
|
|
|
this->NumTrainedDimensions = NumTrainedDimensions;
|
|
|
+ this->NumActiveDimensions = NumActiveDimensions;
|
|
|
|
|
|
worker_is_busy(WORKER_JOB_UPDATE_CHARTS);
|
|
|
updateDimensionsChart(getRH(), NumTrainedDimensions, NumNormalDimensions, NumAnomalousDimensions);
|