#pragma once #include #include #include #include struct Stats { size_t errors = 0; using Sampler = ReservoirSampler; struct StatsCollector { std::atomic requests{0}; uint64_t requests_bytes = 0; uint64_t work_time = 0; Sampler sampler; /// requests/second, bytes/second std::pair getThroughput(size_t concurrency); double getPercentile(double percent); void add(uint64_t microseconds, size_t requests_inc, size_t bytes_inc); void clear(); }; StatsCollector read_collector; StatsCollector write_collector; void addRead(uint64_t microseconds, size_t requests_inc, size_t bytes_inc); void addWrite(uint64_t microseconds, size_t requests_inc, size_t bytes_inc); void clear(); void report(size_t concurrency); void writeJSON(DB::WriteBuffer & out, size_t concurrency, int64_t start_timestamp); };