Просмотр исходного кода

Merge pull request #15188 from kenrowland/HPCC-26238

HPCC-26238 Add scoped classes to manage gauge metrics

Reviewed-By: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman 3 лет назад
Родитель
Сommit
65525de9a6

+ 45 - 4
system/jlib/jmetrics.hpp

@@ -136,10 +136,7 @@ public:
     GaugeMetric(const char *name, const char *description) :
         MetricVal{name, description, MetricType::METRICS_GAUGE}  { }
 
-    /*
-     * Update the value as indicated
-     */
-    void add(int64_t delta)
+    void adjust(int64_t delta)
     {
         value += delta;
     }
@@ -268,4 +265,48 @@ std::shared_ptr<CustomMetric<T>> createCustomMetricAndAddToReporter(const char *
     return pMetric;
 }
 
+
+class jlib_decl ScopedGaugeUpdater
+{
+public:
+    explicit ScopedGaugeUpdater(GaugeMetric &_pGauge, int64_t _amount=1)
+        : gauge{_pGauge}, amount{_amount}
+    {
+        gauge.adjust(amount);
+    }
+    ScopedGaugeUpdater(const ScopedGaugeUpdater&) = delete;
+    ScopedGaugeUpdater(ScopedGaugeUpdater&) = delete;
+    ScopedGaugeUpdater& operator=(const ScopedGaugeUpdater&) = delete;
+    ScopedGaugeUpdater& operator=(ScopedGaugeUpdater&) = delete;
+    ~ScopedGaugeUpdater()
+    {
+        gauge.adjust(-amount);
+    }
+
+protected:
+    GaugeMetric &gauge;
+    int64_t amount;
+};
+
+
+class jlib_decl ScopedGaugeDecrementer
+{
+public:
+    explicit ScopedGaugeDecrementer(GaugeMetric &_pGauge, int64_t _amount=1)
+        : gauge{_pGauge}, amount{_amount}
+    { }
+    ScopedGaugeDecrementer(const ScopedGaugeDecrementer&) = delete;
+    ScopedGaugeDecrementer(ScopedGaugeDecrementer&) = delete;
+    ScopedGaugeDecrementer& operator=(const ScopedGaugeDecrementer&) = delete;
+    ScopedGaugeDecrementer& operator=(ScopedGaugeDecrementer&) = delete;
+    ~ScopedGaugeDecrementer()
+    {
+        gauge.adjust(-amount);
+    }
+
+protected:
+    GaugeMetric &gauge;
+    int64_t amount;
+};
+
 }

+ 3 - 3
system/metrics/testing/metrictest.cpp

@@ -130,12 +130,12 @@ void processThread(int numLoops, unsigned delay, bool addDynamic, const std::str
 
         if (pDynamicMetric)
         {
-            pDynamicMetric->add(1);
+            pDynamicMetric->adjust(1);
         }
 
         pEventCountMetric->inc(2u);
-        pQueueSizeMetric->add(3);
+        pQueueSizeMetric->adjust(3);
         std::this_thread::sleep_for(std::chrono::seconds(delay));
-        pQueueSizeMetric->add(-1);
+        pQueueSizeMetric->adjust(-1);
     }
 }

+ 2 - 2
testing/unittests/metrics/MetricFrameworkTests.cpp

@@ -109,11 +109,11 @@ protected:
 
         //
         // Test updating gauge
-        pGauge->add(10);
+        pGauge->adjust(10);
         gaugeValue = pGauge->queryValue();
         CPPUNIT_ASSERT_EQUAL(35, gaugeValue);
 
-        pGauge->add(-5);
+        pGauge->adjust(-5);
         gaugeValue = pGauge->queryValue();
         CPPUNIT_ASSERT_EQUAL(30, gaugeValue);
     }