blob: 99c3a8e65a04e3020bb0640ec3e0cd35de15cdf0 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
/* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */
#include "livestatus/stdaggregator.hpp"
#include <math.h>
using namespace icinga;
StdAggregator::StdAggregator(String attr)
: m_StdAttr(std::move(attr))
{ }
StdAggregatorState *StdAggregator::EnsureState(AggregatorState **state)
{
if (!*state)
*state = new StdAggregatorState();
return static_cast<StdAggregatorState *>(*state);
}
void StdAggregator::Apply(const Table::Ptr& table, const Value& row, AggregatorState **state)
{
Column column = table->GetColumn(m_StdAttr);
Value value = column.ExtractValue(row);
StdAggregatorState *pstate = EnsureState(state);
pstate->StdSum += value;
pstate->StdQSum += pow(value, 2);
pstate->StdCount++;
}
double StdAggregator::GetResultAndFreeState(AggregatorState *state) const
{
StdAggregatorState *pstate = EnsureState(&state);
double result = sqrt((pstate->StdQSum - (1 / pstate->StdCount) * pow(pstate->StdSum, 2)) / (pstate->StdCount - 1));
delete pstate;
return result;
}
|