| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 | #include <ctime>#include "gauge.h"namespace prometheus {Gauge::Gauge() : value_{0} {}Gauge::Gauge(double value) : value_{value} {}void Gauge::inc() { inc(1.0); }void Gauge::inc(double value) {  if (value < 0.0) {    return;  }  change(value);}void Gauge::dec() { dec(1.0); }void Gauge::dec(double value) {  if (value < 0.0) {    return;  }  change(-1.0 * value);}void Gauge::set(double value) { value_.store(value); }void Gauge::change(double value) {  auto current = value_.load();  while (!value_.compare_exchange_weak(current, current + value))    ;}void Gauge::set_to_current_time() {  auto time = std::time(nullptr);  set(static_cast<double>(time));}double Gauge::value() const { return value_; }io::prometheus::client::Metric Gauge::collect() {  io::prometheus::client::Metric metric;  auto gauge = metric.mutable_gauge();  gauge->set_value(value());  return metric;}}
 |