16#include <unordered_map>
99 return common::ok(
true);
111 virtual common::Result<metrics_snapshot>
retrieve(
size_t index) = 0;
112 virtual common::Result<std::vector<metrics_snapshot>>
retrieve_range(
size_t start,
size_t count) = 0;
113 virtual size_t size()
const = 0;
115 virtual common::Result<bool>
flush() = 0;
116 virtual common::Result<bool>
clear() = 0;
117 virtual std::unordered_map<std::string, size_t>
get_stats()
const = 0;
131 std::lock_guard<std::mutex> lock(
mutex_);
139 return common::ok(
true);
142 common::Result<metrics_snapshot>
retrieve(
size_t index)
override {
143 std::lock_guard<std::mutex> lock(
mutex_);
152 common::Result<std::vector<metrics_snapshot>>
retrieve_range(
size_t start,
size_t count)
override {
153 std::lock_guard<std::mutex> lock(
mutex_);
155 std::vector<metrics_snapshot> result;
156 size_t end = std::min(start + count,
snapshots_.size());
158 for (
size_t i = start; i < end; ++i) {
162 return common::ok(std::move(result));
166 std::lock_guard<std::mutex> lock(
mutex_);
174 common::Result<bool>
flush()
override {
176 return common::ok(
true);
179 common::Result<bool>
clear()
override {
180 std::lock_guard<std::mutex> lock(
mutex_);
182 return common::ok(
true);
185 std::unordered_map<std::string, size_t>
get_stats()
const override {
186 std::lock_guard<std::mutex> lock(
mutex_);
210 std::lock_guard<std::mutex> lock(
mutex_);
217 return common::ok(
true);
220 common::Result<metrics_snapshot>
retrieve(
size_t index)
override {
221 std::lock_guard<std::mutex> lock(
mutex_);
230 common::Result<std::vector<metrics_snapshot>>
retrieve_range(
size_t start,
size_t count)
override {
231 std::lock_guard<std::mutex> lock(
mutex_);
233 std::vector<metrics_snapshot> result;
234 size_t end = std::min(start + count,
snapshots_.size());
236 for (
size_t i = start; i < end; ++i) {
240 return common::ok(std::move(result));
244 std::lock_guard<std::mutex> lock(
mutex_);
252 common::Result<bool>
flush()
override {
253 return common::ok(
true);
256 common::Result<bool>
clear()
override {
257 std::lock_guard<std::mutex> lock(
mutex_);
259 return common::ok(
true);
262 std::unordered_map<std::string, size_t>
get_stats()
const override {
263 std::lock_guard<std::mutex> lock(
mutex_);
289 std::lock_guard<std::mutex> lock(
mutex_);
296 return common::ok(
true);
299 common::Result<metrics_snapshot>
retrieve(
size_t index)
override {
300 std::lock_guard<std::mutex> lock(
mutex_);
309 common::Result<std::vector<metrics_snapshot>>
retrieve_range(
size_t start,
size_t count)
override {
310 std::lock_guard<std::mutex> lock(
mutex_);
312 std::vector<metrics_snapshot> result;
313 size_t end = std::min(start + count,
snapshots_.size());
315 for (
size_t i = start; i < end; ++i) {
319 return common::ok(std::move(result));
323 std::lock_guard<std::mutex> lock(
mutex_);
331 common::Result<bool>
flush()
override {
332 return common::ok(
true);
335 common::Result<bool>
clear()
override {
336 std::lock_guard<std::mutex> lock(
mutex_);
338 return common::ok(
true);
341 std::unordered_map<std::string, size_t>
get_stats()
const override {
342 std::lock_guard<std::mutex> lock(
mutex_);
366 std::lock_guard<std::mutex> lock(
mutex_);
373 return common::ok(
true);
376 common::Result<metrics_snapshot>
retrieve(
size_t index)
override {
377 std::lock_guard<std::mutex> lock(
mutex_);
386 common::Result<std::vector<metrics_snapshot>>
retrieve_range(
size_t start,
size_t count)
override {
387 std::lock_guard<std::mutex> lock(
mutex_);
389 std::vector<metrics_snapshot> result;
390 size_t end = std::min(start + count,
snapshots_.size());
392 for (
size_t i = start; i < end; ++i) {
396 return common::ok(std::move(result));
400 std::lock_guard<std::mutex> lock(
mutex_);
408 common::Result<bool>
flush()
override {
409 return common::ok(
true);
412 common::Result<bool>
clear()
override {
413 std::lock_guard<std::mutex> lock(
mutex_);
415 return common::ok(
true);
418 std::unordered_map<std::string, size_t>
get_stats()
const override {
419 std::lock_guard<std::mutex> lock(
mutex_);
443 switch (config.
type) {
445 return std::make_unique<memory_storage_backend>(config);
450 return std::make_unique<file_storage_backend>(config);
455 return std::make_unique<database_storage_backend>(config);
460 return std::make_unique<cloud_storage_backend>(config);
497 const std::string& path,
518 const std::string& path,
519 const std::string& table) {
538 const std::string& bucket) {
542 config.
path = bucket;
556 virtual bool store(
const std::string& key,
const std::string& value) = 0;
557 virtual std::string
retrieve(
const std::string& key) = 0;
558 virtual bool remove(
const std::string& key) = 0;
559 virtual common::Result<bool>
flush() {
return common::ok(
true); }
571 bool store(
const std::string& key,
const std::string& value)
override {
576 std::string
retrieve(
const std::string& key)
override {
577 auto it =
data_.find(key);
578 return it !=
data_.end() ? it->second :
"";
581 bool remove(
const std::string& key)
override {
582 return data_.erase(key) > 0;
586 std::unordered_map<std::string, std::string>
data_;
Cloud storage backend (stub implementation)
cloud_storage_backend(const storage_config &config)
common::Result< bool > store(const metrics_snapshot &snapshot) override
common::Result< std::vector< metrics_snapshot > > retrieve_range(size_t start, size_t count) override
common::Result< metrics_snapshot > retrieve(size_t index) override
size_t capacity() const override
common::Result< bool > clear() override
std::unordered_map< std::string, size_t > get_stats() const override
std::deque< metrics_snapshot > snapshots_
common::Result< bool > flush() override
size_t size() const override
Database storage backend (stub implementation)
size_t capacity() const override
common::Result< bool > flush() override
size_t size() const override
database_storage_backend(const storage_config &config)
common::Result< bool > store(const metrics_snapshot &snapshot) override
database_storage_backend()
std::deque< metrics_snapshot > snapshots_
std::unordered_map< std::string, size_t > get_stats() const override
common::Result< std::vector< metrics_snapshot > > retrieve_range(size_t start, size_t count) override
common::Result< bool > clear() override
common::Result< metrics_snapshot > retrieve(size_t index) override
File storage backend for metrics snapshots.
common::Result< metrics_snapshot > retrieve(size_t index) override
size_t capacity() const override
common::Result< bool > clear() override
file_storage_backend(const storage_config &config)
std::deque< metrics_snapshot > snapshots_
common::Result< std::vector< metrics_snapshot > > retrieve_range(size_t start, size_t count) override
common::Result< bool > flush() override
std::unordered_map< std::string, size_t > get_stats() const override
size_t size() const override
common::Result< bool > store(const metrics_snapshot &snapshot) override
In-memory key-value storage backend (legacy interface)
kv_memory_storage_backend(const storage_config &)
std::string retrieve(const std::string &key) override
kv_memory_storage_backend()=default
std::unordered_map< std::string, std::string > data_
bool store(const std::string &key, const std::string &value) override
bool remove(const std::string &key) override
Basic key-value storage interface - stub.
virtual std::string retrieve(const std::string &key)=0
virtual bool remove(const std::string &key)=0
virtual ~kv_storage_backend()=default
virtual bool store(const std::string &key, const std::string &value)=0
virtual common::Result< bool > flush()
In-memory snapshot storage backend.
common::Result< bool > store(const metrics_snapshot &snapshot) override
common::Result< bool > flush() override
common::Result< std::vector< metrics_snapshot > > retrieve_range(size_t start, size_t count) override
std::unordered_map< std::string, size_t > get_stats() const override
common::Result< bool > clear() override
size_t size() const override
memory_storage_backend(const storage_config &config)
std::deque< metrics_snapshot > snapshots_
size_t capacity() const override
common::Result< metrics_snapshot > retrieve(size_t index) override
Base interface for snapshot storage backends.
virtual size_t capacity() const =0
virtual std::unordered_map< std::string, size_t > get_stats() const =0
virtual common::Result< bool > flush()=0
virtual common::Result< bool > store(const metrics_snapshot &snapshot)=0
virtual common::Result< metrics_snapshot > retrieve(size_t index)=0
virtual common::Result< std::vector< metrics_snapshot > > retrieve_range(size_t start, size_t count)=0
virtual ~snapshot_storage_backend()=default
virtual common::Result< bool > clear()=0
virtual size_t size() const =0
Factory for creating storage backends.
static std::unique_ptr< snapshot_storage_backend > create_backend(const storage_config &config)
Create a storage backend based on configuration.
static std::vector< storage_backend_type > get_supported_backends()
Get list of supported backend types.
Core monitoring system interface definitions.
@ none
Not in a cgroup or not Linux.
std::unique_ptr< snapshot_storage_backend > create_database_storage(storage_backend_type type, const std::string &path, const std::string &table)
Create a database storage backend.
std::unique_ptr< snapshot_storage_backend > create_cloud_storage(storage_backend_type type, const std::string &bucket)
Create a cloud storage backend.
compression_algorithm
Compression algorithms.
std::unique_ptr< snapshot_storage_backend > create_file_storage(const std::string &path, storage_backend_type type, size_t capacity)
Create a file storage backend.
storage_backend_type
Storage backend types.
Result pattern type definitions for monitoring system.
Extended error information with context.
Complete snapshot of metrics at a point in time.
std::string data_directory
storage_backend_type type
std::chrono::milliseconds flush_interval
std::string database_name
common::Result< bool > validate() const
Validate configuration.
compression_algorithm compression