#include #include #include #include #include #include #include namespace DB { StorageSystemMetrics::StorageSystemMetrics(const std::string & name_) : name(name_), columns { {"metric", std::make_shared()}, {"value", std::make_shared()}, } { } StoragePtr StorageSystemMetrics::create(const std::string & name_) { return make_shared(name_); } BlockInputStreams StorageSystemMetrics::read( const Names & column_names, ASTPtr query, const Context & context, const Settings & settings, QueryProcessingStage::Enum & processed_stage, const size_t max_block_size, const unsigned threads) { check(column_names); processed_stage = QueryProcessingStage::FetchColumns; Block block; ColumnWithTypeAndName col_metric; col_metric.name = "metric"; col_metric.type = std::make_shared(); col_metric.column = std::make_shared(); block.insert(col_metric); ColumnWithTypeAndName col_value; col_value.name = "value"; col_value.type = std::make_shared(); col_value.column = std::make_shared(); block.insert(col_value); for (size_t i = 0, end = CurrentMetrics::end(); i < end; ++i) { Int64 value = CurrentMetrics::values[i].load(std::memory_order_relaxed); col_metric.column->insert(String(CurrentMetrics::getDescription(CurrentMetrics::Metric(i)))); col_value.column->insert(value); } return BlockInputStreams(1, std::make_shared(block)); } }