// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- // vim: ts=8 sw=2 smarttab #ifndef OSD_PERF_METRIC_COLLECTOR_H_ #define OSD_PERF_METRIC_COLLECTOR_H_ #include "common/Mutex.h" #include "mgr/OSDPerfMetricTypes.h" #include /** * OSD performance query class. */ class OSDPerfMetricCollector { public: struct Listener { virtual ~Listener() { } virtual void handle_query_updated() = 0; }; OSDPerfMetricCollector(Listener &listener); std::map get_queries() const; OSDPerfMetricQueryID add_query( const OSDPerfMetricQuery& query, const std::optional &limit); int remove_query(OSDPerfMetricQueryID query_id); void remove_all_queries(); int get_counters(OSDPerfMetricQueryID query_id, std::map *counters); void process_reports( const std::map &reports); private: typedef std::optional OptionalLimit; typedef std::map> Queries; typedef std::map> Counters; Listener &listener; mutable Mutex lock; OSDPerfMetricQueryID next_query_id = 0; Queries queries; Counters counters; }; #endif // OSD_PERF_METRIC_COLLECTOR_H_