JobAggregatorConfigurator.cpp 3.25 KB
Newer Older
1
2
3
//================================================================================
// Name        : JobAggregatorConfigurator.cpp
// Author      : Alessio Netti
Micha Müller's avatar
Micha Müller committed
4
// Contact     : info@dcdb.it
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
41
42
43
44
45
46
47
48
49
50
51
52
53
// Copyright   : Leibniz Supercomputing Centre
// Description :
//================================================================================

//================================================================================
// This file is part of DCDB (DataCenter DataBase)
// Copyright (C) 2019-2019 Leibniz Supercomputing Centre
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
//================================================================================

#include "JobAggregatorConfigurator.h"

JobAggregatorConfigurator::JobAggregatorConfigurator() : JobAnalyzerConfiguratorTemplate() {
    _analyzerName = "aggregator";
    _baseName     = "sensor";
}

JobAggregatorConfigurator::~JobAggregatorConfigurator() {}

void JobAggregatorConfigurator::sensorBase(AggregatorSensorBase& s, CFG_VAL config) {
    BOOST_FOREACH(boost::property_tree::iptree::value_type &val, config)
    {
        if (boost::iequals(val.first, "operation")) {
            std::string opName = val.second.data();
            if (opName == "sum")
                s.setOperation(AggregatorSensorBase::SUM);
            else if (opName == "average")
                s.setOperation(AggregatorSensorBase::AVG);
            else if (opName == "maximum")
                s.setOperation(AggregatorSensorBase::MAX);
            else if (opName == "minimum")
                s.setOperation(AggregatorSensorBase::MIN);
            else if (opName == "std")
                s.setOperation(AggregatorSensorBase::STD);
            else if (opName == "percentiles")
                s.setOperation(AggregatorSensorBase::QTL);
54
55
            else if (opName == "observations")
                s.setOperation(AggregatorSensorBase::OBS);
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
        } else if (boost::iequals(val.first, "percentile")) {
            size_t quantile = stoull(val.second.data());
            if( quantile>0 && quantile<100 )
                s.setQuantile(quantile);
        }
    }
}

void JobAggregatorConfigurator::analyzer(JobAggregatorAnalyzer& a, CFG_VAL config) {
    BOOST_FOREACH(boost::property_tree::iptree::value_type &val, config)
    {
        if (boost::iequals(val.first, "window"))
            a.setWindow(stoull(val.second.data()) * 1000000);
    }
}

Alessio Netti's avatar
Alessio Netti committed
72
73
74
75
76
77
78
bool JobAggregatorConfigurator::unit(UnitTemplate<AggregatorSensorBase>& u) {
    if(u.getOutputs().empty()) {
        LOG(error) << _analyzerName << ": At least one output sensor per unit must be defined!";
        return false;
    }
    return true; 
}