summaryrefslogtreecommitdiffstats
path: root/staging_vespalib/src/vespa/vespalib/metrics/snapshots.h
diff options
context:
space:
mode:
Diffstat (limited to 'staging_vespalib/src/vespa/vespalib/metrics/snapshots.h')
-rw-r--r--staging_vespalib/src/vespa/vespalib/metrics/snapshots.h100
1 files changed, 100 insertions, 0 deletions
diff --git a/staging_vespalib/src/vespa/vespalib/metrics/snapshots.h b/staging_vespalib/src/vespa/vespalib/metrics/snapshots.h
new file mode 100644
index 00000000000..87be72d2d52
--- /dev/null
+++ b/staging_vespalib/src/vespa/vespalib/metrics/snapshots.h
@@ -0,0 +1,100 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+#pragma once
+
+#include <vespa/vespalib/stllike/string.h>
+#include "mergers.h"
+
+namespace vespalib {
+namespace metrics {
+
+class AxisMeasure {
+private:
+ const vespalib::string &_dimensionName;
+ const vespalib::string &_labelValue;
+public:
+ const vespalib::string &dimensionName() const { return _dimensionName; }
+ const vespalib::string &labelValue() const { return _labelValue; }
+ AxisMeasure(const vespalib::string &a,
+ const vespalib::string &v)
+ : _dimensionName(a), _labelValue(v)
+ {}
+};
+
+struct PointSnapshot {
+ std::vector<AxisMeasure> dimensions;
+};
+
+class CounterSnapshot {
+private:
+ const vespalib::string &_name;
+ const PointSnapshot &_point;
+ const size_t _count;
+public:
+ CounterSnapshot(const vespalib::string &n, const PointSnapshot &p, const CounterAggregator &c)
+ : _name(n), _point(p), _count(c.count)
+ {}
+ const vespalib::string &name() const { return _name; }
+ const PointSnapshot &point() const { return _point; }
+ size_t count() const { return _count; }
+};
+
+class GaugeSnapshot {
+private:
+ const vespalib::string &_name;
+ const PointSnapshot &_point;
+ const size_t _observedCount;
+ const double _averageValue;
+ const double _minValue;
+ const double _maxValue;
+ const double _lastValue;
+public:
+ GaugeSnapshot(const vespalib::string &n, const PointSnapshot &p, const GaugeAggregator &c)
+ : _name(n),
+ _point(p),
+ _observedCount(c.observedCount),
+ _averageValue(c.sumValue / c.observedCount),
+ _minValue(c.minValue),
+ _maxValue(c.maxValue),
+ _lastValue(c.lastValue)
+ {}
+ const vespalib::string &name() const { return _name; }
+ const PointSnapshot &point() const { return _point; }
+ size_t observedCount() const { return _observedCount; }
+ double averageValue() const { return _averageValue; }
+ double minValue() const { return _minValue; }
+ double maxValue() const { return _maxValue; }
+ double lastValue() const { return _lastValue; }
+};
+
+class Snapshot {
+private:
+ double _start;
+ double _end;
+ std::vector<CounterSnapshot> _counters;
+ std::vector<GaugeSnapshot> _gauges;
+ std::vector<PointSnapshot> _points;
+public:
+ double startTime() const { return _start; }; // seconds since 1970
+ double endTime() const { return _end; }; // seconds since 1970
+
+ const std::vector<CounterSnapshot> &counters() const {
+ return _counters;
+ }
+ const std::vector<GaugeSnapshot> &gauges() const {
+ return _gauges;
+ }
+ const std::vector<PointSnapshot> &points() const {
+ return _points;
+ }
+
+ // builders:
+ Snapshot(double s, double e)
+ : _start(s), _end(e), _counters(), _gauges()
+ {}
+ void add(const PointSnapshot &entry) { _points.push_back(entry); }
+ void add(const CounterSnapshot &entry) { _counters.push_back(entry); }
+ void add(const GaugeSnapshot &entry) { _gauges.push_back(entry); }
+};
+
+} // namespace vespalib::metrics
+} // namespace vespalib