diff --git a/include/neuron/plugin.h b/include/neuron/plugin.h index f94d6a5b..5fd28be3 100644 --- a/include/neuron/plugin.h +++ b/include/neuron/plugin.h @@ -69,6 +69,7 @@ struct neu_plugin_group { void * user_data; neu_plugin_group_free group_free; + uint32_t interval; }; typedef int (*neu_plugin_tag_validator_t)(const neu_datatag_t *tag); diff --git a/src/adapter/driver/driver.c b/src/adapter/driver/driver.c index 17e48fb5..3b9bea7b 100644 --- a/src/adapter/driver/driver.c +++ b/src/adapter/driver/driver.c @@ -940,6 +940,7 @@ int neu_adapter_driver_add_group(neu_adapter_driver_t *driver, const char *name, find->name = strdup(name); find->group = neu_group_new(name, interval); find->grp.group_name = strdup(name); + find->grp.interval = interval; neu_group_split_static_tags(find->group, &find->static_tags, &find->grp.tags); @@ -989,6 +990,8 @@ int neu_adapter_driver_update_group(neu_adapter_driver_t *driver, return NEU_ERR_GROUP_EXIST; } } + } else if (neu_group_get_interval(find->group) == interval) { + return 0; // no change } // stop the timer first to avoid race condition @@ -1014,7 +1017,6 @@ int neu_adapter_driver_update_group(neu_adapter_driver_t *driver, find->grp.group_name = new_name_cp2; neu_adapter_metric_update_group_name((neu_adapter_t *) driver, name, new_name); - find->timestamp = global_timestamp; // trigger group_change HASH_ADD_STR(driver->groups, name, find); } else { free(new_name_cp1); @@ -1023,6 +1025,8 @@ int neu_adapter_driver_update_group(neu_adapter_driver_t *driver, } } + find->timestamp = global_timestamp; // trigger group_change + find->grp.interval = interval; neu_group_set_interval(find->group, interval); // restore the timers @@ -1593,6 +1597,7 @@ static void group_change(void *arg, int64_t timestamp, UT_array *static_tags, neu_plugin_group_t grp = { .group_name = strdup(group->name), + .interval = neu_group_get_interval(group->group), .tags = NULL, .group_free = NULL, .user_data = NULL,