| 12345678910111213141516171819202122232425262728293031323334353637383940414243 | #pragma once#include <atomic>#include <cstdint>#include <memory>#include "CivetServer.h"#include "registry.h"#include "histogram.h"namespace prometheus {class MetricsHandler : public CivetHandler { public:  MetricsHandler(const std::vector<std::weak_ptr<Collectable>>& collectables,                 Registry& registry);  bool handleGet(CivetServer* server, struct mg_connection* conn); private:  std::vector<io::prometheus::client::MetricFamily> collectMetrics() const;  const std::vector<std::weak_ptr<Collectable>>& collectables_;  Family<Counter>* bytesTransferedFamily_;  Counter* bytesTransfered_;  Family<Counter>* numScrapesFamily_;  Counter* numScrapes_;  Family<Histogram> *requestLatenciesFamily_;  Histogram* requestLatencies_;};class Exposer { public:  Exposer(std::uint16_t port);  void registerCollectable(const std::weak_ptr<Collectable>& collectable); private:  CivetServer server_;  std::vector<std::weak_ptr<Collectable>> collectables_;  std::shared_ptr<Registry> exposerRegistry_;  MetricsHandler metricsHandler_;};}
 |