diff options
Diffstat (limited to '')
-rw-r--r-- | src/collectors/tc.plugin/plugin_tc.c (renamed from collectors/tc.plugin/plugin_tc.c) | 90 |
1 files changed, 38 insertions, 52 deletions
diff --git a/collectors/tc.plugin/plugin_tc.c b/src/collectors/tc.plugin/plugin_tc.c index eae70453f..d2599f728 100644 --- a/collectors/tc.plugin/plugin_tc.c +++ b/src/collectors/tc.plugin/plugin_tc.c @@ -206,41 +206,54 @@ static inline void tc_device_classes_cleanup(struct tc_device *d) { } static inline void tc_device_commit(struct tc_device *d) { - static int enable_new_interfaces = -1, enable_bytes = -1, enable_packets = -1, enable_dropped = -1, enable_tokens = -1, enable_ctokens = -1, enabled_all_classes_qdiscs = -1; + static int enable_tokens = -1, enable_ctokens = -1, enabled_all_classes_qdiscs = -1; - if(unlikely(enable_new_interfaces == -1)) { - enable_new_interfaces = config_get_boolean_ondemand("plugin:tc", "enable new interfaces detected at runtime", CONFIG_BOOLEAN_YES); - enable_bytes = config_get_boolean_ondemand("plugin:tc", "enable traffic charts for all interfaces", CONFIG_BOOLEAN_AUTO); - enable_packets = config_get_boolean_ondemand("plugin:tc", "enable packets charts for all interfaces", CONFIG_BOOLEAN_AUTO); - enable_dropped = config_get_boolean_ondemand("plugin:tc", "enable dropped charts for all interfaces", CONFIG_BOOLEAN_AUTO); + if(unlikely(enabled_all_classes_qdiscs == -1)) { enable_tokens = config_get_boolean_ondemand("plugin:tc", "enable tokens charts for all interfaces", CONFIG_BOOLEAN_NO); enable_ctokens = config_get_boolean_ondemand("plugin:tc", "enable ctokens charts for all interfaces", CONFIG_BOOLEAN_NO); enabled_all_classes_qdiscs = config_get_boolean_ondemand("plugin:tc", "enable show all classes and qdiscs for all interfaces", CONFIG_BOOLEAN_NO); } if(unlikely(d->enabled == (char)-1)) { + d->enabled = CONFIG_BOOLEAN_YES; + d->enabled_bytes = CONFIG_BOOLEAN_YES; + d->enabled_packets = CONFIG_BOOLEAN_YES; + d->enabled_dropped = CONFIG_BOOLEAN_YES; + d->enabled_tokens = enable_tokens; + d->enabled_ctokens = enable_ctokens; + d->enabled_all_classes_qdiscs = enabled_all_classes_qdiscs; + + char var_name[CONFIG_MAX_NAME + 1]; - snprintfz(var_name, CONFIG_MAX_NAME, "qos for %s", string2str(d->id)); - d->enabled = (char)config_get_boolean_ondemand("plugin:tc", var_name, enable_new_interfaces); + snprintfz(var_name, CONFIG_MAX_NAME, "qos for %s", string2str(d->id)); + if (config_exists("plugin:tc", var_name)) + d->enabled = (char)config_get_boolean_ondemand("plugin:tc", var_name, d->enabled); snprintfz(var_name, CONFIG_MAX_NAME, "traffic chart for %s", string2str(d->id)); - d->enabled_bytes = (char)config_get_boolean_ondemand("plugin:tc", var_name, enable_bytes); + if (config_exists("plugin:tc", var_name)) + d->enabled_bytes = (char)config_get_boolean_ondemand("plugin:tc", var_name, d->enabled_bytes); snprintfz(var_name, CONFIG_MAX_NAME, "packets chart for %s", string2str(d->id)); - d->enabled_packets = (char)config_get_boolean_ondemand("plugin:tc", var_name, enable_packets); + if (config_exists("plugin:tc", var_name)) + d->enabled_packets = (char)config_get_boolean_ondemand("plugin:tc", var_name, d->enabled_packets); snprintfz(var_name, CONFIG_MAX_NAME, "dropped packets chart for %s", string2str(d->id)); - d->enabled_dropped = (char)config_get_boolean_ondemand("plugin:tc", var_name, enable_dropped); + if (config_exists("plugin:tc", var_name)) + d->enabled_dropped = (char)config_get_boolean_ondemand("plugin:tc", var_name, d->enabled_dropped); snprintfz(var_name, CONFIG_MAX_NAME, "tokens chart for %s", string2str(d->id)); - d->enabled_tokens = (char)config_get_boolean_ondemand("plugin:tc", var_name, enable_tokens); + if (config_exists("plugin:tc", var_name)) + d->enabled_tokens = (char)config_get_boolean_ondemand("plugin:tc", var_name, d->enabled_tokens); snprintfz(var_name, CONFIG_MAX_NAME, "ctokens chart for %s", string2str(d->id)); - d->enabled_ctokens = (char)config_get_boolean_ondemand("plugin:tc", var_name, enable_ctokens); + if (config_exists("plugin:tc", var_name)) + d->enabled_ctokens = (char)config_get_boolean_ondemand("plugin:tc", var_name, d->enabled_ctokens); snprintfz(var_name, CONFIG_MAX_NAME, "show all classes for %s", string2str(d->id)); - d->enabled_all_classes_qdiscs = (char)config_get_boolean_ondemand("plugin:tc", var_name, enabled_all_classes_qdiscs); + if (config_exists("plugin:tc", var_name)) + d->enabled_all_classes_qdiscs = + (char)config_get_boolean_ondemand("plugin:tc", var_name, d->enabled_all_classes_qdiscs); } // we only need to add leaf classes @@ -379,27 +392,10 @@ static inline void tc_device_commit(struct tc_device *d) { return; } - netdata_log_debug(D_TC_LOOP, "TC: evaluating TC device '%s'. enabled = %d/%d (bytes: %d/%d, packets: %d/%d, dropped: %d/%d, tokens: %d/%d, ctokens: %d/%d, all_classes_qdiscs: %d/%d), classes: (bytes = %llu, packets = %llu, dropped = %llu, tokens = %llu, ctokens = %llu).", - string2str(d->name?d->name:d->id), - d->enabled, enable_new_interfaces, - d->enabled_bytes, enable_bytes, - d->enabled_packets, enable_packets, - d->enabled_dropped, enable_dropped, - d->enabled_tokens, enable_tokens, - d->enabled_ctokens, enable_ctokens, - d->enabled_all_classes_qdiscs, enabled_all_classes_qdiscs, - bytes_sum, - packets_sum, - dropped_sum, - tokens_sum, - ctokens_sum - ); - // -------------------------------------------------------------------- // bytes - if(d->enabled_bytes == CONFIG_BOOLEAN_YES || (d->enabled_bytes == CONFIG_BOOLEAN_AUTO && - (bytes_sum || netdata_zero_metrics_enabled == CONFIG_BOOLEAN_YES))) { + if (d->enabled_bytes == CONFIG_BOOLEAN_YES || d->enabled_bytes == CONFIG_BOOLEAN_AUTO) { d->enabled_bytes = CONFIG_BOOLEAN_YES; if(unlikely(!d->st_bytes)) { @@ -453,9 +449,7 @@ static inline void tc_device_commit(struct tc_device *d) { // -------------------------------------------------------------------- // packets - if(d->enabled_packets == CONFIG_BOOLEAN_YES || (d->enabled_packets == CONFIG_BOOLEAN_AUTO && - (packets_sum || - netdata_zero_metrics_enabled == CONFIG_BOOLEAN_YES))) { + if (d->enabled_packets == CONFIG_BOOLEAN_YES || d->enabled_packets == CONFIG_BOOLEAN_AUTO) { d->enabled_packets = CONFIG_BOOLEAN_YES; if(unlikely(!d->st_packets)) { @@ -517,9 +511,7 @@ static inline void tc_device_commit(struct tc_device *d) { // -------------------------------------------------------------------- // dropped - if(d->enabled_dropped == CONFIG_BOOLEAN_YES || (d->enabled_dropped == CONFIG_BOOLEAN_AUTO && - (dropped_sum || - netdata_zero_metrics_enabled == CONFIG_BOOLEAN_YES))) { + if (d->enabled_dropped == CONFIG_BOOLEAN_YES || d->enabled_dropped == CONFIG_BOOLEAN_AUTO) { d->enabled_dropped = CONFIG_BOOLEAN_YES; if(unlikely(!d->st_dropped)) { @@ -581,9 +573,7 @@ static inline void tc_device_commit(struct tc_device *d) { // -------------------------------------------------------------------- // tokens - if(d->enabled_tokens == CONFIG_BOOLEAN_YES || (d->enabled_tokens == CONFIG_BOOLEAN_AUTO && - (tokens_sum || - netdata_zero_metrics_enabled == CONFIG_BOOLEAN_YES))) { + if (d->enabled_tokens == CONFIG_BOOLEAN_YES || d->enabled_tokens == CONFIG_BOOLEAN_AUTO) { d->enabled_tokens = CONFIG_BOOLEAN_YES; if(unlikely(!d->st_tokens)) { @@ -646,9 +636,7 @@ static inline void tc_device_commit(struct tc_device *d) { // -------------------------------------------------------------------- // ctokens - if(d->enabled_ctokens == CONFIG_BOOLEAN_YES || (d->enabled_ctokens == CONFIG_BOOLEAN_AUTO && - (ctokens_sum || - netdata_zero_metrics_enabled == CONFIG_BOOLEAN_YES))) { + if (d->enabled_ctokens == CONFIG_BOOLEAN_YES || d->enabled_ctokens == CONFIG_BOOLEAN_AUTO) { d->enabled_ctokens = CONFIG_BOOLEAN_YES; if(unlikely(!d->st_ctokens)) { @@ -848,12 +836,13 @@ static inline void tc_split_words(char *str, char **words, int max_words) { static pid_t tc_child_pid = 0; -static void tc_main_cleanup(void *ptr) { - worker_unregister(); +static void tc_main_cleanup(void *pptr) { + struct netdata_static_thread *static_thread = CLEANUP_FUNCTION_GET_PTR(pptr); + if(!static_thread) return; + worker_unregister(); tc_device_index_destroy(); - struct netdata_static_thread *static_thread = (struct netdata_static_thread *)ptr; static_thread->enabled = NETDATA_MAIN_THREAD_EXITING; collector_info("cleaning up..."); @@ -892,6 +881,8 @@ static void tc_main_cleanup(void *ptr) { #endif void *tc_main(void *ptr) { + CLEANUP_FUNCTION_REGISTER(tc_main_cleanup) cleanup_ptr = ptr; + worker_register("TC"); worker_register_job_name(WORKER_TC_CLASS, "class"); worker_register_job_name(WORKER_TC_BEGIN, "begin"); @@ -909,7 +900,6 @@ void *tc_main(void *ptr) { worker_register_job_custom_metric(WORKER_TC_CLASSES, "number of classes", "classes", WORKER_METRIC_ABSOLUTE); tc_device_index_init(); - netdata_thread_cleanup_push(tc_main_cleanup, ptr); char command[FILENAME_MAX + 1]; char *words[PLUGINSD_MAX_WORDS] = { NULL }; @@ -1036,10 +1026,8 @@ void *tc_main(void *ptr) { // netdata_log_debug(D_TC_LOOP, "END line"); if(likely(device)) { - netdata_thread_disable_cancelability(); tc_device_commit(device); // tc_device_free(device); - netdata_thread_enable_cancelability(); } device = NULL; @@ -1177,7 +1165,5 @@ void *tc_main(void *ptr) { } cleanup: ; // added semi-colon to prevent older gcc error: label at end of compound statement - worker_unregister(); - netdata_thread_cleanup_pop(1); return NULL; } |