summaryrefslogtreecommitdiffstats
path: root/web/api/formatters
diff options
context:
space:
mode:
Diffstat (limited to 'web/api/formatters')
-rw-r--r--web/api/formatters/README.md24
-rw-r--r--web/api/formatters/charts2json.c10
-rw-r--r--web/api/formatters/csv/README.md2
-rw-r--r--web/api/formatters/json/README.md2
-rw-r--r--web/api/formatters/json_wrapper.c60
-rw-r--r--web/api/formatters/rrd2json.c4
-rw-r--r--web/api/formatters/rrd2json.h1
-rw-r--r--web/api/formatters/rrdset2json.c6
-rw-r--r--web/api/formatters/ssv/README.md2
-rw-r--r--web/api/formatters/value/README.md6
-rw-r--r--web/api/formatters/value/value.c3
-rw-r--r--web/api/formatters/value/value.h2
12 files changed, 88 insertions, 34 deletions
diff --git a/web/api/formatters/README.md b/web/api/formatters/README.md
index 3e67ac6ee..4c281f064 100644
--- a/web/api/formatters/README.md
+++ b/web/api/formatters/README.md
@@ -12,18 +12,18 @@ The following formats are supported:
| format|module|content type|description|
|:----:|:----:|:----------:|:----------|
-| `array`|[ssv](/web/api/formatters/ssv/README.md)|application/json|a JSON array|
-| `csv`|[csv](/web/api/formatters/csv/README.md)|text/plain|a text table, comma separated, with a header line (dimension names) and `\r\n` at the end of the lines|
-| `csvjsonarray`|[csv](/web/api/formatters/csv/README.md)|application/json|a JSON array, with each row as another array (the first row has the dimension names)|
-| `datasource`|[json](/web/api/formatters/json/README.md)|application/json|a Google Visualization Provider `datasource` javascript callback|
-| `datatable`|[json](/web/api/formatters/json/README.md)|application/json|a Google `datatable`|
-| `html`|[csv](/web/api/formatters/csv/README.md)|text/html|an html table|
-| `json`|[json](/web/api/formatters/json/README.md)|application/json|a JSON object|
-| `jsonp`|[json](/web/api/formatters/json/README.md)|application/json|a JSONP javascript callback|
-| `markdown`|[csv](/web/api/formatters/csv/README.md)|text/plain|a markdown table|
-| `ssv`|[ssv](/web/api/formatters/ssv/README.md)|text/plain|a space separated list of values|
-| `ssvcomma`|[ssv](/web/api/formatters/ssv/README.md)|text/plain|a comma separated list of values|
-| `tsv`|[csv](/web/api/formatters/csv/README.md)|text/plain|a TAB delimited `csv` (MS Excel flavor)|
+| `array`|[ssv](https://github.com/netdata/netdata/blob/master/web/api/formatters/ssv/README.md)|application/json|a JSON array|
+| `csv`|[csv](https://github.com/netdata/netdata/blob/master/web/api/formatters/csv/README.md)|text/plain|a text table, comma separated, with a header line (dimension names) and `\r\n` at the end of the lines|
+| `csvjsonarray`|[csv](https://github.com/netdata/netdata/blob/master/web/api/formatters/csv/README.md)|application/json|a JSON array, with each row as another array (the first row has the dimension names)|
+| `datasource`|[json](https://github.com/netdata/netdata/blob/master/web/api/formatters/json/README.md)|application/json|a Google Visualization Provider `datasource` javascript callback|
+| `datatable`|[json](https://github.com/netdata/netdata/blob/master/web/api/formatters/json/README.md)|application/json|a Google `datatable`|
+| `html`|[csv](https://github.com/netdata/netdata/blob/master/web/api/formatters/csv/README.md)|text/html|an html table|
+| `json`|[json](https://github.com/netdata/netdata/blob/master/web/api/formatters/json/README.md)|application/json|a JSON object|
+| `jsonp`|[json](https://github.com/netdata/netdata/blob/master/web/api/formatters/json/README.md)|application/json|a JSONP javascript callback|
+| `markdown`|[csv](https://github.com/netdata/netdata/blob/master/web/api/formatters/csv/README.md)|text/plain|a markdown table|
+| `ssv`|[ssv](https://github.com/netdata/netdata/blob/master/web/api/formatters/ssv/README.md)|text/plain|a space separated list of values|
+| `ssvcomma`|[ssv](https://github.com/netdata/netdata/blob/master/web/api/formatters/ssv/README.md)|text/plain|a comma separated list of values|
+| `tsv`|[csv](https://github.com/netdata/netdata/blob/master/web/api/formatters/csv/README.md)|text/plain|a TAB delimited `csv` (MS Excel flavor)|
For examples of each format, check the relative module documentation.
diff --git a/web/api/formatters/charts2json.c b/web/api/formatters/charts2json.c
index 1fc20b493..61a9ecf2f 100644
--- a/web/api/formatters/charts2json.c
+++ b/web/api/formatters/charts2json.c
@@ -10,7 +10,7 @@ const char* get_release_channel() {
if (use_stable == -1) {
char filename[FILENAME_MAX + 1];
snprintfz(filename, FILENAME_MAX, "%s/.environment", netdata_configured_user_config_dir);
- procfile *ff = procfile_open(filename, "=", PROCFILE_FLAG_DEFAULT);
+ procfile *ff = procfile_open(filename, "=", PROCFILE_FLAG_ERROR_ON_ERROR_LOG);
if (ff) {
procfile_set_quotes(ff, "'\"");
ff = procfile_readall(ff);
@@ -78,7 +78,7 @@ void charts2json(RRDHOST *host, BUFFER *wb, int skip_volatile, int show_archived
rrdset2json(st, wb, &dimensions, &memory, skip_volatile);
c++;
- st->last_accessed_time = now;
+ st->last_accessed_time_s = now;
}
}
rrdset_foreach_done(st);
@@ -102,10 +102,10 @@ void charts2json(RRDHOST *host, BUFFER *wb, int skip_volatile, int show_archived
, dimensions
, alarms
, memory
- , rrd_hosts_available
+ , rrdhost_hosts_available()
);
- if(unlikely(rrd_hosts_available > 1)) {
+ if(unlikely(rrdhost_hosts_available() > 1)) {
rrd_rdlock();
size_t found = 0;
@@ -178,7 +178,7 @@ void chartcollectors2json(RRDHOST *host, BUFFER *wb) {
};
sprintf(name, "%s:%s", col.plugin, col.module);
dictionary_set(dict, name, &col, sizeof(struct collector));
- st->last_accessed_time = now;
+ st->last_accessed_time_s = now;
}
}
rrdset_foreach_done(st);
diff --git a/web/api/formatters/csv/README.md b/web/api/formatters/csv/README.md
index df7c11efa..fc5ffec1b 100644
--- a/web/api/formatters/csv/README.md
+++ b/web/api/formatters/csv/README.md
@@ -5,7 +5,7 @@ custom_edit_url: https://github.com/netdata/netdata/edit/master/web/api/formatte
# CSV formatter
-The CSV formatter presents [results of database queries](/web/api/queries/README.md) in the following formats:
+The CSV formatter presents [results of database queries](https://github.com/netdata/netdata/blob/master/web/api/queries/README.md) in the following formats:
| format|content type|description|
| :----:|:----------:|:----------|
diff --git a/web/api/formatters/json/README.md b/web/api/formatters/json/README.md
index a0f8108e7..75f729ada 100644
--- a/web/api/formatters/json/README.md
+++ b/web/api/formatters/json/README.md
@@ -5,7 +5,7 @@ custom_edit_url: https://github.com/netdata/netdata/edit/master/web/api/formatte
# JSON formatter
-The CSV formatter presents [results of database queries](/web/api/queries/README.md) in the following formats:
+The CSV formatter presents [results of database queries](https://github.com/netdata/netdata/blob/master/web/api/queries/README.md) in the following formats:
| format | content type | description|
|:----:|:----------:|:----------|
diff --git a/web/api/formatters/json_wrapper.c b/web/api/formatters/json_wrapper.c
index 8b9b7522c..beb74912e 100644
--- a/web/api/formatters/json_wrapper.c
+++ b/web/api/formatters/json_wrapper.c
@@ -32,6 +32,53 @@ static int fill_formatted_callback(const char *name, const char *value, RRDLABEL
return 1;
}
+void rrdr_show_plan(RRDR *r, BUFFER *wb, const char *kq, const char *sq __maybe_unused) {
+ QUERY_TARGET *qt = r->internal.qt;
+
+ buffer_sprintf(wb, "\n\t%squery_plan%s: {", kq, kq);
+
+ for(size_t m = 0; m < qt->query.used; m++) {
+ QUERY_METRIC *qm = &qt->query.array[m];
+
+ if(m)
+ buffer_strcat(wb, ",");
+
+ buffer_sprintf(wb, "\n\t\t%s%s%s: {", kq, string2str(qm->dimension.id), kq);
+
+ buffer_sprintf(wb, "\n\t\t\t%splans%s: [", kq, kq);
+ for(size_t p = 0; p < qm->plan.used ;p++) {
+ QUERY_PLAN_ENTRY *qp = &qm->plan.array[p];
+ if(p)
+ buffer_strcat(wb, ",");
+
+ buffer_strcat(wb, "\n\t\t\t\t{");
+ buffer_sprintf(wb, "\n\t\t\t\t\t%stier%s: %zu,", kq, kq, qp->tier);
+ buffer_sprintf(wb, "\n\t\t\t\t\t%safter%s: %ld,", kq, kq, qp->after);
+ buffer_sprintf(wb, "\n\t\t\t\t\t%sbefore%s: %ld", kq, kq, qp->before);
+ buffer_strcat(wb, "\n\t\t\t\t}");
+ }
+ buffer_strcat(wb, "\n\t\t\t],");
+
+ buffer_sprintf(wb, "\n\t\t\t%stiers%s: [", kq, kq);
+ for(size_t tier = 0; tier < storage_tiers ;tier++) {
+ if(tier)
+ buffer_strcat(wb, ",");
+
+ buffer_strcat(wb, "\n\t\t\t\t{");
+ buffer_sprintf(wb, "\n\t\t\t\t\t%stier%s: %zu,", kq, kq, tier);
+ buffer_sprintf(wb, "\n\t\t\t\t\t%sdb_first_time%s: %ld,", kq, kq, qm->tiers[tier].db_first_time_s);
+ buffer_sprintf(wb, "\n\t\t\t\t\t%sdb_last_time%s: %ld,", kq, kq, qm->tiers[tier].db_last_time_s);
+ buffer_sprintf(wb, "\n\t\t\t\t\t%sweight%s: %ld", kq, kq, qm->tiers[tier].weight);
+ buffer_strcat(wb, "\n\t\t\t\t}");
+ }
+ buffer_strcat(wb, "\n\t\t\t]");
+
+ buffer_strcat(wb, "\n\t\t}");
+ }
+
+ buffer_strcat(wb, "\n\t},");
+}
+
void rrdr_json_wrapper_begin(RRDR *r, BUFFER *wb, uint32_t format, RRDR_OPTIONS options, int string_value,
RRDR_GROUPING group_method)
{
@@ -70,9 +117,9 @@ void rrdr_json_wrapper_begin(RRDR *r, BUFFER *wb, uint32_t format, RRDR_OPTIONS
, kq, kq, sq, qt->id, sq
, kq, kq, sq, qt->id, sq
, kq, kq, (long long)r->update_every
- , kq, kq, (long long)qt->db.minimum_latest_update_every
- , kq, kq, (long long)qt->db.first_time_t
- , kq, kq, (long long)qt->db.last_time_t
+ , kq, kq, (long long)qt->db.minimum_latest_update_every_s
+ , kq, kq, (long long)qt->db.first_time_s
+ , kq, kq, (long long)qt->db.last_time_s
, kq, kq, (long long)r->before
, kq, kq, (long long)r->after
, kq, kq, sq, web_client_api_request_v1_data_group_to_string(group_method), sq
@@ -369,9 +416,12 @@ void rrdr_json_wrapper_begin(RRDR *r, BUFFER *wb, uint32_t format, RRDR_OPTIONS
for(size_t tier = 0; tier < storage_tiers ; tier++)
buffer_sprintf(wb, "%s%zu", tier>0?", ":"", r->internal.tier_points_read[tier]);
- buffer_strcat(wb, " ]");
+ buffer_strcat(wb, " ],");
+
+ if(options & RRDR_OPTION_SHOW_PLAN)
+ rrdr_show_plan(r, wb, kq, sq);
- buffer_sprintf(wb, ",\n %sresult%s: ", kq, kq);
+ buffer_sprintf(wb, "\n %sresult%s: ", kq, kq);
if(string_value) buffer_strcat(wb, sq);
//info("JSONWRAPPER(): %s: END", r->st->id);
diff --git a/web/api/formatters/rrd2json.c b/web/api/formatters/rrd2json.c
index 8bf547192..64cde5b2b 100644
--- a/web/api/formatters/rrd2json.c
+++ b/web/api/formatters/rrd2json.c
@@ -77,6 +77,7 @@ int rrdset2value_api_v1(
, time_t timeout
, size_t tier
, QUERY_SOURCE query_source
+ , STORAGE_PRIORITY priority
) {
int ret = HTTP_RESP_INTERNAL_SERVER_ERROR;
@@ -94,7 +95,8 @@ int rrdset2value_api_v1(
group_options,
timeout,
tier,
- query_source);
+ query_source,
+ priority);
if(!r) {
if(value_is_null) *value_is_null = 1;
diff --git a/web/api/formatters/rrd2json.h b/web/api/formatters/rrd2json.h
index 048281d7e..88b9f773f 100644
--- a/web/api/formatters/rrd2json.h
+++ b/web/api/formatters/rrd2json.h
@@ -79,6 +79,7 @@ int rrdset2value_api_v1(
, time_t timeout
, size_t tier
, QUERY_SOURCE query_source
+ , STORAGE_PRIORITY priority
);
#endif /* NETDATA_RRD2JSON_H */
diff --git a/web/api/formatters/rrdset2json.c b/web/api/formatters/rrdset2json.c
index 1e8106335..449d4ddf5 100644
--- a/web/api/formatters/rrdset2json.c
+++ b/web/api/formatters/rrdset2json.c
@@ -25,8 +25,8 @@ void chart_labels2json(RRDSET *st, BUFFER *wb, size_t indentation)
// generate JSON for the /api/v1/chart API call
void rrdset2json(RRDSET *st, BUFFER *wb, size_t *dimensions_count, size_t *memory_used, int skip_volatile) {
- time_t first_entry_t = rrdset_first_entry_t(st);
- time_t last_entry_t = rrdset_last_entry_t(st);
+ time_t first_entry_t = rrdset_first_entry_s(st);
+ time_t last_entry_t = rrdset_last_entry_s(st);
buffer_sprintf(
wb,
@@ -83,7 +83,7 @@ void rrdset2json(RRDSET *st, BUFFER *wb, size_t *dimensions_count, size_t *memor
"\t\t\t\"dimensions\": {\n",
st->update_every);
- unsigned long memory = sizeof(RRDSET) + st->memsize;
+ unsigned long memory = sizeof(RRDSET);
size_t dimensions = 0;
RRDDIM *rd;
diff --git a/web/api/formatters/ssv/README.md b/web/api/formatters/ssv/README.md
index d9e193d66..4ca2a64ca 100644
--- a/web/api/formatters/ssv/README.md
+++ b/web/api/formatters/ssv/README.md
@@ -5,7 +5,7 @@ custom_edit_url: https://github.com/netdata/netdata/edit/master/web/api/formatte
# SSV formatter
-The SSV formatter sums all dimensions in [results of database queries](/web/api/queries/README.md)
+The SSV formatter sums all dimensions in [results of database queries](https://github.com/netdata/netdata/blob/master/web/api/queries/README.md)
to a single value and returns a list of such values showing how it changes through time.
It supports the following formats:
diff --git a/web/api/formatters/value/README.md b/web/api/formatters/value/README.md
index a51e32de7..5b75ded7c 100644
--- a/web/api/formatters/value/README.md
+++ b/web/api/formatters/value/README.md
@@ -5,7 +5,7 @@ custom_edit_url: https://github.com/netdata/netdata/edit/master/web/api/formatte
# Value formatter
-The Value formatter presents [results of database queries](/web/api/queries/README.md) as a single value.
+The Value formatter presents [results of database queries](https://github.com/netdata/netdata/blob/master/web/api/queries/README.md) as a single value.
To calculate the single value to be returned, it sums the values of all dimensions.
@@ -18,7 +18,7 @@ The Value formatter respects the following API `&options=`:
| `min2max` | yes | to return the delta from the minimum value to the maximum value (across dimensions)|
The Value formatter is not exposed by the API by itself.
-Instead it is used by the [`ssv`](/web/api/formatters/ssv/README.md) formatter
-and [health monitoring queries](/health/README.md).
+Instead it is used by the [`ssv`](https://github.com/netdata/netdata/blob/master/web/api/formatters/ssv/README.md) formatter
+and [health monitoring queries](https://github.com/netdata/netdata/blob/master/health/README.md).
diff --git a/web/api/formatters/value/value.c b/web/api/formatters/value/value.c
index 46a71303e..915d58ac9 100644
--- a/web/api/formatters/value/value.c
+++ b/web/api/formatters/value/value.c
@@ -106,7 +106,7 @@ QUERY_VALUE rrdmetric2value(RRDHOST *host,
struct rrdcontext_acquired *rca, struct rrdinstance_acquired *ria, struct rrdmetric_acquired *rma,
time_t after, time_t before,
RRDR_OPTIONS options, RRDR_GROUPING group_method, const char *group_options,
- size_t tier, time_t timeout, QUERY_SOURCE query_source
+ size_t tier, time_t timeout, QUERY_SOURCE query_source, STORAGE_PRIORITY priority
) {
QUERY_TARGET_REQUEST qtr = {
.host = host,
@@ -122,6 +122,7 @@ QUERY_VALUE rrdmetric2value(RRDHOST *host,
.tier = tier,
.timeout = timeout,
.query_source = query_source,
+ .priority = priority,
};
ONEWAYALLOC *owa = onewayalloc_create(16 * 1024);
diff --git a/web/api/formatters/value/value.h b/web/api/formatters/value/value.h
index 76b1869f3..3f7f51ccb 100644
--- a/web/api/formatters/value/value.h
+++ b/web/api/formatters/value/value.h
@@ -23,7 +23,7 @@ QUERY_VALUE rrdmetric2value(RRDHOST *host,
struct rrdcontext_acquired *rca, struct rrdinstance_acquired *ria, struct rrdmetric_acquired *rma,
time_t after, time_t before,
RRDR_OPTIONS options, RRDR_GROUPING group_method, const char *group_options,
- size_t tier, time_t timeout, QUERY_SOURCE query_source
+ size_t tier, time_t timeout, QUERY_SOURCE query_source, STORAGE_PRIORITY priority
);
NETDATA_DOUBLE rrdr2value(RRDR *r, long i, RRDR_OPTIONS options, int *all_values_are_null, NETDATA_DOUBLE *anomaly_rate);