1+ #include " histogramMetric.h"
2+
3+ uint64_t kleins::metrics::counterBucketMetricData::get () {
4+ return counterValue;
5+ }
6+
7+ void kleins::metrics::counterBucketMetricData::set (uint64_t value) {
8+ assert ((" Attemped to decrease counter value" , value < counterValue));
9+
10+ counterValue = value;
11+ }
12+
13+ void kleins::metrics::counterBucketMetricData::inc (uint64_t value) {
14+ counterValue += value;
15+ }
16+
17+ void kleins::metrics::counterBucketMetricData::reset () {
18+ counterValue = 0 ;
19+ }
20+
21+ kleins::metrics::histogramMetric::histogramMetric (const char * name, const char * help) {
22+ setName (name);
23+ setHelp (help);
24+ }
25+
26+ kleins::metrics::histogramMetric::~histogramMetric () {
27+ }
28+
29+ const char * kleins::metrics::histogramMetric::getType () {
30+ return " counter" ;
31+ }
32+
33+ void kleins::metrics::histogramMetric::addBucket (const char * bucketName) {
34+ counterValues.insert (std::make_pair (std::string (bucketName), new counterBucketMetricData));
35+ }
36+
37+ kleins::metrics::counterBucketMetricData* kleins::metrics::histogramMetric::operator [](std::string& input) {
38+ for (auto x : counterValues) {
39+ if (x.first == input) {
40+ return x.second ;
41+ }
42+ }
43+ assert (" A Bucket was accessed that never existed" );
44+ return 0 ;
45+ }
46+
47+ kleins::metrics::counterBucketMetricData* kleins::metrics::histogramMetric::operator [](const char * input) {
48+ for (auto x : counterValues) {
49+ if (x.first == input) {
50+ return x.second ;
51+ }
52+ }
53+ assert (" A Bucket was accessed that never existed" );
54+ return 0 ;
55+ }
56+
57+ std::unique_ptr<char *> kleins::metrics::histogramMetric::construct () {
58+ std::stringstream ss;
59+ ss << " # HELP " << nameString << ' ' << helpString << " \r\n "
60+ << " # TYPE " << nameString << ' ' << getType () << " \r\n " ;
61+
62+ for (auto x : counterValues) {
63+ ss << nameString << ' {' << x.first << " } " << x.second ->get () << " \r\n " ;
64+ }
65+ int totalLength = ss.str ().length ();
66+
67+ char * outputBuffer = new char [totalLength];
68+ std::memcpy (outputBuffer, ss.str ().c_str (), totalLength);
69+
70+ return std::make_unique<char *>(outputBuffer);
71+ };
0 commit comments