From 6ea5ccc193e33ebcdb7f392d8a7a6ce0cf9ccdbe Mon Sep 17 00:00:00 2001 From: eeff <33566201+eeff@users.noreply.github.com> Date: Mon, 15 May 2023 17:31:35 +0800 Subject: [PATCH] feat(core): load template data --- src/core/manager.c | 4 +++ src/core/storage.c | 67 +++++++++++++++++++++++++++++++++++++++++++++- src/core/storage.h | 1 + 3 files changed, 71 insertions(+), 1 deletion(-) diff --git a/src/core/manager.c b/src/core/manager.c index abffc4c6..e365ff83 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -121,6 +121,10 @@ neu_manager_t *neu_manager_create() } utarray_free(single_plugins); + if (manager_load_template(manager) != 0) { + nlog_warn("load template error"); + } + manager_load_node(manager); while (neu_node_manager_exist_uninit(manager->node_manager)) { usleep(1000 * 100); diff --git a/src/core/storage.c b/src/core/storage.c index d72b5dbf..03fbbcbf 100644 --- a/src/core/storage.c +++ b/src/core/storage.c @@ -390,4 +390,69 @@ int manager_load_subscribe(neu_manager_t *manager) utarray_free(nodes); return 0; -} \ No newline at end of file +} + +static int load_template_group_and_tags(neu_manager_t *manager, + const char * tmpl_name) +{ + int rv = 0; + UT_array *group_infos = NULL; + + rv = neu_persister_load_template_groups(tmpl_name, &group_infos); + if (0 != rv) { + nlog_warn("load template %s group fail", tmpl_name); + return rv; + } + + utarray_foreach(group_infos, neu_persist_group_info_t *, p) + { + neu_manager_add_template_group(manager, tmpl_name, p->name, + p->interval); + + UT_array *tags = NULL; + rv = neu_persister_load_template_tags(tmpl_name, p->name, &tags); + if (0 != rv) { + nlog_warn("load template:%s group:%s tags fail", tmpl_name, + p->name); + continue; + } + + neu_manager_add_template_tags(manager, tmpl_name, p->name, + utarray_len(tags), utarray_front(tags), + NULL); + + utarray_free(tags); + } + + utarray_free(group_infos); + return rv; +} + +int manager_load_template(neu_manager_t *manager) +{ + int rv = 0; + UT_array *tmpl_infos = NULL; + + rv = neu_persister_load_templates(&tmpl_infos); + if (0 != rv) { + nlog_error("failed to load template infos"); + return -1; + } + + utarray_foreach(tmpl_infos, neu_persist_template_info_t *, tmpl_info) + { + rv = neu_manager_add_template(manager, tmpl_info->name, + tmpl_info->plugin_name, 0, NULL); + const char *ok_or_err = (0 == rv) ? "success" : "fail"; + nlog_info("load template name:%s plugin:%s %s", tmpl_info->name, + tmpl_info->plugin_name, ok_or_err); + if (0 != rv) { + continue; // ignore error, load as much data as possible + } + + load_template_group_and_tags(manager, tmpl_info->name); + } + + utarray_free(tmpl_infos); + return rv; +} diff --git a/src/core/storage.h b/src/core/storage.h index 18922253..aa1efab0 100644 --- a/src/core/storage.h +++ b/src/core/storage.h @@ -62,5 +62,6 @@ void manager_storage_del_template_tags(const char *tmpl, const char *group, int manager_load_plugin(neu_manager_t *manager); int manager_load_node(neu_manager_t *manager); int manager_load_subscribe(neu_manager_t *manager); +int manager_load_template(neu_manager_t *manager); #endif