From c99baa68d1b8655fa0c1f4d937149140c92a347d Mon Sep 17 00:00:00 2001 From: Everett Badeaux Date: Mon, 7 Apr 2025 17:15:50 -0500 Subject: [PATCH] Add ttl --- spectator/gauge_test.cc | 16 ++++++++++++++++ spectator/stateless_meters.h | 13 ++++++++++--- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/spectator/gauge_test.cc b/spectator/gauge_test.cc index d92e11a..75c5fbf 100644 --- a/spectator/gauge_test.cc +++ b/spectator/gauge_test.cc @@ -24,6 +24,22 @@ TEST(Gauge, Set) { EXPECT_EQ(publisher.SentMessages(), expected); } +TEST(Gauge, SetWithTTL) { + TestPublisher publisher; + auto id = std::make_shared("gauge", Tags{}); + auto id2 = std::make_shared("gauge2", Tags{{"key", "val"}}); + Gauge g{id, &publisher, 1}; + Gauge g2{id2, &publisher, 2}; + + g.Set(42); + g2.Set(2); + g.Set(1); + std::vector expected = {"g,1:gauge:42", "g,2:gauge2,key=val:2", + "g,1:gauge:1"}; + EXPECT_EQ(publisher.SentMessages(), expected); +} + + TEST(Gauge, InvalidTags) { TestPublisher publisher; // test with a single tag, because tags order is not guaranteed in a flat_hash_map diff --git a/spectator/stateless_meters.h b/spectator/stateless_meters.h index 3e56162..6a4aa3f 100644 --- a/spectator/stateless_meters.h +++ b/spectator/stateless_meters.h @@ -137,12 +137,19 @@ class DistributionSummary : public StatelessMeter { template class Gauge : public StatelessMeter { public: - Gauge(IdPtr id, Pub* publisher) - : StatelessMeter(std::move(id), publisher) {} + Gauge(IdPtr id, Pub* publisher, unsigned int ttl = 0) + : StatelessMeter(std::move(id), publisher) { + if (ttl > 0) { + type_str_ = "g," + std::to_string(ttl); + } + } void Set(double value) noexcept { this->send(value); } protected: - std::string_view Type() override { return "g"; } + std::string_view Type() override { return type_str_; } + + private: + std::string type_str_{"g"}; }; template