diff options
author | Costa Tsaousis <costa@netdata.cloud> | 2022-07-15 02:21:15 +0300 |
---|---|---|
committer | Costa Tsaousis <costa@netdata.cloud> | 2022-07-15 02:21:15 +0300 |
commit | b00d05a98568d8200d33e8f98c4f4c6fe04b9777 (patch) | |
tree | 7ec53f85163c9aac360fe72adedf69d5afc8c713 | |
parent | fe6d4a329c33234c4ef9ef767ae3442fe64b8661 (diff) |
added option "deepscan" to the API to have the server refresh the retention and recalculate the contexts on the fly
-rw-r--r-- | database/rrdcontext.c | 47 | ||||
-rw-r--r-- | database/rrdcontext.h | 1 | ||||
-rw-r--r-- | web/api/netdata-swagger.json | 6 | ||||
-rw-r--r-- | web/api/netdata-swagger.yaml | 2 | ||||
-rw-r--r-- | web/api/web_api_v1.c | 2 |
5 files changed, 38 insertions, 20 deletions
diff --git a/database/rrdcontext.c b/database/rrdcontext.c index 412e81e437..22631b93cd 100644 --- a/database/rrdcontext.c +++ b/database/rrdcontext.c @@ -269,6 +269,7 @@ static inline void rrdcontext_release(RRDCONTEXT_ACQUIRED *rca) { dictionary_acquired_item_release((DICTIONARY *)rc->rrdhost->rrdctx, (DICTIONARY_ITEM *)rca); } +static void rrdcontext_recalculate_context_retention(RRDCONTEXT *rc, RRD_FLAGS reason, int job_id); static void rrdcontext_recalculate_host_retention(RRDHOST *host, RRD_FLAGS reason, int job_id); #define rrdcontext_version_hash(host) rrdcontext_version_hash_with_callback(host, NULL, false, NULL) @@ -2072,6 +2073,9 @@ int rrdcontext_to_json(RRDHOST *host, BUFFER *wb, RRDCONTEXT_TO_JSON_OPTIONS opt RRDCONTEXT *rc = rrdcontext_acquired_value(rca); + if(options & RRDCONTEXT_OPTION_DEEPSCAN) + rrdcontext_recalculate_context_retention(rc, RRD_FLAG_NONE, -1); + struct rrdcontext_to_json t = { .wb = wb, .options = options|RRDCONTEXT_OPTION_SKIP_ID, @@ -2088,6 +2092,9 @@ int rrdcontexts_to_json(RRDHOST *host, BUFFER *wb, RRDCONTEXT_TO_JSON_OPTIONS op char node_uuid[UUID_STR_LEN]; uuid_unparse(*host->node_id, node_uuid); + if(options & RRDCONTEXT_OPTION_DEEPSCAN) + rrdcontext_recalculate_host_retention(host, RRD_FLAG_NONE, -1); + buffer_sprintf(wb, "{\n" "\t\"hostname\": \"%s\"" ",\n\t\"machine_guid\": \"%s\"" @@ -2295,30 +2302,34 @@ static uint64_t rrdcontext_version_hash_with_callback( return hash; } -static void rrdcontext_recalculate_host_retention(RRDHOST *host, RRD_FLAGS reason, int job_id) { - if(unlikely(!host || !host->rrdctx)) return; +static void rrdcontext_recalculate_context_retention(RRDCONTEXT *rc, RRD_FLAGS reason, int job_id) { + RRDINSTANCE *ri; + dfe_start_read(rc->rrdinstances, ri) { + RRDMETRIC *rm; + dfe_start_read(ri->rrdmetrics, rm) { - RRDCONTEXT *rc; - dfe_start_read((DICTIONARY *)host->rrdctx, rc) { - RRDINSTANCE *ri; - dfe_start_read(rc->rrdinstances, ri) { - RRDMETRIC *rm; - dfe_start_read(ri->rrdmetrics, rm) { + if(job_id >= 0) + worker_is_busy(job_id); + + rrd_flag_set_updated(rm, reason); - if(job_id >= 0) - worker_is_busy(job_id); + rrdmetric_trigger_updates(rm, true, false); + } + dfe_done(rm); - rrd_flag_set_updated(rm, reason); + rrdinstance_trigger_updates(ri, true, false); + } + dfe_done(ri); - rrdmetric_trigger_updates(rm, true, false); - } - dfe_done(rm); + rrdcontext_trigger_updates(rc, true, RRD_FLAG_NONE); +} - rrdinstance_trigger_updates(ri, true, false); - } - dfe_done(ri); +static void rrdcontext_recalculate_host_retention(RRDHOST *host, RRD_FLAGS reason, int job_id) { + if(unlikely(!host || !host->rrdctx)) return; - rrdcontext_trigger_updates(rc, true, RRD_FLAG_NONE); + RRDCONTEXT *rc; + dfe_start_read((DICTIONARY *)host->rrdctx, rc) { + rrdcontext_recalculate_context_retention(rc, reason, job_id); } dfe_done(rc); } diff --git a/database/rrdcontext.h b/database/rrdcontext.h index 590fa20c2e..7e56159523 100644 --- a/database/rrdcontext.h +++ b/database/rrdcontext.h @@ -42,6 +42,7 @@ typedef enum { RRDCONTEXT_OPTION_SHOW_QUEUED = (1 << 3), RRDCONTEXT_OPTION_SHOW_FLAGS = (1 << 4), RRDCONTEXT_OPTION_SHOW_DELETED = (1 << 5), + RRDCONTEXT_OPTION_DEEPSCAN = (1 << 6), RRDCONTEXT_OPTION_SKIP_ID = (1 << 31), // internal use } RRDCONTEXT_TO_JSON_OPTIONS; diff --git a/web/api/netdata-swagger.json b/web/api/netdata-swagger.json index 25d5103985..fecb17473f 100644 --- a/web/api/netdata-swagger.json +++ b/web/api/netdata-swagger.json @@ -105,7 +105,8 @@ "labels", "queue", "flags", - "deleted" + "deleted", + "deepscan" ] }, "default": [ @@ -162,7 +163,8 @@ "labels", "queue", "flags", - "deleted" + "deleted", + "deepscan" ] }, "default": [ diff --git a/web/api/netdata-swagger.yaml b/web/api/netdata-swagger.yaml index 97e24b7383..72e805c1e3 100644 --- a/web/api/netdata-swagger.yaml +++ b/web/api/netdata-swagger.yaml @@ -88,6 +88,7 @@ paths: - queue - flags - deleted + - deepscan default: - full responses: @@ -128,6 +129,7 @@ paths: - queue - flags - deleted + - deepscan default: - full responses: diff --git a/web/api/web_api_v1.c b/web/api/web_api_v1.c index dcd35b4b8a..bc851751f1 100644 --- a/web/api/web_api_v1.c +++ b/web/api/web_api_v1.c @@ -395,6 +395,8 @@ static RRDCONTEXT_TO_JSON_OPTIONS rrdcontext_to_json_parse_options(char *o) { options |= RRDCONTEXT_OPTION_SHOW_DELETED; else if(!strcmp(tok, "labels")) options |= RRDCONTEXT_OPTION_SHOW_LABELS; + else if(!strcmp(tok, "deepscan")) + options |= RRDCONTEXT_OPTION_DEEPSCAN; } return options; |