summaryrefslogtreecommitdiffstats
path: root/daemon/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'daemon/main.c')
-rw-r--r--daemon/main.c330
1 files changed, 233 insertions, 97 deletions
diff --git a/daemon/main.c b/daemon/main.c
index 13644d4b61..6abce36ac4 100644
--- a/daemon/main.c
+++ b/daemon/main.c
@@ -8,12 +8,9 @@
#warning COMPILING 32BIT NETDATA
#endif
-bool unittest_running = false;
int netdata_zero_metrics_enabled;
int netdata_anonymous_statistics_enabled;
-int libuv_worker_threads = MIN_LIBUV_WORKER_THREADS;
-bool ieee754_doubles = false;
time_t netdata_start_time = 0;
struct netdata_static_thread *static_threads;
@@ -327,10 +324,10 @@ void netdata_cleanup_and_exit(int ret) {
(void) rename(agent_crash_file, agent_incomplete_shutdown_file);
#ifdef ENABLE_DBENGINE
- if(dbengine_enabled) {
+ if (rrdb.dbengine_enabled) {
delta_shutdown_time("dbengine exit mode");
- for (size_t tier = 0; tier < storage_tiers; tier++)
- rrdeng_exit_mode(multidb_ctx[tier]);
+ for (size_t tier = 0; tier < rrdb.storage_tiers; tier++)
+ rrdeng_exit_mode(rrdb.multidb_ctx[tier]);
}
#endif
@@ -418,10 +415,10 @@ void netdata_cleanup_and_exit(int ret) {
// exit cleanly
#ifdef ENABLE_DBENGINE
- if(dbengine_enabled) {
+ if (rrdb.dbengine_enabled) {
delta_shutdown_time("flush dbengine tiers");
- for (size_t tier = 0; tier < storage_tiers; tier++)
- rrdeng_prepare_exit(multidb_ctx[tier]);
+ for (size_t tier = 0; tier < rrdb.storage_tiers; tier++)
+ rrdeng_prepare_exit(rrdb.multidb_ctx[tier]);
}
#endif
@@ -436,14 +433,14 @@ void netdata_cleanup_and_exit(int ret) {
metadata_sync_shutdown();
#ifdef ENABLE_DBENGINE
- if(dbengine_enabled) {
+ if (rrdb.dbengine_enabled) {
delta_shutdown_time("wait for dbengine collectors to finish");
size_t running = 1;
while(running) {
running = 0;
- for (size_t tier = 0; tier < storage_tiers; tier++)
- running += rrdeng_collectors_running(multidb_ctx[tier]);
+ for (size_t tier = 0; tier < rrdb.storage_tiers; tier++)
+ running += rrdeng_collectors_running(rrdb.multidb_ctx[tier]);
if(running) {
error_limit_static_thread_var(erl, 1, 100 * USEC_PER_MS);
@@ -460,8 +457,8 @@ void netdata_cleanup_and_exit(int ret) {
}
delta_shutdown_time("stop dbengine tiers");
- for (size_t tier = 0; tier < storage_tiers; tier++)
- rrdeng_exit(multidb_ctx[tier]);
+ for (size_t tier = 0; tier < rrdb.storage_tiers; tier++)
+ rrdeng_exit(rrdb.multidb_ctx[tier]);
}
#endif
}
@@ -660,6 +657,26 @@ static void set_nofile_limit(struct rlimit *rl) {
netdata_log_error("Number of open file descriptors allowed for this process is too low (RLIMIT_NOFILE=%zu)", (size_t)rl->rlim_cur);
}
+static void set_libuv_worker_threads()
+{
+#if defined(ENV32BIT)
+ const int min_libuv_worker_threads = 8;
+ const int max_libuv_worker_threads = 128;
+#else
+ const int min_libuv_worker_threads = 16;
+ const int max_libuv_worker_threads = 1024;
+#endif
+
+ int n = (int) get_netdata_cpus() * 6;
+ n = CLAMP(n, min_libuv_worker_threads, max_libuv_worker_threads);
+
+ n = config_get_number(CONFIG_SECTION_GLOBAL, "libuv worker threads", n);
+ n = MAX(n, min_libuv_worker_threads);
+ config_set_number(CONFIG_SECTION_GLOBAL, "libuv worker threads", n);
+
+ rrdb.libuv_worker_threads = n;
+}
+
void cancel_main_threads() {
error_log_limit_unlimited();
@@ -1065,37 +1082,37 @@ static void get_netdata_configured_variables() {
// ------------------------------------------------------------------------
// get default database update frequency
- default_rrd_update_every = (int) config_get_number(CONFIG_SECTION_DB, "update every", UPDATE_EVERY);
- if(default_rrd_update_every < 1 || default_rrd_update_every > 600) {
- netdata_log_error("Invalid data collection frequency (update every) %d given. Defaulting to %d.", default_rrd_update_every, UPDATE_EVERY);
- default_rrd_update_every = UPDATE_EVERY;
- config_set_number(CONFIG_SECTION_DB, "update every", default_rrd_update_every);
+ rrdb.default_update_every = (int) config_get_number(CONFIG_SECTION_DB, "update every", rrdb.default_update_every);
+ if(rrdb.default_update_every < UPDATE_EVERY_MIN || rrdb.default_update_every > UPDATE_EVERY_MAX) {
+ netdata_log_error("Invalid data collection frequency (update every) %d given. Defaulting to %d.", rrdb.default_update_every, UPDATE_EVERY_MIN);
+ rrdb.default_update_every = UPDATE_EVERY_MIN;
+ config_set_number(CONFIG_SECTION_DB, "update every", rrdb.default_update_every);
}
// ------------------------------------------------------------------------
- // get default memory mode for the database
+ // get default storage engine for the database
{
- const char *mode = config_get(CONFIG_SECTION_DB, "mode", rrd_memory_mode_name(default_rrd_memory_mode));
- default_rrd_memory_mode = rrd_memory_mode_id(mode);
- if(strcmp(mode, rrd_memory_mode_name(default_rrd_memory_mode)) != 0) {
- netdata_log_error("Invalid memory mode '%s' given. Using '%s'", mode, rrd_memory_mode_name(default_rrd_memory_mode));
- config_set(CONFIG_SECTION_DB, "mode", rrd_memory_mode_name(default_rrd_memory_mode));
+ const char *se_name = config_get(CONFIG_SECTION_DB, "mode", storage_engine_name(default_storage_engine_id));
+ if (!storage_engine_id(se_name, &default_storage_engine_id)) {
+ netdata_log_error("Invalid memory mode '%s' given. Using '%s'",
+ se_name, storage_engine_name(default_storage_engine_id));
+ config_set(CONFIG_SECTION_DB, "mode", storage_engine_name(default_storage_engine_id));
}
}
// ------------------------------------------------------------------------
// get default database size
- if(default_rrd_memory_mode != RRD_MEMORY_MODE_DBENGINE && default_rrd_memory_mode != RRD_MEMORY_MODE_NONE) {
- default_rrd_history_entries = (int)config_get_number(
+ if(default_storage_engine_id != STORAGE_ENGINE_DBENGINE && default_storage_engine_id != STORAGE_ENGINE_NONE) {
+ rrdb.default_rrd_history_entries = (int)config_get_number(
CONFIG_SECTION_DB, "retention",
- align_entries_to_pagesize(default_rrd_memory_mode, RRD_DEFAULT_HISTORY_ENTRIES));
+ align_entries_to_pagesize(default_storage_engine_id, RRD_DEFAULT_HISTORY_ENTRIES));
- long h = align_entries_to_pagesize(default_rrd_memory_mode, default_rrd_history_entries);
- if (h != default_rrd_history_entries) {
+ long h = align_entries_to_pagesize(default_storage_engine_id, rrdb.default_rrd_history_entries);
+ if (h != rrdb.default_rrd_history_entries) {
config_set_number(CONFIG_SECTION_DB, "retention", h);
- default_rrd_history_entries = (int)h;
+ rrdb.default_rrd_history_entries = (int)h;
}
}
@@ -1122,39 +1139,39 @@ static void get_netdata_configured_variables() {
// ------------------------------------------------------------------------
// get default Database Engine page cache size in MiB
- default_rrdeng_page_cache_mb = (int) config_get_number(CONFIG_SECTION_DB, "dbengine page cache size MB", default_rrdeng_page_cache_mb);
- default_rrdeng_extent_cache_mb = (int) config_get_number(CONFIG_SECTION_DB, "dbengine extent cache size MB", default_rrdeng_extent_cache_mb);
- db_engine_journal_check = config_get_boolean(CONFIG_SECTION_DB, "dbengine enable journal integrity check", CONFIG_BOOLEAN_NO);
+ rrdb.default_rrdeng_page_cache_mb = (int) config_get_number(CONFIG_SECTION_DB, "dbengine page cache size MB", rrdb.default_rrdeng_page_cache_mb);
+ rrdb.default_rrdeng_extent_cache_mb = (int) config_get_number(CONFIG_SECTION_DB, "dbengine extent cache size MB", rrdb.default_rrdeng_extent_cache_mb);
+ rrdb.db_engine_journal_check = config_get_boolean(CONFIG_SECTION_DB, "dbengine enable journal integrity check", CONFIG_BOOLEAN_NO);
- if(default_rrdeng_extent_cache_mb < 0)
- default_rrdeng_extent_cache_mb = 0;
+ if(rrdb.default_rrdeng_extent_cache_mb < 0)
+ rrdb.default_rrdeng_extent_cache_mb = 0;
- if(default_rrdeng_page_cache_mb < RRDENG_MIN_PAGE_CACHE_SIZE_MB) {
- netdata_log_error("Invalid page cache size %d given. Defaulting to %d.", default_rrdeng_page_cache_mb, RRDENG_MIN_PAGE_CACHE_SIZE_MB);
- default_rrdeng_page_cache_mb = RRDENG_MIN_PAGE_CACHE_SIZE_MB;
- config_set_number(CONFIG_SECTION_DB, "dbengine page cache size MB", default_rrdeng_page_cache_mb);
+ if(rrdb.default_rrdeng_page_cache_mb < RRDENG_MIN_PAGE_CACHE_SIZE_MB) {
+ netdata_log_error("Invalid page cache size %d given. Defaulting to %d.", rrdb.default_rrdeng_page_cache_mb, RRDENG_MIN_PAGE_CACHE_SIZE_MB);
+ rrdb.default_rrdeng_page_cache_mb = RRDENG_MIN_PAGE_CACHE_SIZE_MB;
+ config_set_number(CONFIG_SECTION_DB, "dbengine page cache size MB", rrdb.default_rrdeng_page_cache_mb);
}
// ------------------------------------------------------------------------
// get default Database Engine disk space quota in MiB
- default_rrdeng_disk_quota_mb = (int) config_get_number(CONFIG_SECTION_DB, "dbengine disk space MB", default_rrdeng_disk_quota_mb);
- if(default_rrdeng_disk_quota_mb < RRDENG_MIN_DISK_SPACE_MB) {
- netdata_log_error("Invalid dbengine disk space %d given. Defaulting to %d.", default_rrdeng_disk_quota_mb, RRDENG_MIN_DISK_SPACE_MB);
- default_rrdeng_disk_quota_mb = RRDENG_MIN_DISK_SPACE_MB;
- config_set_number(CONFIG_SECTION_DB, "dbengine disk space MB", default_rrdeng_disk_quota_mb);
+ rrdb.default_rrdeng_disk_quota_mb = (int) config_get_number(CONFIG_SECTION_DB, "dbengine disk space MB", rrdb.default_rrdeng_disk_quota_mb);
+ if (rrdb.default_rrdeng_disk_quota_mb < RRDENG_MIN_DISK_SPACE_MB) {
+ netdata_log_error("Invalid dbengine disk space %d given. Defaulting to %d.", rrdb.default_rrdeng_disk_quota_mb, RRDENG_MIN_DISK_SPACE_MB);
+ rrdb.default_rrdeng_disk_quota_mb = RRDENG_MIN_DISK_SPACE_MB;
+ config_set_number(CONFIG_SECTION_DB, "dbengine disk space MB", rrdb.default_rrdeng_disk_quota_mb);
}
- default_multidb_disk_quota_mb = (int) config_get_number(CONFIG_SECTION_DB, "dbengine multihost disk space MB", compute_multidb_diskspace());
- if(default_multidb_disk_quota_mb < RRDENG_MIN_DISK_SPACE_MB) {
- netdata_log_error("Invalid multidb disk space %d given. Defaulting to %d.", default_multidb_disk_quota_mb, default_rrdeng_disk_quota_mb);
- default_multidb_disk_quota_mb = default_rrdeng_disk_quota_mb;
- config_set_number(CONFIG_SECTION_DB, "dbengine multihost disk space MB", default_multidb_disk_quota_mb);
+ rrdb.default_multidb_disk_quota_mb = (int) config_get_number(CONFIG_SECTION_DB, "dbengine multihost disk space MB", compute_multidb_diskspace());
+ if(rrdb.default_multidb_disk_quota_mb < RRDENG_MIN_DISK_SPACE_MB) {
+ netdata_log_error("Invalid multidb disk space %d given. Defaulting to %d.", rrdb.default_multidb_disk_quota_mb, rrdb.default_rrdeng_disk_quota_mb);
+ rrdb.default_multidb_disk_quota_mb = rrdb.default_rrdeng_disk_quota_mb;
+ config_set_number(CONFIG_SECTION_DB, "dbengine multihost disk space MB", rrdb.default_multidb_disk_quota_mb);
}
#else
- if (default_rrd_memory_mode == RRD_MEMORY_MODE_DBENGINE) {
+ if (default_storage_engine_id == STORAGE_ENGINE_DBENGINE) {
error_report("RRD_MEMORY_MODE_DBENGINE is not supported in this platform. The agent will use db mode 'save' instead.");
- default_rrd_memory_mode = RRD_MEMORY_MODE_SAVE;
+ default_storage_engine_id = STORAGE_ENGINE_SAVE;
}
#endif
// ------------------------------------------------------------------------
@@ -1179,22 +1196,22 @@ static void get_netdata_configured_variables() {
// --------------------------------------------------------------------
- rrdset_free_obsolete_time_s = config_get_number(CONFIG_SECTION_DB, "cleanup obsolete charts after secs", rrdset_free_obsolete_time_s);
+ rrdb.rrdset_free_obsolete_time_s = config_get_number(CONFIG_SECTION_DB, "cleanup obsolete charts after secs", rrdb.rrdset_free_obsolete_time_s);
// Current chart locking and invalidation scheme doesn't prevent Netdata from segmentation faults if a short
// cleanup delay is set. Extensive stress tests showed that 10 seconds is quite a safe delay. Look at
// https://github.com/netdata/netdata/pull/11222#issuecomment-868367920 for more information.
- if (rrdset_free_obsolete_time_s < 10) {
- rrdset_free_obsolete_time_s = 10;
+ if (rrdb.rrdset_free_obsolete_time_s < 10) {
+ rrdb.rrdset_free_obsolete_time_s = 10;
netdata_log_info("The \"cleanup obsolete charts after seconds\" option was set to 10 seconds.");
- config_set_number(CONFIG_SECTION_DB, "cleanup obsolete charts after secs", rrdset_free_obsolete_time_s);
+ config_set_number(CONFIG_SECTION_DB, "cleanup obsolete charts after secs", rrdb.rrdset_free_obsolete_time_s);
}
- gap_when_lost_iterations_above = (int)config_get_number(CONFIG_SECTION_DB, "gap when lost iterations above", gap_when_lost_iterations_above);
- if (gap_when_lost_iterations_above < 1) {
- gap_when_lost_iterations_above = 1;
- config_set_number(CONFIG_SECTION_DB, "gap when lost iterations above", gap_when_lost_iterations_above);
+ rrdb.gap_when_lost_iterations_above = (int)config_get_number(CONFIG_SECTION_DB, "gap when lost iterations above", rrdb.gap_when_lost_iterations_above);
+ if (rrdb.gap_when_lost_iterations_above < 1) {
+ rrdb.gap_when_lost_iterations_above = 1;
+ config_set_number(CONFIG_SECTION_DB, "gap when lost iterations above", rrdb.gap_when_lost_iterations_above);
}
- gap_when_lost_iterations_above += 2;
+ rrdb.gap_when_lost_iterations_above += 2;
// --------------------------------------------------------------------
// get various system parameters
@@ -1305,6 +1322,138 @@ int get_system_info(struct rrdhost_system_info *system_info, bool log) {
return 0;
}
+static void localhost_load_config_labels(void) {
+ int status = config_load(NULL, 1, CONFIG_SECTION_HOST_LABEL);
+ if(!status) {
+ char *filename = CONFIG_DIR "/" CONFIG_FILENAME;
+ netdata_log_error("RRDLABEL: Cannot reload the configuration file '%s', using labels in memory", filename);
+ }
+
+ struct section *co = appconfig_get_section(&netdata_config, CONFIG_SECTION_HOST_LABEL);
+ if(co) {
+ config_section_wrlock(co);
+ struct config_option *cv;
+ for(cv = co->values; cv ; cv = cv->next) {
+ rrdlabels_add(rrdb.localhost->rrdlabels, cv->name, cv->value, RRDLABEL_SRC_CONFIG);
+ cv->flags |= CONFIG_VALUE_USED;
+ }
+ config_section_unlock(co);
+ }
+}
+
+static void localhost_load_kubernetes_labels(void) {
+ char label_script[sizeof(char) * (strlen(netdata_configured_primary_plugins_dir) + strlen("get-kubernetes-labels.sh") + 2)];
+ sprintf(label_script, "%s/%s", netdata_configured_primary_plugins_dir, "get-kubernetes-labels.sh");
+
+ if (unlikely(access(label_script, R_OK) != 0)) {
+ netdata_log_error("Kubernetes pod label fetching script %s not found.",label_script);
+ return;
+ }
+
+ netdata_log_debug(D_RRDHOST, "Attempting to fetch external labels via %s", label_script);
+
+ pid_t pid;
+ FILE *fp_child_input;
+ FILE *fp_child_output = netdata_popen(label_script, &pid, &fp_child_input);
+ if(!fp_child_output) return;
+
+ char buffer[1000 + 1];
+ while (fgets(buffer, 1000, fp_child_output) != NULL)
+ rrdlabels_add_pair(rrdb.localhost->rrdlabels, buffer, RRDLABEL_SRC_AUTO|RRDLABEL_SRC_K8S);
+
+ // Non-zero exit code means that all the script output is error messages. We've shown already any message that didn't include a ':'
+ // Here we'll inform with an ERROR that the script failed, show whatever (if anything) was added to the list of labels, free the memory and set the return to null
+ int rc = netdata_pclose(fp_child_input, fp_child_output, pid);
+ if(rc)
+ netdata_log_error("%s exited abnormally. Failed to get kubernetes labels.", label_script);
+}
+
+static void localhost_load_auto_labels(void) {
+ DICTIONARY *labels = rrdb.localhost->rrdlabels;
+
+ if (rrdb.localhost->system_info->cloud_provider_type)
+ rrdlabels_add(labels, "_cloud_provider_type", rrdb.localhost->system_info->cloud_provider_type, RRDLABEL_SRC_AUTO);
+
+ if (rrdb.localhost->system_info->cloud_instance_type)
+ rrdlabels_add(labels, "_cloud_instance_type", rrdb.localhost->system_info->cloud_instance_type, RRDLABEL_SRC_AUTO);
+
+ if (rrdb.localhost->system_info->cloud_instance_region)
+ rrdlabels_add(labels, "_cloud_instance_region", rrdb.localhost->system_info->cloud_instance_region, RRDLABEL_SRC_AUTO);
+
+ if (rrdb.localhost->system_info->host_os_name)
+ rrdlabels_add(labels, "_os_name", rrdb.localhost->system_info->host_os_name, RRDLABEL_SRC_AUTO);
+
+ if (rrdb.localhost->system_info->host_os_version)
+ rrdlabels_add(labels, "_os_version", rrdb.localhost->system_info->host_os_version, RRDLABEL_SRC_AUTO);
+
+ if (rrdb.localhost->system_info->kernel_version)
+ rrdlabels_add(labels, "_kernel_version", rrdb.localhost->system_info->kernel_version, RRDLABEL_SRC_AUTO);
+
+ if (rrdb.localhost->system_info->host_cores)
+ rrdlabels_add(labels, "_system_cores", rrdb.localhost->system_info->host_cores, RRDLABEL_SRC_AUTO);
+
+ if (rrdb.localhost->system_info->host_cpu_freq)
+ rrdlabels_add(labels, "_system_cpu_freq", rrdb.localhost->system_info->host_cpu_freq, RRDLABEL_SRC_AUTO);
+
+ if (rrdb.localhost->system_info->host_ram_total)
+ rrdlabels_add(labels, "_system_ram_total", rrdb.localhost->system_info->host_ram_total, RRDLABEL_SRC_AUTO);
+
+ if (rrdb.localhost->system_info->host_disk_space)
+ rrdlabels_add(labels, "_system_disk_space", rrdb.localhost->system_info->host_disk_space, RRDLABEL_SRC_AUTO);
+
+ if (rrdb.localhost->system_info->architecture)
+ rrdlabels_add(labels, "_architecture", rrdb.localhost->system_info->architecture, RRDLABEL_SRC_AUTO);
+
+ if (rrdb.localhost->system_info->virtualization)
+ rrdlabels_add(labels, "_virtualization", rrdb.localhost->system_info->virtualization, RRDLABEL_SRC_AUTO);
+
+ if (rrdb.localhost->system_info->container)
+ rrdlabels_add(labels, "_container", rrdb.localhost->system_info->container, RRDLABEL_SRC_AUTO);
+
+ if (rrdb.localhost->system_info->container_detection)
+ rrdlabels_add(labels, "_container_detection", rrdb.localhost->system_info->container_detection, RRDLABEL_SRC_AUTO);
+
+ if (rrdb.localhost->system_info->virt_detection)
+ rrdlabels_add(labels, "_virt_detection", rrdb.localhost->system_info->virt_detection, RRDLABEL_SRC_AUTO);
+
+ if (rrdb.localhost->system_info->is_k8s_node)
+ rrdlabels_add(labels, "_is_k8s_node", rrdb.localhost->system_info->is_k8s_node, RRDLABEL_SRC_AUTO);
+
+ if (rrdb.localhost->system_info->install_type)
+ rrdlabels_add(labels, "_install_type", rrdb.localhost->system_info->install_type, RRDLABEL_SRC_AUTO);
+
+ if (rrdb.localhost->system_info->prebuilt_arch)
+ rrdlabels_add(labels, "_prebuilt_arch", rrdb.localhost->system_info->prebuilt_arch, RRDLABEL_SRC_AUTO);
+
+ if (rrdb.localhost->system_info->prebuilt_dist)
+ rrdlabels_add(labels, "_prebuilt_dist", rrdb.localhost->system_info->prebuilt_dist, RRDLABEL_SRC_AUTO);
+
+ add_aclk_host_labels();
+
+ health_add_host_labels();
+
+ rrdlabels_add(labels, "_is_parent", (rrdb.localhost->connected_children_count > 0) ? "true" : "false", RRDLABEL_SRC_AUTO);
+
+ if (rrdb.localhost->rrdpush_send_destination)
+ rrdlabels_add(labels, "_streams_to", rrdb.localhost->rrdpush_send_destination, RRDLABEL_SRC_AUTO);
+}
+
+void localhost_load_labels(void) {
+ if(!rrdb.localhost->rrdlabels)
+ rrdb.localhost->rrdlabels = rrdlabels_create();
+
+ rrdlabels_unmark_all(rrdb.localhost->rrdlabels);
+
+ // priority is important here
+ localhost_load_config_labels();
+ localhost_load_kubernetes_labels();
+ localhost_load_auto_labels();
+
+ rrdhost_flag_set(rrdb.localhost, RRDHOST_FLAG_METADATA_LABELS | RRDHOST_FLAG_METADATA_UPDATE);
+
+ rrdpush_send_host_labels(rrdb.localhost);
+}
+
void set_silencers_filename() {
char filename[FILENAME_MAX + 1];
snprintfz(filename, FILENAME_MAX, "%s/health.silencers.json", netdata_configured_varlib_dir);
@@ -1451,7 +1600,7 @@ int main(int argc, char **argv) {
}
if(strcmp(optarg, "unittest") == 0) {
- unittest_running = true;
+ rrdb.unittest_running = true;
if (pluginsd_parser_unittest())
return 1;
@@ -1469,10 +1618,10 @@ int main(int argc, char **argv) {
// No call to load the config file on this code-path
post_conf_load(&user);
get_netdata_configured_variables();
- default_rrd_update_every = 1;
- default_rrd_memory_mode = RRD_MEMORY_MODE_RAM;
+ rrdb.default_update_every = 1;
+ default_storage_engine_id = STORAGE_ENGINE_RAM;
default_health_enabled = 0;
- storage_tiers = 1;
+ rrdb.storage_tiers = 1;
registry_init();
if(rrd_init("unittest", NULL, true)) {
fprintf(stderr, "rrd_init failed for unittest\n");
@@ -1501,52 +1650,52 @@ int main(int argc, char **argv) {
return command_argument_sanitization_tests();
}
else if(strcmp(optarg, "dicttest") == 0) {
- unittest_running = true;
+ rrdb.unittest_running = true;
return dictionary_unittest(10000);
}
else if(strcmp(optarg, "araltest") == 0) {
- unittest_running = true;
+ rrdb.unittest_running = true;
return aral_unittest(10000);
}
else if(strcmp(optarg, "stringtest") == 0) {
- unittest_running = true;
+ rrdb.unittest_running = true;
return string_unittest(10000);
}
else if(strcmp(optarg, "rrdlabelstest") == 0) {
- unittest_running = true;
+ rrdb.unittest_running = true;
return rrdlabels_unittest();
}
else if(strcmp(optarg, "buffertest") == 0) {
- unittest_running = true;
+ rrdb.unittest_running = true;
return buffer_unittest();
}
#ifdef ENABLE_DBENGINE
else if(strcmp(optarg, "mctest") == 0) {
- unittest_running = true;
+ rrdb.unittest_running = true;
return mc_unittest();
}
else if(strcmp(optarg, "ctxtest") == 0) {
- unittest_running = true;
+ rrdb.unittest_running = true;
return ctx_unittest();
}
else if(strcmp(optarg, "metatest") == 0) {
- unittest_running = true;
+ rrdb.unittest_running = true;
return metadata_unittest();
}
else if(strcmp(optarg, "pgctest") == 0) {
- unittest_running = true;
+ rrdb.unittest_running = true;
return pgc_unittest();
}
else if(strcmp(optarg, "mrgtest") == 0) {
- unittest_running = true;
+ rrdb.unittest_running = true;
return mrg_unittest();
}
else if(strcmp(optarg, "julytest") == 0) {
- unittest_running = true;
+ rrdb.unittest_running = true;
return julytest();
}
else if(strcmp(optarg, "parsertest") == 0) {
- unittest_running = true;
+ rrdb.unittest_running = true;
return pluginsd_parser_unittest();
}
else if(strncmp(optarg, createdataset_string, strlen(createdataset_string)) == 0) {
@@ -1554,7 +1703,7 @@ int main(int argc, char **argv) {
unsigned history_seconds = strtoul(optarg, NULL, 0);
post_conf_load(&user);
get_netdata_configured_variables();
- default_rrd_update_every = 1;
+ rrdb.default_update_every = 1;
registry_init();
if(rrd_init("dbengine-dataset", NULL, true)) {
fprintf(stderr, "rrd_init failed for unittest\n");
@@ -1832,25 +1981,12 @@ int main(int argc, char **argv) {
#endif
#endif
- // set libuv worker threads
- libuv_worker_threads = (int)get_netdata_cpus() * 6;
-
- if(libuv_worker_threads < MIN_LIBUV_WORKER_THREADS)
- libuv_worker_threads = MIN_LIBUV_WORKER_THREADS;
-
- if(libuv_worker_threads > MAX_LIBUV_WORKER_THREADS)
- libuv_worker_threads = MAX_LIBUV_WORKER_THREADS;
-
-
- libuv_worker_threads = config_get_number(CONFIG_SECTION_GLOBAL, "libuv worker threads", libuv_worker_threads);
- if(libuv_worker_threads < MIN_LIBUV_WORKER_THREADS) {
- libuv_worker_threads = MIN_LIBUV_WORKER_THREADS;
- config_set_number(CONFIG_SECTION_GLOBAL, "libuv worker threads", libuv_worker_threads);
- }
+ // decide how many libuv workers to have on 32 vs 64 bit platforms
+ set_libuv_worker_threads();
{
char buf[20 + 1];
- snprintfz(buf, 20, "%d", libuv_worker_threads);
+ snprintfz(buf, 20, "%d", rrdb.libuv_worker_threads);
setenv("UV_THREADPOOL_SIZE", buf, 1);
}
@@ -1898,7 +2034,7 @@ int main(int argc, char **argv) {
// initialize the log files
open_all_log_files();
- ieee754_doubles = is_system_ieee754_double();
+ rrdb.ieee754_doubles = is_system_ieee754_double();
aral_judy_init();
@@ -2072,9 +2208,9 @@ int main(int argc, char **argv) {
error_log_limit_reset();
- // Load host labels
+ // Load localhost labels
delta_startup_time("collect host labels");
- reload_host_labels();
+ localhost_load_labels();
// ------------------------------------------------------------------------
// spawn the threads