Line data Source code
1 : #pragma once 2 : 3 : #include "envoy/stats/stats.h" 4 : 5 : #include "source/common/stats/metric_impl.h" 6 : 7 : namespace Envoy { 8 : namespace Stats { 9 : 10 : /** 11 : * Null gauge implementation. 12 : * No-ops on all calls and requires no underlying metric or data. 13 : */ 14 : class NullGaugeImpl : public MetricImpl<Gauge> { 15 : public: 16 : explicit NullGaugeImpl(SymbolTable& symbol_table) 17 21423 : : MetricImpl<Gauge>(symbol_table), symbol_table_(symbol_table) {} 18 21423 : ~NullGaugeImpl() override { 19 0 : // MetricImpl must be explicitly cleared() before destruction, otherwise it 20 0 : // will not be able to access the SymbolTable& to free the symbols. An RAII 21 0 : // alternative would be to store the SymbolTable reference in the 22 0 : // MetricImpl, costing 8 bytes per stat. 23 21423 : MetricImpl::clear(symbol_table_); 24 21423 : } 25 : 26 0 : void add(uint64_t) override {} 27 0 : void inc() override {} 28 0 : void dec() override {} 29 3378 : void set(uint64_t) override {} 30 0 : void setParentValue(uint64_t) override {} 31 0 : void sub(uint64_t) override {} 32 0 : uint64_t value() const override { return 0; } 33 0 : ImportMode importMode() const override { return ImportMode::NeverImport; } 34 0 : void mergeImportMode(ImportMode /* import_mode */) override {} 35 : 36 : // Metric 37 0 : bool used() const override { return false; } 38 0 : bool hidden() const override { return false; } 39 0 : SymbolTable& symbolTable() override { return symbol_table_; } 40 : 41 : // RefcountInterface 42 21325 : void incRefCount() override { refcount_helper_.incRefCount(); } 43 21325 : bool decRefCount() override { return refcount_helper_.decRefCount(); } 44 0 : uint32_t use_count() const override { return refcount_helper_.use_count(); } 45 : 46 : private: 47 : RefcountHelper refcount_helper_; 48 : SymbolTable& symbol_table_; 49 : }; 50 : 51 : } // namespace Stats 52 : } // namespace Envoy