From f6921ee2fbdd403098a95df7a56586c143c66e11 Mon Sep 17 00:00:00 2001 From: fengzero Date: Mon, 19 Jan 2026 06:07:14 +0000 Subject: [PATCH] get nodes by tags --- include/neuron/msg.h | 1 + plugins/restful/adapter_handle.c | 5 +++++ src/core/manager.c | 6 +++--- src/core/manager_internal.c | 5 +++-- src/core/manager_internal.h | 4 ++-- src/core/node_manager.c | 8 +++++++- src/core/node_manager.h | 2 +- 7 files changed, 22 insertions(+), 9 deletions(-) diff --git a/include/neuron/msg.h b/include/neuron/msg.h index eb106647..d150c9f9 100644 --- a/include/neuron/msg.h +++ b/include/neuron/msg.h @@ -560,6 +560,7 @@ typedef struct neu_req_get_node { int link; bool s_delay; char q_group_name[NEU_GROUP_NAME_LEN]; + char q_tags[NEU_NODE_TAGS_LEN]; } query; } neu_req_get_node_t; diff --git a/plugins/restful/adapter_handle.c b/plugins/restful/adapter_handle.c index 69e644ea..8506e6b0 100644 --- a/plugins/restful/adapter_handle.c +++ b/plugins/restful/adapter_handle.c @@ -180,6 +180,7 @@ void handle_get_adapter(nng_aio *aio) char plugin_name[NEU_PLUGIN_NAME_LEN] = { 0 }; char node_name[NEU_NODE_NAME_LEN] = { 0 }; char group_name[NEU_GROUP_NAME_LEN] = { 0 }; + char tags[NEU_NODE_TAGS_LEN] = { 0 }; neu_plugin_t * plugin = neu_rest_get_plugin(); neu_node_type_e node_type = { 0 }; @@ -213,6 +214,10 @@ void handle_get_adapter(nng_aio *aio) strcpy(cmd.query.q_group_name, group_name); } + if (neu_http_get_param_str(aio, "tags", tags, sizeof(tags)) > 0) { + strcpy(cmd.query.q_tags, tags); + } + uintmax_t query_state = 0; if (neu_http_get_param_uintmax(aio, "state", &query_state) == 0) { if (query_state == 1 || query_state == 2 || query_state == 3 || diff --git a/src/core/manager.c b/src/core/manager.c index 7c937604..90699ec2 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -470,7 +470,7 @@ static int manager_loop(enum neu_event_io_type type, int fd, void *usr_data) UT_array *nodes = neu_manager_get_nodes( manager, NEU_NA_TYPE_DRIVER | NEU_NA_TYPE_APP, cmd->plugin, "", - false, false, 0, false, 0, ""); + false, false, 0, false, 0, "", ""); if (nodes != NULL) { if (utarray_len(nodes) > 0) { @@ -653,7 +653,7 @@ static int manager_loop(enum neu_event_io_type type, int fd, void *usr_data) UT_array *nodes = neu_manager_get_nodes( manager, NEU_NA_TYPE_DRIVER | NEU_NA_TYPE_APP, module_name, "", - false, false, 0, false, 0, ""); + false, false, 0, false, 0, "", ""); if (nodes != NULL) { if (utarray_len(nodes) > 0) { @@ -909,7 +909,7 @@ static int manager_loop(enum neu_event_io_type type, int fd, void *usr_data) UT_array * nodes = neu_manager_get_nodes( manager, cmd->type, cmd->plugin, cmd->node, cmd->query.s_delay, cmd->query.q_state, cmd->query.state, cmd->query.q_link, - cmd->query.link, cmd->query.q_group_name); + cmd->query.link, cmd->query.q_group_name, cmd->query.q_tags); neu_resp_get_node_t resp = { .nodes = nodes }; header->type = NEU_RESP_GET_NODE; diff --git a/src/core/manager_internal.c b/src/core/manager_internal.c index babbd413..d1d4f17f 100644 --- a/src/core/manager_internal.c +++ b/src/core/manager_internal.c @@ -117,11 +117,12 @@ int neu_manager_del_node(neu_manager_t *manager, const char *node_name) UT_array *neu_manager_get_nodes(neu_manager_t *manager, int type, const char *plugin, const char *node, bool sort_delay, bool q_state, int state, - bool q_link, int link, const char *q_group_name) + bool q_link, int link, const char *q_group_name, + const char *q_tags) { return neu_node_manager_filter(manager->node_manager, type, plugin, node, sort_delay, q_state, state, q_link, link, - q_group_name); + q_group_name, q_tags); } int neu_manager_update_node_name(neu_manager_t *manager, const char *node, diff --git a/src/core/manager_internal.h b/src/core/manager_internal.h index 436938aa..78cb20ea 100644 --- a/src/core/manager_internal.h +++ b/src/core/manager_internal.h @@ -59,8 +59,8 @@ int neu_manager_del_node(neu_manager_t *manager, const char *node_name); UT_array *neu_manager_get_nodes(neu_manager_t *manager, int type, const char *plugin, const char *node, bool sort_delay, bool q_state, int state, - bool q_link, int link, - const char *q_group_name); + bool q_link, int link, const char *q_group_name, + const char *q_tags); int neu_manager_update_node_name(neu_manager_t *manager, const char *node, const char *new_name); int neu_manager_update_group_name(neu_manager_t *manager, const char *driver, diff --git a/src/core/node_manager.c b/src/core/node_manager.c index 4fcb8dd6..c2a0eb68 100644 --- a/src/core/node_manager.c +++ b/src/core/node_manager.c @@ -254,7 +254,7 @@ UT_array *neu_node_manager_filter(neu_node_manager_t *mgr, int type, const char *plugin, const char *node, bool sort_delay, bool q_state, int state, bool q_link, int link, - const char *q_group_name) + const char *q_group_name, const char *q_tags) { UT_array * array = NULL; UT_icd icd = { sizeof(neu_resp_node_info_t), NULL, NULL, NULL }; @@ -303,6 +303,12 @@ UT_array *neu_node_manager_filter(neu_node_manager_t *mgr, int type, } } + if (strlen(q_tags) > 0) { + if (el->tags == NULL || strstr(el->tags, q_tags) == NULL) { + continue; + } + } + neu_resp_node_info_t info = { 0 }; strcpy(info.node, el->adapter->name); strcpy(info.tags, el->tags ? el->tags : ""); diff --git a/src/core/node_manager.h b/src/core/node_manager.h index 7ac2a285..84dcb8b3 100644 --- a/src/core/node_manager.h +++ b/src/core/node_manager.h @@ -55,7 +55,7 @@ UT_array *neu_node_manager_filter(neu_node_manager_t *mgr, int type, const char *plugin, const char *node, bool sort_delay, bool q_state, int state, bool q_link, int link, - const char *q_group_name); + const char *q_group_name, const char *q_tags); UT_array *neu_node_manager_get_all(neu_node_manager_t *mgr); // neu_adapter_t array