// SPDX-License-Identifier: GPL-3.0-or-later #define BACKENDS_INTERNALS #include "json.h" // ---------------------------------------------------------------------------- // json backend int backends_format_dimension_collected_json_plaintext( BUFFER *b // the buffer to write data to , const char *prefix // the prefix to use , RRDHOST *host // the host this chart comes from , const char *hostname // the hostname (to override host->hostname) , RRDSET *st // the chart , RRDDIM *rd // the dimension , time_t after // the start timestamp , time_t before // the end timestamp , BACKEND_OPTIONS backend_options // BACKEND_SOURCE_* bitmap ) { (void)host; (void)after; (void)before; (void)backend_options; const char *tags_pre = "", *tags_post = "", *tags = host->tags; if(!tags) tags = ""; if(*tags) { if(*tags == '{' || *tags == '[' || *tags == '"') { tags_pre = "\"host_tags\":"; tags_post = ","; } else { tags_pre = "\"host_tags\":\""; tags_post = "\","; } } buffer_sprintf(b, "{" "\"prefix\":\"%s\"," "\"hostname\":\"%s\"," "%s%s%s" "\"chart_id\":\"%s\"," "\"chart_name\":\"%s\"," "\"chart_family\":\"%s\"," "\"chart_context\": \"%s\"," "\"chart_type\":\"%s\"," "\"units\": \"%s\"," "\"id\":\"%s\"," "\"name\":\"%s\"," "\"value\":" COLLECTED_NUMBER_FORMAT "," "\"timestamp\": %llu}\n", prefix, hostname, tags_pre, tags, tags_post, st->id, st->name, st->family, st->context, st->type, st->units, rd->id, rd->name, rd->last_collected_value, (unsigned long long) rd->last_collected_time.tv_sec ); return 1; } int backends_format_dimension_stored_json_plaintext( BUFFER *b // the buffer to write data to , const char *prefix // the prefix to use , RRDHOST *host // the host this chart comes from , const char *hostname // the hostname (to override host->hostname) , RRDSET *st // the chart , RRDDIM *rd // the dimension , time_t after // the start timestamp , time_t before // the end timestamp , BACKEND_OPTIONS backend_options // BACKEND_SOURCE_* bitmap ) { (void)host; time_t first_t = after, last_t = before; calculated_number value = backend_calculate_value_from_stored_data(st, rd, after, before, backend_options, &first_t, &last_t); if(!isnan(value)) { const char *tags_pre = "", *tags_post = "", *tags = host->tags; if(!tags) tags = ""; if(*tags) { if(*tags == '{' || *tags == '[' || *tags == '"') { tags_pre = "\"host_tags\":"; tags_post = ","; } else { tags_pre = "\"host_tags\":\""; tags_post = "\","; } } buffer_sprintf(b, "{" "\"prefix\":\"%s\"," "\"hostname\":\"%s\"," "%s%s%s" "\"chart_id\":\"%s\"," "\"chart_name\":\"%s\"," "\"chart_family\":\"%s\"," "\"chart_context\": \"%s\"," "\"chart_type\":\"%s\"," "\"units\": \"%s\"," "\"id\":\"%s\"," "\"name\":\"%s\"," "\"value\":" CALCULATED_NUMBER_FORMAT "," "\"timestamp\": %llu}\n", prefix, hostname, tags_pre, tags, tags_post, st->id, st->name, st->family, st->context, st->type, st->units, rd->id, rd->name, value, (unsigned long long) last_t ); return 1; } return 0; } int process_json_response(BUFFER *b) { return discard_response(b, "json"); }