28 {
29 std::cout << "=== Time Series Storage Example ===" << std::endl;
30
31
35 config.memtable_size_mb = 16;
36
37
38 auto engine = std::make_unique<timeseries_engine>(config);
39
40
41 std::cout << "\nWriting test metrics..." << std::endl;
42 auto now = std::chrono::steady_clock::now();
43
44 for (int i = 0; i < 10; ++i) {
45 double value = 100.0 + i * 10;
46 auto timestamp = now - std::chrono::seconds(60 * (10 - i));
47
48 engine->write("cpu.usage", value, timestamp, {{"host", "server1"}});
49 engine->write("memory.usage", value * 0.8, timestamp, {{"host", "server1"}});
50
51 std::cout << " Written metric at t-" << (10 - i) << " minutes: " << value << std::endl;
52 }
53
54
55 std::cout << "\nQuerying CPU usage for last hour..." << std::endl;
56 auto results = engine->query("cpu.usage",
57 now - std::chrono::hours(1),
58 now,
59 {{"host", "server1"}});
60
61 for (const auto& series : results) {
62 std::cout << "Series: " << series.metric_name << std::endl;
63 std::cout << " Points: " << series.points.size() << std::endl;
64 std::cout << " Min: " << series.min_value << std::endl;
65 std::cout << " Max: " << series.max_value << std::endl;
66 std::cout << " Avg: " << series.average() << std::endl;
67 }
68
69
70 std::cout << "\n=== Metric Database Example ===" << std::endl;
71
72 database_config db_config;
73 db_config.data_directory = "./metrics_test_db";
74 db_config.partition_strategy = partition_strategy::by_metric_name;
75
76 auto database = std::make_unique<metric_database>(db_config);
77
78
79 std::vector<metric> batch;
80 for (int i = 0; i < 5; ++i) {
82 m.
name =
"test.metric";
84 m.
timestamp = std::chrono::system_clock::now();
85 m.
tags = {{
"env",
"test"}, {
"instance", std::to_string(i)}};
86 batch.push_back(m);
87 }
88
89 size_t written = database->write_batch(batch);
90 std::cout << "Written " << written << " metrics to database" << std::endl;
91
92
93 std::cout << "\n=== Query Engine Example ===" << std::endl;
94
95 auto query_engine = std::make_unique<metric_query_engine>(database.get());
96
97
98 std::string query_str = "SELECT cpu.usage WHERE host='server1' FROM -1h";
99 std::cout << "Query: " << query_str << std::endl;
100
101
102 auto stats = database->get_stats();
103 std::cout << "\nDatabase Statistics:" << std::endl;
104 std::cout << " Total metrics: " << stats.total_metrics << std::endl;
105 std::cout << " Total points: " << stats.total_points << std::endl;
106 std::cout << " Total partitions: " << stats.total_partitions << std::endl;
107
108 std::cout << "\nStorage example completed successfully!" << std::endl;
109 return 0;
110}
Represents a single metric value with metadata.
Basic metric structure for interface compatibility.
std::chrono::system_clock::time_point timestamp
std::variant< double, int64_t, std::string > value
std::unordered_map< std::string, std::string > tags
std::string data_directory
compression_algorithm compression