ClickHouse/src/Interpreters/AsynchronousMetrics.h

61 lines
1.2 KiB
C++
Raw Normal View History

#pragma once
#include <thread>
#include <mutex>
#include <condition_variable>
#include <unordered_map>
#include <string>
#include <Common/ThreadPool.h>
2020-04-19 20:49:13 +00:00
#include <Common/MemoryStatisticsOS.h>
namespace DB
{
class Context;
2020-06-10 19:17:30 +00:00
typedef double AsynchronousMetricValue;
typedef std::unordered_map<std::string, AsynchronousMetricValue> AsynchronousMetricValues;
2020-06-26 00:16:58 +00:00
/** Periodically (by default, each minute, starting at 30 seconds offset)
* calculates and updates some metrics,
* that are not updated automatically (so, need to be asynchronously calculated).
*/
class AsynchronousMetrics
{
public:
2020-06-26 00:16:58 +00:00
AsynchronousMetrics(Context & context_, int update_period_seconds)
: context(context_),
update_period(update_period_seconds),
thread([this] { run(); })
{
}
~AsynchronousMetrics();
/// Returns copy of all values.
2020-06-10 19:17:30 +00:00
AsynchronousMetricValues getValues() const;
private:
Context & context;
2020-06-26 00:16:58 +00:00
const std::chrono::seconds update_period;
2020-06-10 19:17:30 +00:00
mutable std::mutex mutex;
std::condition_variable wait_cond;
2020-06-10 19:17:30 +00:00
bool quit {false};
AsynchronousMetricValues values;
2020-04-21 18:49:19 +00:00
#if defined(OS_LINUX)
2020-04-19 20:49:13 +00:00
MemoryStatisticsOS memory_stat;
2020-04-21 18:49:19 +00:00
#endif
ThreadFromGlobalPool thread;
void run();
void update();
};
}