master
c 97 lines 4.03 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 #include "api_v1_calls.h"
4
5 #ifndef ENABLE_DBENGINE
6 int web_client_api_request_v1_dbengine_stats(RRDHOST *host __maybe_unused, struct web_client *w __maybe_unused, char *url __maybe_unused) {
7 return HTTP_RESP_NOT_FOUND;
8 }
9 #else
10 static void web_client_api_v1_dbengine_stats_for_tier(BUFFER *wb, size_t tier) {
11 RRDENG_SIZE_STATS stats = rrdeng_size_statistics(multidb_ctx[tier]);
12
13 buffer_sprintf(wb,
14 "\n\t\t\"default_granularity_secs\":%zu"
15 ",\n\t\t\"sizeof_datafile\":%zu"
16 ",\n\t\t\"sizeof_page_in_cache\":%zu"
17 ",\n\t\t\"sizeof_point_data\":%zu"
18 ",\n\t\t\"sizeof_page_data\":%zu"
19 ",\n\t\t\"pages_per_extent\":%zu"
20 ",\n\t\t\"datafiles\":%zu"
21 ",\n\t\t\"extents\":%zu"
22 ",\n\t\t\"extents_pages\":%zu"
23 ",\n\t\t\"points\":%zu"
24 ",\n\t\t\"metrics\":%zu"
25 ",\n\t\t\"metrics_pages\":%zu"
26 ",\n\t\t\"extents_compressed_bytes\":%zu"
27 ",\n\t\t\"pages_uncompressed_bytes\":%zu"
28 ",\n\t\t\"pages_duration_secs\":%lld"
29 ",\n\t\t\"single_point_pages\":%zu"
30 ",\n\t\t\"first_t\":%ld"
31 ",\n\t\t\"last_t\":%ld"
32 ",\n\t\t\"database_retention_secs\":%lld"
33 ",\n\t\t\"average_compression_savings\":%0.2f"
34 ",\n\t\t\"average_point_duration_secs\":%0.2f"
35 ",\n\t\t\"average_metric_retention_secs\":%0.2f"
36 ",\n\t\t\"ephemeral_metrics_per_day_percent\":%0.2f"
37 ",\n\t\t\"average_page_size_bytes\":%0.2f"
38 ",\n\t\t\"estimated_concurrently_collected_metrics\":%zu"
39 ",\n\t\t\"currently_collected_metrics\":%zu"
40 ",\n\t\t\"disk_space\":%zu"
41 ",\n\t\t\"max_disk_space\":%zu"
42 , stats.default_granularity_secs
43 , stats.sizeof_datafile
44 , stats.sizeof_page_in_cache
45 , stats.sizeof_point_data
46 , stats.sizeof_page_data
47 , stats.pages_per_extent
48 , stats.datafiles
49 , stats.extents
50 , stats.extents_pages
51 , stats.points
52 , stats.metrics
53 , stats.metrics_pages
54 , stats.extents_compressed_bytes
55 , stats.pages_uncompressed_bytes
56 , (long long)stats.pages_duration_secs
57 , stats.single_point_pages
58 , stats.first_time_s
59 , stats.last_time_s
60 , (long long)stats.database_retention_secs
61 , stats.average_compression_savings
62 , stats.average_point_duration_secs
63 , stats.average_metric_retention_secs
64 , stats.ephemeral_metrics_per_day_percent
65 , stats.average_page_size_bytes
66 , stats.estimated_concurrently_collected_metrics
67 , stats.currently_collected_metrics
68 , stats.disk_space
69 , stats.max_disk_space
70 );
71 }
72
73 int api_v1_dbengine_stats(RRDHOST *host __maybe_unused, struct web_client *w, char *url __maybe_unused) {
74 if (!netdata_ready_load())
75 return HTTP_RESP_SERVICE_UNAVAILABLE;
76
77 BUFFER *wb = w->response.data;
78 buffer_flush(wb);
79
80 if(!dbengine_enabled) {
81 buffer_strcat(wb, "dbengine is not enabled");
82 return HTTP_RESP_NOT_FOUND;
83 }
84
85 wb->content_type = CT_APPLICATION_JSON;
86 buffer_no_cacheable(wb);
87 buffer_strcat(wb, "{");
88 for(size_t tier = 0; tier < nd_profile.storage_tiers;tier++) {
89 buffer_sprintf(wb, "%s\n\t\"tier%zu\": {", tier?",":"", tier);
90 web_client_api_v1_dbengine_stats_for_tier(wb, tier);
91 buffer_strcat(wb, "\n\t}");
92 }
93 buffer_strcat(wb, "\n}");
94
95 return HTTP_RESP_OK;
96 }
97 #endif