From da4ca6597eb621f8c912c24f90d99e9495884f26 Mon Sep 17 00:00:00 2001 From: fengzero Date: Fri, 28 Oct 2022 09:14:59 +0000 Subject: [PATCH] api: get tags filter by tag name --- include/neuron/adapter.h | 1 + plugins/restful/datatag_handle.c | 17 +++++++++++------ src/adapter/adapter.c | 4 ++-- src/adapter/driver/driver.c | 21 +++++++++++++++++++++ src/adapter/driver/driver_internal.h | 3 +++ src/base/group.c | 16 ++++++++++++++++ src/base/group.h | 1 + 7 files changed, 55 insertions(+), 8 deletions(-) diff --git a/include/neuron/adapter.h b/include/neuron/adapter.h index 0bf16a41..f51a95d1 100644 --- a/include/neuron/adapter.h +++ b/include/neuron/adapter.h @@ -289,6 +289,7 @@ typedef struct neu_req_del_tag { typedef struct neu_req_get_tag { char driver[NEU_NODE_NAME_LEN]; char group[NEU_GROUP_NAME_LEN]; + char name[NEU_TAG_NAME_LEN]; } neu_req_get_tag_t; typedef struct neu_resp_get_tag { diff --git a/plugins/restful/datatag_handle.c b/plugins/restful/datatag_handle.c index 242ccd4c..7d7227ee 100644 --- a/plugins/restful/datatag_handle.c +++ b/plugins/restful/datatag_handle.c @@ -161,12 +161,13 @@ void handle_update_tags_resp(nng_aio *aio, neu_resp_update_tag_t *resp) void handle_get_tags(nng_aio *aio) { - neu_plugin_t * plugin = neu_rest_get_plugin(); - char node[NEU_NODE_NAME_LEN] = { 0 }; - char group[NEU_GROUP_NAME_LEN] = { 0 }; - int ret = 0; - neu_req_get_tag_t cmd = { 0 }; - neu_reqresp_head_t header = { + neu_plugin_t * plugin = neu_rest_get_plugin(); + char node[NEU_NODE_NAME_LEN] = { 0 }; + char group[NEU_GROUP_NAME_LEN] = { 0 }; + char tag_name[NEU_TAG_NAME_LEN] = { 0 }; + int ret = 0; + neu_req_get_tag_t cmd = { 0 }; + neu_reqresp_head_t header = { .ctx = aio, .type = NEU_REQ_GET_TAG, }; @@ -186,6 +187,10 @@ void handle_get_tags(nng_aio *aio) return; } + if (http_get_param_str(aio, "name", tag_name, sizeof(tag_name)) >= 0) { + strcpy(cmd.name, tag_name); + } + strcpy(cmd.driver, node); strcpy(cmd.group, group); diff --git a/src/adapter/adapter.c b/src/adapter/adapter.c index b7902324..a630ad5a 100644 --- a/src/adapter/adapter.c +++ b/src/adapter/adapter.c @@ -501,8 +501,8 @@ static int adapter_loop(enum neu_event_io_type type, int fd, void *usr_data) if (adapter->module->type != NEU_NA_TYPE_DRIVER) { error.error = NEU_ERR_GROUP_NOT_ALLOW; } else { - error.error = neu_adapter_driver_get_tag( - (neu_adapter_driver_t *) adapter, cmd->group, &tags); + error.error = neu_adapter_driver_query_tag( + (neu_adapter_driver_t *) adapter, cmd->group, cmd->name, &tags); } neu_msg_exchange(header); diff --git a/src/adapter/driver/driver.c b/src/adapter/driver/driver.c index 9d8eb1bc..5196d80b 100644 --- a/src/adapter/driver/driver.c +++ b/src/adapter/driver/driver.c @@ -648,6 +648,27 @@ int neu_adapter_driver_get_tag(neu_adapter_driver_t *driver, const char *group, return ret; } +int neu_adapter_driver_query_tag(neu_adapter_driver_t *driver, + const char *group, const char *name, + UT_array **tags) +{ + int ret = NEU_ERR_SUCCESS; + group_t *find = NULL; + + HASH_FIND_STR(driver->groups, group, find); + if (find != NULL) { + if (strlen(name) > 0) { + *tags = neu_group_query_tag(find->group, name); + } else { + *tags = neu_group_get_tag(find->group); + } + } else { + ret = NEU_ERR_GROUP_NOT_EXIST; + } + + return ret; +} + void neu_adapter_driver_get_value_tag(neu_adapter_driver_t *driver, const char *group, UT_array **tags) { diff --git a/src/adapter/driver/driver_internal.h b/src/adapter/driver/driver_internal.h index 64520c80..c9c49c06 100644 --- a/src/adapter/driver/driver_internal.h +++ b/src/adapter/driver/driver_internal.h @@ -54,6 +54,9 @@ int neu_adapter_driver_update_tag(neu_adapter_driver_t *driver, const char *group, neu_datatag_t *tag); int neu_adapter_driver_get_tag(neu_adapter_driver_t *driver, const char *group, UT_array **tags); +int neu_adapter_driver_query_tag(neu_adapter_driver_t *driver, + const char *group, const char *name, + UT_array **tags); void neu_adapter_driver_get_value_tag(neu_adapter_driver_t *driver, const char *group, UT_array **tags); UT_array *neu_adapter_driver_get_read_tag(neu_adapter_driver_t *driver, diff --git a/src/base/group.c b/src/base/group.c index 019a03de..03935ff6 100644 --- a/src/base/group.c +++ b/src/base/group.c @@ -193,6 +193,22 @@ UT_array *neu_group_get_tag(neu_group_t *group) return array; } +UT_array *neu_group_query_tag(neu_group_t *group, const char *name) +{ + tag_elem_t *el = NULL, *tmp = NULL; + UT_array * array = NULL; + + utarray_new(array, neu_tag_get_icd()); + HASH_ITER(hh, group->tags, el, tmp) + { + if (strstr(el->tag->name, name) != NULL) { + utarray_push_back(array, el->tag); + } + } + + return array; +} + UT_array *neu_group_get_read_tag(neu_group_t *group) { UT_array *array = NULL; diff --git a/src/base/group.h b/src/base/group.h index b9daaad8..ec4d569e 100644 --- a/src/base/group.h +++ b/src/base/group.h @@ -38,6 +38,7 @@ int neu_group_add_tag(neu_group_t *group, neu_datatag_t *tag); int neu_group_update_tag(neu_group_t *group, neu_datatag_t *tag); int neu_group_del_tag(neu_group_t *group, const char *tag_name); UT_array * neu_group_get_tag(neu_group_t *group); +UT_array * neu_group_query_tag(neu_group_t *group, const char *name); UT_array * neu_group_get_read_tag(neu_group_t *group); uint16_t neu_group_tag_size(neu_group_t *group); neu_datatag_t *neu_group_find_tag(neu_group_t *group, const char *tag);