From 7013d57914fc5d032b78fb8f2af529f500b60c05 Mon Sep 17 00:00:00 2001 From: eeff <33566201+eeff@users.noreply.github.com> Date: Thu, 16 Mar 2023 18:20:56 +0800 Subject: [PATCH] feat(core): fulfill add template request --- src/core/manager.c | 15 +++++++++++++++ src/core/manager_internal.c | 33 +++++++++++++++++++++++++++++++++ src/core/manager_internal.h | 3 +++ 3 files changed, 51 insertions(+) diff --git a/src/core/manager.c b/src/core/manager.c index 2f7bd1df..d9c11840 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -311,6 +311,21 @@ static int manager_loop(enum neu_event_io_type type, int fd, void *usr_data) reply(manager, header, &resp); break; } + case NEU_REQ_ADD_TEMPLATE: { + neu_resp_error_t e = { 0 }; + neu_req_add_template_t *cmd = (neu_req_add_template_t *) &header[1]; + + e.error = neu_manager_add_template(manager, cmd); + if (NEU_ERR_SUCCESS == e.error) { + // TODO: storage + } + + neu_reqresp_template_fini(cmd); + header->type = NEU_RESP_ERROR; + strcpy(header->receiver, header->sender); + reply(manager, header, &e); + break; + } case NEU_REQ_ADD_NODE: { neu_req_add_node_t *cmd = (neu_req_add_node_t *) &header[1]; int error = diff --git a/src/core/manager_internal.c b/src/core/manager_internal.c index a5160725..6a386b2f 100644 --- a/src/core/manager_internal.c +++ b/src/core/manager_internal.c @@ -25,6 +25,7 @@ #include "adapter/driver/driver_internal.h" #include "manager_internal.h" +#include "template_manager.h" int neu_manager_add_plugin(neu_manager_t *manager, const char *library) { @@ -102,6 +103,38 @@ UT_array *neu_manager_get_nodes(neu_manager_t *manager, neu_node_type_e type, return neu_node_manager_filter(manager->node_manager, type, plugin, node); } +int neu_manager_add_template(neu_manager_t * manager, + neu_req_add_template_t *req) +{ + int rv = 0; + neu_template_t *tmpl = neu_template_new(req->name, req->plugin); + if (NULL == tmpl) { + return NEU_ERR_EINTERNAL; + } + + for (int i = 0; i < req->n_group; ++i) { + neu_reqresp_template_group_t *grp = &req->groups[i]; + if (0 != + (rv = neu_template_add_group(tmpl, grp->name, grp->interval))) { + goto error; + } + + for (int j = 0; j < grp->n_tag; ++j) { + if (0 != + (rv = neu_template_add_tag(tmpl, grp->name, &grp->tags[j]))) { + goto error; + } + } + } + + rv = neu_template_manager_add(manager->template_manager, tmpl); + return rv; + +error: + neu_template_free(tmpl); + return rv; +} + UT_array *neu_manager_get_driver_group(neu_manager_t *manager) { UT_array *drivers = diff --git a/src/core/manager_internal.h b/src/core/manager_internal.h index 5ecff095..266132c3 100644 --- a/src/core/manager_internal.h +++ b/src/core/manager_internal.h @@ -57,6 +57,9 @@ int neu_manager_del_node(neu_manager_t *manager, const char *node_name); UT_array *neu_manager_get_nodes(neu_manager_t *manager, neu_node_type_e type, const char *plugin, const char *node); +int neu_manager_add_template(neu_manager_t * manager, + neu_req_add_template_t *req); + UT_array *neu_manager_get_driver_group(neu_manager_t *manager); int neu_manager_subscribe(neu_manager_t *manager, const char *app,