#ifndef STATSCOLLECTOR_H_ #define STATSCOLLECTOR_H_ #include #include #include #include #include #include class App; class StatsCollector : public PThread { friend class RequestMetaDataWork; friend class RequestStorageDataWork; public: StatsCollector(App* app); private: App* const app; ClientOps ipMetaClientOps; ClientOps ipStorageClientOps; ClientOps userMetaClientOps; ClientOps userStorageClientOps; mutable std::mutex mutex; int workItemCounter; std::list metaResults; std::list storageResults; std::condition_variable condVar; virtual void run() override; void requestLoop(); void processClientOps(ClientOps& clientOps, NodeType nodeType, bool perUser); void insertMetaData(RequestMetaDataWork::Result result) { const std::unique_lock lock(mutex); metaResults.push_back(std::move(result)); workItemCounter--; condVar.notify_one(); } void insertStorageData(RequestStorageDataWork::Result result) { const std::unique_lock lock(mutex); storageResults.push_back(std::move(result)); workItemCounter--; condVar.notify_one(); } }; #endif /*STATSCOLLECTOR_H_*/