diff options
Diffstat (limited to '')
-rw-r--r-- | src/database/rrdhost.c (renamed from database/rrdhost.c) | 402 |
1 files changed, 137 insertions, 265 deletions
diff --git a/database/rrdhost.c b/src/database/rrdhost.c index a3c272153..9c818618f 100644 --- a/database/rrdhost.c +++ b/src/database/rrdhost.c @@ -33,9 +33,9 @@ time_t rrdset_free_obsolete_time_s = 3600; time_t rrdhost_free_orphan_time_s = 3600; time_t rrdhost_free_ephemeral_time_s = 86400; -bool is_storage_engine_shared(STORAGE_INSTANCE *engine __maybe_unused) { +bool is_storage_engine_shared(STORAGE_INSTANCE *si __maybe_unused) { #ifdef ENABLE_DBENGINE - if(!rrdeng_is_legacy(engine)) + if(!rrdeng_is_legacy(si)) return true; #endif @@ -178,15 +178,6 @@ static inline RRDHOST *rrdhost_index_add_hostname(RRDHOST *host) { // ---------------------------------------------------------------------------- // RRDHOST - internal helpers -static inline void rrdhost_init_tags(RRDHOST *host, const char *tags) { - if(host->tags && tags && !strcmp(rrdhost_tags(host), tags)) - return; - - STRING *old = host->tags; - host->tags = string_strdupz((tags && *tags)?tags:NULL); - string_freez(old); -} - static inline void rrdhost_init_hostname(RRDHOST *host, const char *hostname, bool add_to_index) { if(unlikely(hostname && !*hostname)) hostname = NULL; @@ -229,9 +220,9 @@ static inline void rrdhost_init_timezone(RRDHOST *host, const char *timezone, co } void set_host_properties(RRDHOST *host, int update_every, RRD_MEMORY_MODE memory_mode, - const char *registry_hostname, const char *os, const char *tags, - const char *tzone, const char *abbrev_tzone, int32_t utc_offset, const char *program_name, - const char *program_version) + const char *registry_hostname, const char *os, const char *tzone, + const char *abbrev_tzone, int32_t utc_offset, const char *prog_name, + const char *prog_version) { host->rrd_update_every = update_every; @@ -239,10 +230,9 @@ void set_host_properties(RRDHOST *host, int update_every, RRD_MEMORY_MODE memory rrdhost_init_os(host, os); rrdhost_init_timezone(host, tzone, abbrev_tzone, utc_offset); - rrdhost_init_tags(host, tags); - host->program_name = string_strdupz((program_name && *program_name) ? program_name : "unknown"); - host->program_version = string_strdupz((program_version && *program_version) ? program_version : "unknown"); + host->program_name = string_strdupz((prog_name && *prog_name) ? prog_name : "unknown"); + host->program_version = string_strdupz((prog_version && *prog_version) ? prog_version : "unknown"); host->registry_hostname = string_strdupz((registry_hostname && *registry_hostname) ? registry_hostname : rrdhost_hostname(host)); } @@ -287,9 +277,8 @@ static RRDHOST *rrdhost_create( const char *timezone, const char *abbrev_timezone, int32_t utc_offset, - const char *tags, - const char *program_name, - const char *program_version, + const char *prog_name, + const char *prog_version, int update_every, long entries, RRD_MEMORY_MODE memory_mode, @@ -326,7 +315,9 @@ int is_legacy = 1; strncpyz(host->machine_guid, guid, GUID_LEN + 1); set_host_properties(host, (update_every > 0)?update_every:1, memory_mode, registry_hostname, os, - tags, timezone, abbrev_timezone, utc_offset, program_name, program_version); + timezone, abbrev_timezone, utc_offset, + prog_name, + prog_version); rrdhost_init_hostname(host, hostname, false); @@ -337,7 +328,7 @@ int is_legacy = 1; netdata_mutex_init(&host->receiver_lock); if (likely(!archived)) { - rrdfunctions_host_init(host); + rrd_functions_host_init(host); host->last_connected = now_realtime_sec(); host->rrdlabels = rrdlabels_create(); rrdhost_initialize_rrdpush_sender( @@ -356,8 +347,6 @@ int is_legacy = 1; switch(memory_mode) { default: case RRD_MEMORY_MODE_ALLOC: - case RRD_MEMORY_MODE_MAP: - case RRD_MEMORY_MODE_SAVE: case RRD_MEMORY_MODE_RAM: if(host->rrdpush_seconds_to_replicate > (time_t) host->rrd_history_entries * (time_t) host->rrd_update_every) host->rrdpush_seconds_to_replicate = (time_t) host->rrd_history_entries * (time_t) host->rrd_update_every; @@ -371,12 +360,6 @@ int is_legacy = 1; rrdset_index_init(host); - if(config_get_boolean(CONFIG_SECTION_DB, "delete obsolete charts files", 1)) - rrdhost_option_set(host, RRDHOST_OPTION_DELETE_OBSOLETE_CHARTS); - - if(config_get_boolean(CONFIG_SECTION_DB, "delete orphan hosts files", 1) && !is_localhost) - rrdhost_option_set(host, RRDHOST_OPTION_DELETE_ORPHAN_HOST); - char filename[FILENAME_MAX + 1]; if(is_localhost) host->cache_dir = strdupz(netdata_configured_cache_dir); @@ -390,8 +373,8 @@ int is_legacy = 1; host->cache_dir = strdupz(filename); } - if((host->rrd_memory_mode == RRD_MEMORY_MODE_MAP || host->rrd_memory_mode == RRD_MEMORY_MODE_SAVE || - (host->rrd_memory_mode == RRD_MEMORY_MODE_DBENGINE && is_legacy))) { + if(host->rrd_memory_mode == RRD_MEMORY_MODE_DBENGINE && is_legacy) + { int r = mkdir(host->cache_dir, 0775); if(r != 0 && errno != EEXIST) nd_log(NDLS_DAEMON, NDLP_CRIT, @@ -409,8 +392,6 @@ int is_legacy = 1; else error_report("Host machine GUID %s is not valid", host->machine_guid); - rrdfamily_index_init(host); - rrdcalctemplate_index_init(host); rrdcalc_rrdhost_index_init(host); if (host->rrd_memory_mode == RRD_MEMORY_MODE_DBENGINE) { @@ -436,13 +417,13 @@ int is_legacy = 1; host->db[0].tier_grouping = get_tier_grouping(0); ret = rrdeng_init( - (struct rrdengine_instance **)&host->db[0].instance, + (struct rrdengine_instance **)&host->db[0].si, dbenginepath, default_rrdeng_disk_quota_mb, 0); // may fail here for legacy dbengine initialization if(ret == 0) { - rrdeng_readiness_wait((struct rrdengine_instance *)host->db[0].instance); + rrdeng_readiness_wait((struct rrdengine_instance *)host->db[0].si); // assign the rest of the shared storage instances to it // to allow them collect its metrics too @@ -450,7 +431,7 @@ int is_legacy = 1; for(size_t tier = 1; tier < storage_tiers ; tier++) { host->db[tier].mode = RRD_MEMORY_MODE_DBENGINE; host->db[tier].eng = storage_engine_get(host->db[tier].mode); - host->db[tier].instance = (STORAGE_INSTANCE *) multidb_ctx[tier]; + host->db[tier].si = (STORAGE_INSTANCE *) multidb_ctx[tier]; host->db[tier].tier_grouping = get_tier_grouping(tier); } } @@ -459,7 +440,7 @@ int is_legacy = 1; for(size_t tier = 0; tier < storage_tiers ; tier++) { host->db[tier].mode = RRD_MEMORY_MODE_DBENGINE; host->db[tier].eng = storage_engine_get(host->db[tier].mode); - host->db[tier].instance = (STORAGE_INSTANCE *)multidb_ctx[tier]; + host->db[tier].si = (STORAGE_INSTANCE *)multidb_ctx[tier]; host->db[tier].tier_grouping = get_tier_grouping(tier); } } @@ -483,7 +464,7 @@ int is_legacy = 1; else { host->db[0].mode = host->rrd_memory_mode; host->db[0].eng = storage_engine_get(host->db[0].mode); - host->db[0].instance = NULL; + host->db[0].si = NULL; host->db[0].tier_grouping = get_tier_grouping(0); #ifdef ENABLE_DBENGINE @@ -491,7 +472,7 @@ int is_legacy = 1; for(size_t tier = 1; tier < storage_tiers ; tier++) { host->db[tier].mode = RRD_MEMORY_MODE_DBENGINE; host->db[tier].eng = storage_engine_get(host->db[tier].mode); - host->db[tier].instance = (STORAGE_INSTANCE *) multidb_ctx[tier]; + host->db[tier].si = (STORAGE_INSTANCE *) multidb_ctx[tier]; host->db[tier].tier_grouping = get_tier_grouping(tier); } #endif @@ -541,7 +522,6 @@ int is_legacy = 1; "Host '%s' (at registry as '%s') with guid '%s' initialized" ", os '%s'" ", timezone '%s'" - ", tags '%s'" ", program_name '%s'" ", program_version '%s'" ", update every %d" @@ -558,7 +538,6 @@ int is_legacy = 1; , host->machine_guid , rrdhost_os(host) , rrdhost_timezone(host) - , rrdhost_tags(host) , rrdhost_program_name(host) , rrdhost_program_version(host) , host->rrd_update_every @@ -573,9 +552,6 @@ int is_legacy = 1; , string2str(host->health.health_default_recipient) ); - host->configurable_plugins = dyncfg_dictionary_create(); - dictionary_register_delete_callback(host->configurable_plugins, plugin_del_cb, NULL); - if(!archived) { metaqueue_host_update_info(host); rrdhost_load_rrdcontext_data(host); @@ -588,28 +564,27 @@ int is_legacy = 1; } static void rrdhost_update(RRDHOST *host - , const char *hostname - , const char *registry_hostname - , const char *guid - , const char *os - , const char *timezone - , const char *abbrev_timezone - , int32_t utc_offset - , const char *tags - , const char *program_name - , const char *program_version - , int update_every - , long history - , RRD_MEMORY_MODE mode - , unsigned int health_enabled - , unsigned int rrdpush_enabled - , char *rrdpush_destination - , char *rrdpush_api_key - , char *rrdpush_send_charts_matching - , bool rrdpush_enable_replication - , time_t rrdpush_seconds_to_replicate - , time_t rrdpush_replication_step - , struct rrdhost_system_info *system_info + , const char *hostname + , const char *registry_hostname + , const char *guid + , const char *os + , const char *timezone + , const char *abbrev_timezone + , int32_t utc_offset + , const char *prog_name + , const char *prog_version + , int update_every + , long history + , RRD_MEMORY_MODE mode + , unsigned int health_enabled + , unsigned int rrdpush_enabled + , char *rrdpush_destination + , char *rrdpush_api_key + , char *rrdpush_send_charts_matching + , bool rrdpush_enable_replication + , time_t rrdpush_seconds_to_replicate + , time_t rrdpush_replication_step + , struct rrdhost_system_info *system_info ) { UNUSED(guid); @@ -641,23 +616,25 @@ static void rrdhost_update(RRDHOST *host rrdhost_index_add_hostname(host); } - if(strcmp(rrdhost_program_name(host), program_name) != 0) { + if(strcmp(rrdhost_program_name(host), prog_name) != 0) { nd_log(NDLS_DAEMON, NDLP_NOTICE, "Host '%s' switched program name from '%s' to '%s'", - rrdhost_hostname(host), rrdhost_program_name(host), program_name); + rrdhost_hostname(host), rrdhost_program_name(host), + prog_name); STRING *t = host->program_name; - host->program_name = string_strdupz(program_name); + host->program_name = string_strdupz(prog_name); string_freez(t); } - if(strcmp(rrdhost_program_version(host), program_version) != 0) { + if(strcmp(rrdhost_program_version(host), prog_version) != 0) { nd_log(NDLS_DAEMON, NDLP_NOTICE, "Host '%s' switched program version from '%s' to '%s'", - rrdhost_hostname(host), rrdhost_program_version(host), program_version); + rrdhost_hostname(host), rrdhost_program_version(host), + prog_version); STRING *t = host->program_version; - host->program_version = string_strdupz(program_version); + host->program_version = string_strdupz(prog_version); string_freez(t); } @@ -683,9 +660,6 @@ static void rrdhost_update(RRDHOST *host host->rrd_history_entries, history); - // update host tags - rrdhost_init_tags(host, tags); - if(!host->rrdvars) host->rrdvars = rrdvariables_create(); @@ -694,7 +668,7 @@ static void rrdhost_update(RRDHOST *host if (rrdhost_flag_check(host, RRDHOST_FLAG_ARCHIVED)) { rrdhost_flag_clear(host, RRDHOST_FLAG_ARCHIVED); - rrdfunctions_host_init(host); + rrd_functions_host_init(host); if(!host->rrdlabels) host->rrdlabels = rrdlabels_create(); @@ -708,8 +682,6 @@ static void rrdhost_update(RRDHOST *host rrdpush_api_key, rrdpush_send_charts_matching); - rrdfamily_index_init(host); - rrdcalctemplate_index_init(host); rrdcalc_rrdhost_index_init(host); if(rrdpush_enable_replication) @@ -732,29 +704,28 @@ static void rrdhost_update(RRDHOST *host } RRDHOST *rrdhost_find_or_create( - const char *hostname - , const char *registry_hostname - , const char *guid - , const char *os - , const char *timezone - , const char *abbrev_timezone - , int32_t utc_offset - , const char *tags - , const char *program_name - , const char *program_version - , int update_every - , long history - , RRD_MEMORY_MODE mode - , unsigned int health_enabled - , unsigned int rrdpush_enabled - , char *rrdpush_destination - , char *rrdpush_api_key - , char *rrdpush_send_charts_matching - , bool rrdpush_enable_replication - , time_t rrdpush_seconds_to_replicate - , time_t rrdpush_replication_step - , struct rrdhost_system_info *system_info - , bool archived + const char *hostname + , const char *registry_hostname + , const char *guid + , const char *os + , const char *timezone + , const char *abbrev_timezone + , int32_t utc_offset + , const char *prog_name + , const char *prog_version + , int update_every + , long history + , RRD_MEMORY_MODE mode + , unsigned int health_enabled + , unsigned int rrdpush_enabled + , char *rrdpush_destination + , char *rrdpush_api_key + , char *rrdpush_send_charts_matching + , bool rrdpush_enable_replication + , time_t rrdpush_seconds_to_replicate + , time_t rrdpush_replication_step + , struct rrdhost_system_info *system_info + , bool archived ) { RRDHOST *host = rrdhost_find_by_guid(guid); if (unlikely(host && host->rrd_memory_mode != mode && rrdhost_flag_check(host, RRDHOST_FLAG_ARCHIVED))) { @@ -784,9 +755,8 @@ RRDHOST *rrdhost_find_or_create( , timezone , abbrev_timezone , utc_offset - , tags - , program_name - , program_version + , prog_name + , prog_version , update_every , history , mode @@ -813,9 +783,8 @@ RRDHOST *rrdhost_find_or_create( , timezone , abbrev_timezone , utc_offset - , tags - , program_name - , program_version + , prog_name + , prog_version , update_every , history , mode @@ -904,23 +873,12 @@ void dbengine_init(char *hostname) { struct dbengine_initialization tiers_init[RRD_STORAGE_TIERS] = {}; + bool tiers_adjusted = false; size_t created_tiers = 0; char dbenginepath[FILENAME_MAX + 1]; char dbengineconfig[200 + 1]; int divisor = 1; for(size_t tier = 0; tier < storage_tiers ;tier++) { - if(tier == 0) - snprintfz(dbenginepath, FILENAME_MAX, "%s/dbengine", netdata_configured_cache_dir); - else - snprintfz(dbenginepath, FILENAME_MAX, "%s/dbengine-tier%zu", netdata_configured_cache_dir, tier); - - int ret = mkdir(dbenginepath, 0775); - if (ret != 0 && errno != EEXIST) { - nd_log(NDLS_DAEMON, NDLP_CRIT, - "DBENGINE on '%s': cannot create directory '%s'", - hostname, dbenginepath); - break; - } if(tier > 0) divisor *= 2; @@ -949,10 +907,7 @@ void dbengine_init(char *hostname) { else if(strcmp(bf, "full") == 0) backfill = RRD_BACKFILL_FULL; else if(strcmp(bf, "none") == 0) backfill = RRD_BACKFILL_NONE; else { - nd_log(NDLS_DAEMON, NDLP_WARNING, - "DBENGINE: unknown backfill value '%s', assuming 'new'", - bf); - + nd_log(NDLS_DAEMON, NDLP_WARNING, "DBENGINE: unknown backfill value '%s', assuming 'new'", bf); config_set(CONFIG_SECTION_DB, dbengineconfig, "new"); backfill = RRD_BACKFILL_NEW; } @@ -965,8 +920,21 @@ void dbengine_init(char *hostname) { storage_tiers_grouping_iterations[tier] = 1; nd_log(NDLS_DAEMON, NDLP_WARNING, "DBENGINE on '%s': dbengine tier %zu gives aggregation of more than 65535 points of tier 0. " - "Disabling tiers above %zu", + "Disabling tiers %zu and above", hostname, tier, tier); + storage_tiers = tier; + tiers_adjusted = true; + break; + } + + if(tier == 0) + snprintfz(dbenginepath, FILENAME_MAX, "%s/dbengine", netdata_configured_cache_dir); + else + snprintfz(dbenginepath, FILENAME_MAX, "%s/dbengine-tier%zu", netdata_configured_cache_dir, tier); + + int ret = mkdir(dbenginepath, 0775); + if (ret != 0 && errno != EEXIST) { + nd_log(NDLS_DAEMON, NDLP_CRIT, "DBENGINE on '%s': cannot create directory '%s'", hostname, dbenginepath); break; } @@ -986,6 +954,8 @@ void dbengine_init(char *hostname) { else dbengine_tier_init(&tiers_init[tier]); } + if (tiers_adjusted) + config_set_number(CONFIG_SECTION_DB, "storage tiers", storage_tiers); for(size_t tier = 0; tier < storage_tiers ;tier++) { void *ptr; @@ -1033,7 +1003,7 @@ void dbengine_init(char *hostname) { int rrd_init(char *hostname, struct rrdhost_system_info *system_info, bool unittest) { rrdhost_init(); - if (unlikely(sql_init_database(DB_CHECK_NONE, system_info ? 0 : 1))) { + if (unlikely(sql_init_meta_database(DB_CHECK_NONE, system_info ? 0 : 1))) { if (default_rrd_memory_mode == RRD_MEMORY_MODE_DBENGINE) { set_late_global_environment(system_info); fatal("Failed to initialize SQLite"); @@ -1051,7 +1021,6 @@ int rrd_init(char *hostname, struct rrdhost_system_info *system_info, bool unitt dbengine_enabled = true; } else { - health_init(); rrdpush_init(); if (default_rrd_memory_mode == RRD_MEMORY_MODE_DBENGINE || rrdpush_receiver_needs_dbengine()) { @@ -1093,13 +1062,12 @@ int rrd_init(char *hostname, struct rrdhost_system_info *system_info, bool unitt , netdata_configured_timezone , netdata_configured_abbrev_timezone , netdata_configured_utc_offset - , "" , program_name , program_version , default_rrd_update_every , default_rrd_history_entries , default_rrd_memory_mode - , default_health_enabled + , health_plugin_enabled() , default_rrdpush_enabled , default_rrdpush_destination , default_rrdpush_api_key @@ -1112,23 +1080,34 @@ int rrd_init(char *hostname, struct rrdhost_system_info *system_info, bool unitt , 0 ); - if (unlikely(!localhost)) { + if (unlikely(!localhost)) return 1; + + dyncfg_host_init(localhost); + + if(!unittest) { + health_plugin_init(); } // we register this only on localhost // for the other nodes, the origin server should register it - rrd_collector_started(); // this creates a collector that runs for as long as netdata runs - rrd_function_add(localhost, NULL, "streaming", 10, - RRDFUNCTIONS_STREAMING_HELP, true, - rrdhost_function_streaming, NULL); + rrd_function_add_inline(localhost, NULL, "streaming", 10, + RRDFUNCTIONS_PRIORITY_DEFAULT + 1, RRDFUNCTIONS_STREAMING_HELP, "top", + HTTP_ACCESS_SIGNED_ID | HTTP_ACCESS_SAME_SPACE | HTTP_ACCESS_SENSITIVE_DATA, + rrdhost_function_streaming); + + rrd_function_add_inline(localhost, NULL, "netdata-api-calls", 10, + RRDFUNCTIONS_PRIORITY_DEFAULT + 2, RRDFUNCTIONS_PROGRESS_HELP, "top", + HTTP_ACCESS_SIGNED_ID | HTTP_ACCESS_SAME_SPACE | HTTP_ACCESS_SENSITIVE_DATA, + rrdhost_function_progress); if (likely(system_info)) { - migrate_localhost(&localhost->host_uuid); + detect_machine_guid_change(&localhost->host_uuid); sql_aclk_sync_init(); web_client_api_v1_management_init(); } - return localhost==NULL; + + return 0; } // ---------------------------------------------------------------------------- @@ -1261,16 +1240,15 @@ void rrdhost_free___while_having_rrd_wrlock(RRDHOST *host, bool force) { #ifdef ENABLE_DBENGINE for(size_t tier = 0; tier < storage_tiers ;tier++) { if(host->db[tier].mode == RRD_MEMORY_MODE_DBENGINE - && host->db[tier].instance - && !is_storage_engine_shared(host->db[tier].instance)) - rrdeng_prepare_exit((struct rrdengine_instance *)host->db[tier].instance); + && host->db[tier].si + && !is_storage_engine_shared(host->db[tier].si)) + rrdeng_prepare_exit((struct rrdengine_instance *)host->db[tier].si); } #endif // delete all the RRDSETs of the host rrdset_index_destroy(host); rrdcalc_rrdhost_index_destroy(host); - rrdcalctemplate_index_destroy(host); // cleanup ML resources ml_host_delete(host); @@ -1282,9 +1260,9 @@ void rrdhost_free___while_having_rrd_wrlock(RRDHOST *host, bool force) { #ifdef ENABLE_DBENGINE for(size_t tier = 0; tier < storage_tiers ;tier++) { if(host->db[tier].mode == RRD_MEMORY_MODE_DBENGINE - && host->db[tier].instance - && !is_storage_engine_shared(host->db[tier].instance)) - rrdeng_exit((struct rrdengine_instance *)host->db[tier].instance); + && host->db[tier].si + && !is_storage_engine_shared(host->db[tier].si)) + rrdeng_exit((struct rrdengine_instance *)host->db[tier].si); } #endif @@ -1303,7 +1281,6 @@ void rrdhost_free___while_having_rrd_wrlock(RRDHOST *host, bool force) { pthread_mutex_destroy(&host->aclk_state_lock); freez(host->aclk_state.claimed_id); freez(host->aclk_state.prev_claimed_id); - string_freez(host->tags); rrdlabels_destroy(host->rrdlabels); string_freez(host->os); string_freez(host->timezone); @@ -1321,11 +1298,10 @@ void rrdhost_free___while_having_rrd_wrlock(RRDHOST *host, bool force) { simple_pattern_free(host->rrdpush_send_charts_matching); freez(host->node_id); - rrdfamily_index_destroy(host); - rrdfunctions_host_destroy(host); + rrd_functions_host_destroy(host); rrdvariables_destroy(host->rrdvars); if (host == localhost) - rrdvariables_destroy(health_rrdvars); + health_plugin_destroy(); rrdhost_destroy_rrdcontexts(host); @@ -1356,26 +1332,6 @@ void rrd_finalize_collection_for_all_hosts(void) { dfe_done(host); } -// ---------------------------------------------------------------------------- -// RRDHOST - save host files - -void rrdhost_save_charts(RRDHOST *host) { - if(!host) return; - - nd_log(NDLS_DAEMON, NDLP_DEBUG, - "RRD: 'host:%s' saving / closing database...", - rrdhost_hostname(host)); - - RRDSET *st; - - // we get a write lock - // to ensure only one thread is saving the database - rrdset_foreach_write(st, host) { - rrdset_save(st); - } - rrdset_foreach_done(st); -} - struct rrdhost_system_info *rrdhost_labels_to_system_info(RRDLABELS *labels) { struct rrdhost_system_info *info = callocz(1, sizeof(struct rrdhost_system_info)); info->hops = 1; @@ -1476,6 +1432,9 @@ static void rrdhost_load_auto_labels(void) { rrdlabels_add(labels, "_is_parent", (localhost->connected_children_count > 0) ? "true" : "false", RRDLABEL_SRC_AUTO); + rrdlabels_add(labels, "_hostname", string2str(localhost->hostname), RRDLABEL_SRC_AUTO); + rrdlabels_add(labels, "_os", string2str(localhost->os), RRDLABEL_SRC_AUTO); + if (localhost->rrdpush_send_destination) rrdlabels_add(labels, "_streams_to", localhost->rrdpush_send_destination, RRDLABEL_SRC_AUTO); } @@ -1564,6 +1523,12 @@ void reload_host_labels(void) { } void rrdhost_finalize_collection(RRDHOST *host) { + ND_LOG_STACK lgs[] = { + ND_LOG_FIELD_TXT(NDF_NIDL_NODE, rrdhost_hostname(host)), + ND_LOG_FIELD_END(), + }; + ND_LOG_STACK_PUSH(lgs); + nd_log(NDLS_DAEMON, NDLP_DEBUG, "RRD: 'host:%s' stopping data collection...", rrdhost_hostname(host)); @@ -1575,103 +1540,6 @@ void rrdhost_finalize_collection(RRDHOST *host) { } // ---------------------------------------------------------------------------- -// RRDHOST - delete host files - -void rrdhost_delete_charts(RRDHOST *host) { - if(!host) return; - - nd_log(NDLS_DAEMON, NDLP_DEBUG, - "RRD: 'host:%s' deleting disk files...", - rrdhost_hostname(host)); - - RRDSET *st; - - if(host->rrd_memory_mode == RRD_MEMORY_MODE_SAVE || host->rrd_memory_mode == RRD_MEMORY_MODE_MAP) { - // we get a write lock - // to ensure only one thread is saving the database - rrdset_foreach_write(st, host){ - rrdset_delete_files(st); - } - rrdset_foreach_done(st); - } - - recursively_delete_dir(host->cache_dir, "left over host"); -} - -// ---------------------------------------------------------------------------- -// RRDHOST - cleanup host files - -void rrdhost_cleanup_charts(RRDHOST *host) { - if(!host) return; - - nd_log(NDLS_DAEMON, NDLP_DEBUG, - "RRD: 'host:%s' cleaning up disk files...", - rrdhost_hostname(host)); - - RRDSET *st; - uint32_t rrdhost_delete_obsolete_charts = rrdhost_option_check(host, RRDHOST_OPTION_DELETE_OBSOLETE_CHARTS); - - // we get a write lock - // to ensure only one thread is saving the database - rrdset_foreach_write(st, host) { - - if(rrdhost_delete_obsolete_charts && rrdset_flag_check(st, RRDSET_FLAG_OBSOLETE)) - rrdset_delete_files(st); - - else if(rrdhost_delete_obsolete_charts && rrdset_flag_check(st, RRDSET_FLAG_OBSOLETE_DIMENSIONS)) - rrdset_delete_obsolete_dimensions(st); - - else - rrdset_save(st); - - } - rrdset_foreach_done(st); -} - - -// ---------------------------------------------------------------------------- -// RRDHOST - save all hosts to disk - -void rrdhost_save_all(void) { - nd_log(NDLS_DAEMON, NDLP_DEBUG, - "RRD: saving databases [%zu hosts(s)]...", - rrdhost_hosts_available()); - - rrd_rdlock(); - - RRDHOST *host; - rrdhost_foreach_read(host) - rrdhost_save_charts(host); - - rrd_unlock(); -} - -// ---------------------------------------------------------------------------- -// RRDHOST - save or delete all hosts from disk - -void rrdhost_cleanup_all(void) { - nd_log(NDLS_DAEMON, NDLP_DEBUG, - "RRD: cleaning up database [%zu hosts(s)]...", - rrdhost_hosts_available()); - - rrd_rdlock(); - - RRDHOST *host; - rrdhost_foreach_read(host) { - if (host != localhost && rrdhost_option_check(host, RRDHOST_OPTION_DELETE_ORPHAN_HOST) && !host->receiver - /* don't delete multi-host DB host files */ - && !(host->rrd_memory_mode == RRD_MEMORY_MODE_DBENGINE && is_storage_engine_shared(host->db[0].instance)) - ) - rrdhost_delete_charts(host); - else - rrdhost_cleanup_charts(host); - } - - rrd_unlock(); -} - - -// ---------------------------------------------------------------------------- // RRDHOST - set system info from environment variables // system_info fields must be heap allocated or NULL int rrdhost_set_system_info_variable(struct rrdhost_system_info *system_info, char *name, char *value) { @@ -1843,6 +1711,10 @@ void rrdhost_status(RRDHOST *host, time_t now, RRDHOST_STATUS *s) { RRDHOST_FLAGS flags = __atomic_load_n(&host->flags, __ATOMIC_RELAXED); + // --- dyncfg --- + + s->dyncfg.status = dyncfg_available_for_rrdhost(host) ? RRDHOST_DYNCFG_STATUS_AVAILABLE : RRDHOST_DYNCFG_STATUS_UNAVAILABLE; + // --- db --- bool online = rrdhost_is_online(host); @@ -1852,7 +1724,7 @@ void rrdhost_status(RRDHOST *host, time_t now, RRDHOST_STATUS *s) { s->db.instances = host->rrdctx.instances; s->db.contexts = dictionary_entries(host->rrdctx.contexts); if(!s->db.first_time_s || !s->db.last_time_s || !s->db.metrics || !s->db.instances || !s->db.contexts || - (flags & (RRDHOST_FLAG_PENDING_CONTEXT_LOAD|RRDHOST_FLAG_CONTEXT_LOAD_IN_PROGRESS))) + (flags & (RRDHOST_FLAG_PENDING_CONTEXT_LOAD))) s->db.status = RRDHOST_DB_STATUS_INITIALIZING; else s->db.status = RRDHOST_DB_STATUS_QUERYABLE; |