From 1f3bc7af376d105b1bfc4703456e8ccc6df648b9 Mon Sep 17 00:00:00 2001 From: fengzero Date: Mon, 24 Oct 2022 06:33:14 +0000 Subject: [PATCH 1/3] api: get nodes filter by plugin/node --- include/neuron/adapter.h | 2 ++ plugins/restful/adapter_handle.c | 14 +++++++++++++- src/core/manager.c | 7 ++++--- src/core/manager_internal.c | 5 +++-- src/core/manager_internal.h | 3 ++- src/core/node_manager.c | 32 ++++++++++++++++++++++++++++++++ src/core/node_manager.h | 2 ++ 7 files changed, 58 insertions(+), 7 deletions(-) diff --git a/include/neuron/adapter.h b/include/neuron/adapter.h index 82b9de3f..488d29bf 100644 --- a/include/neuron/adapter.h +++ b/include/neuron/adapter.h @@ -214,6 +214,8 @@ typedef struct neu_req_del_node { typedef struct neu_req_get_node { neu_node_type_e type; + char plugin[NEU_PLUGIN_NAME_LEN]; + char node[NEU_NODE_NAME_LEN]; } neu_req_get_node_t; typedef struct neu_resp_node_info { diff --git a/plugins/restful/adapter_handle.c b/plugins/restful/adapter_handle.c index 394a9d4a..b78760d0 100644 --- a/plugins/restful/adapter_handle.c +++ b/plugins/restful/adapter_handle.c @@ -86,7 +86,10 @@ void handle_del_adapter(nng_aio *aio) void handle_get_adapter(nng_aio *aio) { - int ret = 0; + int ret = 0; + char plugin_name[NEU_PLUGIN_NAME_LEN] = { 0 }; + char node_name[NEU_NODE_NAME_LEN] = { 0 }; + neu_plugin_t * plugin = neu_rest_get_plugin(); neu_node_type_e node_type = { 0 }; neu_req_get_node_t cmd = { 0 }; @@ -104,6 +107,15 @@ void handle_get_adapter(nng_aio *aio) return; } + if (http_get_param_str(aio, "plugin", plugin_name, sizeof(plugin_name)) == + 0) { + strcpy(cmd.plugin, plugin_name); + } + + if (http_get_param_str(aio, "node", node_name, sizeof(node_name)) == 0) { + strcpy(cmd.node, node_name); + } + cmd.type = node_type; ret = neu_plugin_op(plugin, header, &cmd); if (ret != 0) { diff --git a/src/core/manager.c b/src/core/manager.c index 900c911d..44a5c54b 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -348,9 +348,10 @@ static int manager_loop(enum neu_event_io_type type, int fd, void *usr_data) break; } case NEU_REQ_GET_NODE: { - neu_req_get_node_t *cmd = (neu_req_get_node_t *) &header[1]; - UT_array * nodes = neu_manager_get_nodes(manager, cmd->type); - neu_resp_get_node_t resp = { .nodes = nodes }; + neu_req_get_node_t *cmd = (neu_req_get_node_t *) &header[1]; + UT_array * nodes = + neu_manager_get_nodes(manager, cmd->type, cmd->plugin, cmd->node); + neu_resp_get_node_t resp = { .nodes = nodes }; header->type = NEU_RESP_GET_NODE; strcpy(header->receiver, header->sender); diff --git a/src/core/manager_internal.c b/src/core/manager_internal.c index 8e0b69b3..ccd43e88 100644 --- a/src/core/manager_internal.c +++ b/src/core/manager_internal.c @@ -116,9 +116,10 @@ int neu_manager_del_node(neu_manager_t *manager, const char *node_name) return NEU_ERR_SUCCESS; } -UT_array *neu_manager_get_nodes(neu_manager_t *manager, neu_node_type_e type) +UT_array *neu_manager_get_nodes(neu_manager_t *manager, neu_node_type_e type, + const char *plugin, const char *node) { - return neu_node_manager_get(manager->node_manager, type); + return neu_node_manager_filter(manager->node_manager, type, plugin, node); } UT_array *neu_manager_get_driver_group(neu_manager_t *manager) diff --git a/src/core/manager_internal.h b/src/core/manager_internal.h index 29593b74..411c6329 100644 --- a/src/core/manager_internal.h +++ b/src/core/manager_internal.h @@ -50,7 +50,8 @@ UT_array *neu_manager_get_plugins(neu_manager_t *manager); int neu_manager_add_node(neu_manager_t *manager, const char *node_name, const char *plugin_name, bool start); 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); +UT_array *neu_manager_get_nodes(neu_manager_t *manager, neu_node_type_e type, + const char *plugin, const char *node); UT_array *neu_manager_get_driver_group(neu_manager_t *manager); diff --git a/src/core/node_manager.c b/src/core/node_manager.c index 86385932..137b6136 100644 --- a/src/core/node_manager.c +++ b/src/core/node_manager.c @@ -170,6 +170,38 @@ UT_array *neu_node_manager_get(neu_node_manager_t *mgr, neu_node_type_e type) return array; } +UT_array *neu_node_manager_filter(neu_node_manager_t *mgr, neu_node_type_e type, + const char *plugin, const char *node) +{ + UT_array * array = NULL; + UT_icd icd = { sizeof(neu_resp_node_info_t), NULL, NULL, NULL }; + node_entity_t *el = NULL, *tmp = NULL; + + utarray_new(array, &icd); + + HASH_ITER(hh, mgr->nodes, el, tmp) + { + if (!el->is_static && el->display) { + if (el->adapter->module->type == type) { + if (strlen(plugin) > 0 && + strcmp(el->adapter->module->module_name, plugin) != 0) { + continue; + } + if (strlen(node) > 0 && + strstr(el->adapter->name, node) == NULL) { + continue; + } + neu_resp_node_info_t info = { 0 }; + strcpy(info.node, el->adapter->name); + strcpy(info.plugin, el->adapter->module->module_name); + utarray_push_back(array, &info); + } + } + } + + return array; +} + UT_array *neu_node_manager_get_all(neu_node_manager_t *mgr) { UT_array * array = NULL; diff --git a/src/core/node_manager.h b/src/core/node_manager.h index b24ea7fc..6f00a183 100644 --- a/src/core/node_manager.h +++ b/src/core/node_manager.h @@ -45,6 +45,8 @@ uint16_t neu_node_manager_size(neu_node_manager_t *mgr); // neu_resp_node_info array UT_array *neu_node_manager_get(neu_node_manager_t *mgr, neu_node_type_e type); +UT_array *neu_node_manager_filter(neu_node_manager_t *mgr, neu_node_type_e type, + const char *plugin, const char *node); UT_array *neu_node_manager_get_all(neu_node_manager_t *mgr); // neu_adapter_t array From 8616fdab97dad90619adcf21a11df4fa3680b9a6 Mon Sep 17 00:00:00 2001 From: fengzero Date: Mon, 24 Oct 2022 08:18:40 +0000 Subject: [PATCH 2/3] fix(connection): recv disconnect --- src/connection/connection.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/connection/connection.c b/src/connection/connection.c index b87d3238..c6a7cd91 100644 --- a/src/connection/connection.c +++ b/src/connection/connection.c @@ -350,7 +350,7 @@ ssize_t neu_conn_recv(neu_conn_t *conn, uint8_t *buf, ssize_t len) conn->fd, len, ret, strerror(errno), errno); } - if (errno == EPIPE || ret <= 0) { + if (errno == EPIPE || ret == -1) { conn_disconnect(conn); } From 1d025d63083a1ff687aff491dafe771c21b41731 Mon Sep 17 00:00:00 2001 From: fengzero Date: Tue, 25 Oct 2022 02:32:55 +0000 Subject: [PATCH 3/3] fix /api/v2/password cros --- plugins/restful/handle.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plugins/restful/handle.c b/plugins/restful/handle.c index f19f7b2d..f6fd247d 100644 --- a/plugins/restful/handle.c +++ b/plugins/restful/handle.c @@ -101,6 +101,9 @@ struct neu_rest_handler cors_handler[] = { { .url = "/api/v2/version", }, + { + .url = "/api/v2/password", + }, }; struct neu_rest_handler api_handlers[] = {