35 void Record(std::chrono::nanoseconds latency,
36 ifw::fnd::defs::Status status);
42 std::uint64_t
TotalOps() const noexcept;
46 void Print(std::ostream& os, std::chrono::seconds duration) const;
54 static constexpr std::
size_t kStatusCount = 16;
55 std::array<std::atomic<std::uint64_t>, kStatusCount> m_status_counts{};
58 std::atomic<std::uint64_t> m_connected_events{0};
59 std::atomic<std::uint64_t> m_reconnecting_events{0};
60 std::atomic<std::uint64_t> m_faulted_events{0};
61 std::atomic<std::uint64_t> m_disconnected_events{0};
71 static constexpr std::size_t kBuckets = 32;
72 std::array<std::atomic<std::uint64_t>, kBuckets> m_latency_buckets{};
74 static std::size_t BucketIndex(std::chrono::nanoseconds latency);
77 std::uint64_t Percentile(
double p)
const;
78 double BucketUpperBoundUs(std::size_t idx)
const;