Kea 1.5.0
stats_mgr.cc
Go to the documentation of this file.
1// Copyright (C) 2015,2017 Internet Systems Consortium, Inc. ("ISC")
2//
3// This Source Code Form is subject to the terms of the Mozilla Public
4// License, v. 2.0. If a copy of the MPL was not distributed with this
5// file, You can obtain one at http://mozilla.org/MPL/2.0/.
6
7#include <config.h>
8
10#include <stats/stats_mgr.h>
11#include <cc/data.h>
13
14using namespace std;
15using namespace isc::data;
16using namespace isc::config;
17
18namespace isc {
19namespace stats {
20
22 static StatsMgr stats_mgr;
23 return (stats_mgr);
24}
25
26StatsMgr::StatsMgr()
27 :global_(new StatContext()) {
28
29}
30
31void StatsMgr::setValue(const std::string& name, const int64_t value) {
32 setValueInternal(name, value);
33}
34
35void StatsMgr::setValue(const std::string& name, const double value) {
36 setValueInternal(name, value);
37}
38
39void StatsMgr::setValue(const std::string& name, const StatsDuration& value) {
40 setValueInternal(name, value);
41}
42void StatsMgr::setValue(const std::string& name, const std::string& value) {
43 setValueInternal(name, value);
44}
45
46void StatsMgr::addValue(const std::string& name, const int64_t value) {
47 addValueInternal(name, value);
48}
49
50void StatsMgr::addValue(const std::string& name, const double value) {
51 addValueInternal(name, value);
52}
53
54void StatsMgr::addValue(const std::string& name, const StatsDuration& value) {
55 addValueInternal(name, value);
56}
57
58void StatsMgr::addValue(const std::string& name, const std::string& value) {
59 addValueInternal(name, value);
60}
61
62ObservationPtr StatsMgr::getObservation(const std::string& name) const {
64 // Currently we keep everything in a global context.
65 return (global_->get(name));
66}
67
70 // Currently we keep everything in a global context.
71 return (global_->add(stat));
72}
73
74bool StatsMgr::deleteObservation(const std::string& name) {
76 // Currently we keep everything in a global context.
77 return (global_->del(name));
78}
79
80void StatsMgr::setMaxSampleAge(const std::string& ,
81 const StatsDuration&) {
82 isc_throw(NotImplemented, "setMaxSampleAge not implemented");
83}
84
85void StatsMgr::setMaxSampleCount(const std::string& , uint32_t){
86 isc_throw(NotImplemented, "setMaxSampleCount not implemented");
87}
88
89bool StatsMgr::reset(const std::string& name) {
91 if (obs) {
92 obs->reset();
93 return (true);
94 } else {
95 return (false);
96 }
97}
98
99bool StatsMgr::del(const std::string& name) {
100 return (global_->del(name));
101}
102
104 global_->stats_.clear();
105}
106
107isc::data::ConstElementPtr StatsMgr::get(const std::string& name) const {
109 ObservationPtr obs = getObservation(name);
110 if (obs) {
111 response->set(name, obs->getJSON()); // that contains the observation
112 }
113 return (response);
114}
115
118
119 // Let's iterate over all stored statistics...
120 for (std::map<std::string, ObservationPtr>::iterator s = global_->stats_.begin();
121 s != global_->stats_.end(); ++s) {
122
123 // ... and add each of them to the map.
124 map->set(s->first, s->second->getJSON());
125 }
126 return (map);
127}
128
130 // Let's iterate over all stored statistics...
131 for (std::map<std::string, ObservationPtr>::iterator s = global_->stats_.begin();
132 s != global_->stats_.end(); ++s) {
133
134 // ... and reset each statistic.
135 s->second->reset();
136 }
137}
138
139size_t StatsMgr::count() const {
140 return (global_->stats_.size());
141}
142
144StatsMgr::statisticGetHandler(const std::string& /*name*/,
145 const isc::data::ConstElementPtr& params) {
146 std::string name, error;
147 if (!getStatName(params, name, error)) {
148 return (createAnswer(CONTROL_RESULT_ERROR, error));
149 }
151 instance().get(name)));
152}
153
155StatsMgr::statisticResetHandler(const std::string& /*name*/,
156 const isc::data::ConstElementPtr& params) {
157 std::string name, error;
158 if (!getStatName(params, name, error)) {
159 return (createAnswer(CONTROL_RESULT_ERROR, error));
160 }
161
162 if (instance().reset(name)) {
164 "Statistic '" + name + "' reset."));
165 } else {
167 "No '" + name + "' statistic found"));
168 }
169}
170
172StatsMgr::statisticRemoveHandler(const std::string& /*name*/,
173 const isc::data::ConstElementPtr& params) {
174 std::string name, error;
175 if (!getStatName(params, name, error)) {
176 return (createAnswer(CONTROL_RESULT_ERROR, error));
177 }
178 if (instance().del(name)) {
180 "Statistic '" + name + "' removed."));
181 } else {
183 "No '" + name + "' statistic found"));
184 }
185
186}
187
189StatsMgr::statisticRemoveAllHandler(const std::string& /*name*/,
190 const isc::data::ConstElementPtr& /*params*/) {
193 "All statistics removed."));
194}
195
197StatsMgr::statisticGetAllHandler(const std::string& /*name*/,
198 const isc::data::ConstElementPtr& /*params*/) {
199 ConstElementPtr all_stats = instance().getAll();
200 return (createAnswer(CONTROL_RESULT_SUCCESS, all_stats));
201}
202
204StatsMgr::statisticResetAllHandler(const std::string& /*name*/,
205 const isc::data::ConstElementPtr& /*params*/) {
206 instance().resetAll();
208 "All statistics reset to neutral values."));
209}
210
211bool
212StatsMgr::getStatName(const isc::data::ConstElementPtr& params,
213 std::string& name,
214 std::string& reason) {
215 if (!params) {
216 reason = "Missing mandatory 'name' parameter.";
217 return (false);
218 }
219 ConstElementPtr stat_name = params->get("name");
220 if (!stat_name) {
221 reason = "Missing mandatory 'name' parameter.";
222 return (false);
223 }
224 if (stat_name->getType() != Element::string) {
225 reason = "'name' parameter expected to be a string.";
226 return (false);
227 }
228
229 name = stat_name->stringValue();
230 return (true);
231}
232
233};
234};
A generic exception that is thrown when a function is not implemented.
static ElementPtr createMap(const Position &pos=ZERO_POSITION())
Creates an empty MapElement type ElementPtr.
Definition: data.cc:268
Statistics Manager class.
ObservationPtr getObservation(const std::string &name) const
Returns an observation.
Definition: stats_mgr.cc:62
static StatsMgr & instance()
Statistics Manager accessor method.
Definition: stats_mgr.cc:21
void addValueInternal(const std::string &name, DataType value)
Adds specified value to a given statistic (internal version).
void addObservation(const ObservationPtr &stat)
Adds a new observation.
Definition: stats_mgr.cc:68
void setValueInternal(const std::string &name, DataType value)
Sets a given statistic to specified value (internal version).
This file contains several functions and constants that are used for handling commands and responses ...
#define isc_throw(type, stream)
A shortcut macro to insert known values into exception arguments.
static isc::data::ConstElementPtr statisticResetHandler(const std::string &name, const isc::data::ConstElementPtr &params)
Handles statistic-reset command.
Definition: stats_mgr.cc:155
static isc::data::ConstElementPtr statisticResetAllHandler(const std::string &name, const isc::data::ConstElementPtr &params)
Handles statistic-reset-all command.
Definition: stats_mgr.cc:204
static isc::data::ConstElementPtr statisticRemoveHandler(const std::string &name, const isc::data::ConstElementPtr &params)
Handles statistic-remove command.
Definition: stats_mgr.cc:172
static isc::data::ConstElementPtr statisticRemoveAllHandler(const std::string &name, const isc::data::ConstElementPtr &params)
Handles statistic-remove-all command.
Definition: stats_mgr.cc:189
static isc::data::ConstElementPtr statisticGetHandler(const std::string &name, const isc::data::ConstElementPtr &params)
Handles statistic-get command.
Definition: stats_mgr.cc:144
static isc::data::ConstElementPtr statisticGetAllHandler(const std::string &name, const isc::data::ConstElementPtr &params)
Handles statistic-get-all command.
Definition: stats_mgr.cc:197
bool reset(const std::string &name)
Resets specified statistic.
Definition: stats_mgr.cc:89
void removeAll()
Removes all collected statistics.
Definition: stats_mgr.cc:103
void resetAll()
Resets all collected statistics back to zero.
Definition: stats_mgr.cc:129
bool del(const std::string &name)
Removes specified statistic.
Definition: stats_mgr.cc:99
size_t count() const
Returns number of available statistics.
Definition: stats_mgr.cc:139
isc::data::ConstElementPtr get(const std::string &name) const
Returns a single statistic as a JSON structure.
Definition: stats_mgr.cc:107
isc::data::ConstElementPtr getAll() const
Returns all statistics as a JSON structure.
Definition: stats_mgr.cc:116
void setValue(const std::string &name, const int64_t value)
Records absolute integer observation.
Definition: stats_mgr.cc:31
void setMaxSampleAge(const std::string &name, const StatsDuration &duration)
Determines maximum age of samples.
Definition: stats_mgr.cc:80
void setMaxSampleCount(const std::string &name, uint32_t max_samples)
Determines how many samples of a given statistic should be kept.
Definition: stats_mgr.cc:85
void addValue(const std::string &name, const int64_t value)
Records incremental integer observation.
Definition: stats_mgr.cc:46
const int CONTROL_RESULT_ERROR
Status code indicating a general failure.
ConstElementPtr createAnswer()
Creates a standard config/command level success answer message (i.e.
const int CONTROL_RESULT_SUCCESS
Status code indicating a successful operation.
boost::shared_ptr< const Element > ConstElementPtr
Definition: data.h:23
boost::shared_ptr< Element > ElementPtr
Definition: data.h:22
boost::posix_time::time_duration StatsDuration
Defines duration resolution.
Definition: observation.h:33
boost::shared_ptr< Observation > ObservationPtr
Observation pointer.
Definition: observation.h:261
Defines the logger used by the top-level component of kea-dhcp-ddns.
Statistics context.
Definition: context.h:30