summaryrefslogtreecommitdiffstats
path: root/exporting/prometheus/remote_write/remote_write.c
diff options
context:
space:
mode:
Diffstat (limited to 'exporting/prometheus/remote_write/remote_write.c')
-rw-r--r--exporting/prometheus/remote_write/remote_write.c47
1 files changed, 27 insertions, 20 deletions
diff --git a/exporting/prometheus/remote_write/remote_write.c b/exporting/prometheus/remote_write/remote_write.c
index 03feb2c08..2e2fa3c12 100644
--- a/exporting/prometheus/remote_write/remote_write.c
+++ b/exporting/prometheus/remote_write/remote_write.c
@@ -171,19 +171,19 @@ int format_host_prometheus_remote_write(struct instance *instance, RRDHOST *host
char hostname[PROMETHEUS_ELEMENT_MAX + 1];
prometheus_label_copy(
hostname,
- (host == localhost) ? instance->config.hostname : host->hostname,
+ (host == localhost) ? instance->config.hostname : rrdhost_hostname(host),
PROMETHEUS_ELEMENT_MAX);
add_host_info(
connector_specific_data->write_request,
- "netdata_info", hostname, host->program_name, host->program_version, now_realtime_usec() / USEC_PER_MS);
+ "netdata_info", hostname, rrdhost_program_name(host), rrdhost_program_version(host), now_realtime_usec() / USEC_PER_MS);
if (unlikely(sending_labels_configured(instance))) {
struct format_remote_write_label_callback tmp = {
.write_request = connector_specific_data->write_request,
.instance = instance
};
- rrdlabels_walkthrough_read(host->host_labels, format_remote_write_label_callback, &tmp);
+ rrdlabels_walkthrough_read(host->rrdlabels, format_remote_write_label_callback, &tmp);
}
return 0;
@@ -200,10 +200,10 @@ int format_chart_prometheus_remote_write(struct instance *instance, RRDSET *st)
{
prometheus_label_copy(
chart,
- (instance->config.options & EXPORTING_OPTION_SEND_NAMES && st->name) ? st->name : st->id,
+ (instance->config.options & EXPORTING_OPTION_SEND_NAMES && st->name) ? rrdset_name(st) : rrdset_id(st),
PROMETHEUS_ELEMENT_MAX);
- prometheus_label_copy(family, st->family, PROMETHEUS_ELEMENT_MAX);
- prometheus_name_copy(context, st->context, PROMETHEUS_ELEMENT_MAX);
+ prometheus_label_copy(family, rrdset_family(st), PROMETHEUS_ELEMENT_MAX);
+ prometheus_name_copy(context, rrdset_context(st), PROMETHEUS_ELEMENT_MAX);
as_collected = (EXPORTING_OPTIONS_DATA_SOURCE(instance->config.options) == EXPORTING_SOURCE_DATA_AS_COLLECTED);
homogeneous = 1;
@@ -215,7 +215,7 @@ int format_chart_prometheus_remote_write(struct instance *instance, RRDSET *st)
homogeneous = 0;
} else {
if (EXPORTING_OPTIONS_DATA_SOURCE(instance->config.options) == EXPORTING_SOURCE_DATA_AVERAGE)
- prometheus_units_copy(units, st->units, PROMETHEUS_ELEMENT_MAX, 0);
+ prometheus_units_copy(units, rrdset_units(st), PROMETHEUS_ELEMENT_MAX, 0);
}
return 0;
@@ -249,28 +249,33 @@ int format_dimension_prometheus_remote_write(struct instance *instance, RRDDIM *
D_EXPORTING,
"EXPORTING: not sending dimension '%s' of chart '%s' from host '%s', "
"its last data collection (%lu) is not within our timeframe (%lu to %lu)",
- rd->id, rd->rrdset->id,
- (host == localhost) ? instance->config.hostname : host->hostname,
+ rrddim_id(rd), rrdset_id(rd->rrdset),
+ (host == localhost) ? instance->config.hostname : rrdhost_hostname(host),
(unsigned long)rd->last_collected_time.tv_sec,
(unsigned long)instance->after,
(unsigned long)instance->before);
return 0;
}
+ if (rd->algorithm == RRD_ALGORITHM_INCREMENTAL || rd->algorithm == RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL) {
+ if (strcmp(rrdset_module_name(rd->rrdset), "prometheus"))
+ suffix = "_total";
+ }
+
if (homogeneous) {
// all the dimensions of the chart, has the same algorithm, multiplier and divisor
// we add all dimensions as labels
prometheus_label_copy(
dimension,
- (instance->config.options & EXPORTING_OPTION_SEND_NAMES && rd->name) ? rd->name : rd->id,
+ (instance->config.options & EXPORTING_OPTION_SEND_NAMES && rd->name) ? rrddim_name(rd) : rrddim_id(rd),
PROMETHEUS_ELEMENT_MAX);
snprintf(name, PROMETHEUS_LABELS_MAX, "%s_%s%s", instance->config.prefix, context, suffix);
add_metric(
connector_specific_data->write_request,
name, chart, family, dimension,
- (host == localhost) ? instance->config.hostname : host->hostname,
+ (host == localhost) ? instance->config.hostname : rrdhost_hostname(host),
rd->last_collected_value, timeval_msec(&rd->last_collected_time));
} else {
// the dimensions of the chart, do not have the same algorithm, multiplier or divisor
@@ -278,7 +283,7 @@ int format_dimension_prometheus_remote_write(struct instance *instance, RRDDIM *
prometheus_name_copy(
dimension,
- (instance->config.options & EXPORTING_OPTION_SEND_NAMES && rd->name) ? rd->name : rd->id,
+ (instance->config.options & EXPORTING_OPTION_SEND_NAMES && rd->name) ? rrddim_name(rd) : rrddim_id(rd),
PROMETHEUS_ELEMENT_MAX);
snprintf(
name, PROMETHEUS_LABELS_MAX, "%s_%s_%s%s", instance->config.prefix, context, dimension,
@@ -287,7 +292,7 @@ int format_dimension_prometheus_remote_write(struct instance *instance, RRDDIM *
add_metric(
connector_specific_data->write_request,
name, chart, family, NULL,
- (host == localhost) ? instance->config.hostname : host->hostname,
+ (host == localhost) ? instance->config.hostname : rrdhost_hostname(host),
rd->last_collected_value, timeval_msec(&rd->last_collected_time));
}
} else {
@@ -304,7 +309,7 @@ int format_dimension_prometheus_remote_write(struct instance *instance, RRDDIM *
prometheus_label_copy(
dimension,
- (instance->config.options & EXPORTING_OPTION_SEND_NAMES && rd->name) ? rd->name : rd->id,
+ (instance->config.options & EXPORTING_OPTION_SEND_NAMES && rd->name) ? rrddim_name(rd) : rrddim_id(rd),
PROMETHEUS_ELEMENT_MAX);
snprintf(
name, PROMETHEUS_LABELS_MAX, "%s_%s%s%s", instance->config.prefix, context, units, suffix);
@@ -312,7 +317,7 @@ int format_dimension_prometheus_remote_write(struct instance *instance, RRDDIM *
add_metric(
connector_specific_data->write_request,
name, chart, family, dimension,
- (host == localhost) ? instance->config.hostname : host->hostname,
+ (host == localhost) ? instance->config.hostname : rrdhost_hostname(host),
value, last_t * MSEC_PER_SEC);
}
}
@@ -321,10 +326,12 @@ int format_dimension_prometheus_remote_write(struct instance *instance, RRDDIM *
return 0;
}
-int format_variable_prometheus_remote_write_callback(RRDVAR *rv, void *data) {
+static int format_variable_prometheus_remote_write_callback(const DICTIONARY_ITEM *item __maybe_unused, void *rv_ptr __maybe_unused, void *data) {
+ const RRDVAR_ACQUIRED *rv = (const RRDVAR_ACQUIRED *)item;
+
struct prometheus_remote_write_variables_callback_options *opts = data;
- if (rv->options & (RRDVAR_OPTION_CUSTOM_HOST_VAR | RRDVAR_OPTION_CUSTOM_CHART_VAR)) {
+ if (rrdvar_flags(rv) & (RRDVAR_FLAG_CUSTOM_HOST_VAR | RRDVAR_FLAG_CUSTOM_CHART_VAR)) {
RRDHOST *host = opts->host;
struct instance *instance = opts->instance;
struct simple_connector_data *simple_connector_data =
@@ -335,12 +342,12 @@ int format_variable_prometheus_remote_write_callback(RRDVAR *rv, void *data) {
char name[PROMETHEUS_LABELS_MAX + 1];
char *suffix = "";
- prometheus_name_copy(context, rv->name, PROMETHEUS_ELEMENT_MAX);
+ prometheus_name_copy(context, rrdvar_name(rv), PROMETHEUS_ELEMENT_MAX);
snprintf(name, PROMETHEUS_LABELS_MAX, "%s_%s%s", instance->config.prefix, context, suffix);
NETDATA_DOUBLE value = rrdvar2number(rv);
add_variable(connector_specific_data->write_request, name,
- (host == localhost) ? instance->config.hostname : host->hostname, value, opts->now / USEC_PER_MS);
+ (host == localhost) ? instance->config.hostname : rrdhost_hostname(host), value, opts->now / USEC_PER_MS);
}
return 0;
@@ -361,7 +368,7 @@ int format_variables_prometheus_remote_write(struct instance *instance, RRDHOST
.now = now_realtime_usec(),
};
- return foreach_host_variable_callback(host, format_variable_prometheus_remote_write_callback, &opt);
+ return rrdvar_walkthrough_read(host->rrdvars, format_variable_prometheus_remote_write_callback, &opt);
}
/**