mirror of
https://github.com/emqx/neuron.git
synced 2026-10-26 03:40:01 +08:00
api(tag): add description field in add/update/get
This commit is contained in:
@@ -11,6 +11,7 @@ ${tag2} {"name": "tag2", "address": "1!00001", "attribute": ${TAG_AT
|
||||
${tag3} {"name": "tag3", "address": "1!00001", "attribute": ${TAG_ATTRIBUTE_RW}, "type": ${TAG_TYPE_UINT16}}
|
||||
${tag4} {"name": "tag4", "address": "1!00031", "attribute": ${TAG_ATTRIBUTE_RW}, "type": ${TAG_TYPE_BIT}}
|
||||
${tag1update} {"name": "tag1", "address": "1!400002", "attribute": ${TAG_ATTRIBUTE_RW}, "type": ${TAG_TYPE_INT32}}
|
||||
${tag_desc} {"name": "tag_desc", "description": "description info", "address": "1!400001", "attribute": ${TAG_ATTRIBUTE_READ}, "type": ${TAG_TYPE_INT16}}
|
||||
|
||||
*** Test Cases ***
|
||||
Add tags to non-existent node, it should return failure
|
||||
@@ -116,3 +117,22 @@ Delete tags, it should return success
|
||||
Check Response Status ${res} 200
|
||||
${len} = Get Length ${res}[tags]
|
||||
Should Be Equal As Integers ${len} 0
|
||||
|
||||
Add a tag with description, it should return success
|
||||
${res}= Add Tags modbus-node group ${tag_desc}
|
||||
|
||||
Check Response Status ${res} 200
|
||||
Check Error Code ${res} ${NEU_ERR_SUCCESS}
|
||||
Should Be Equal As Integers ${res}[index] 1
|
||||
|
||||
${res}= Get Tags modbus-node group
|
||||
|
||||
Check Response Status ${res} 200
|
||||
${len} = Get Length ${res}[tags]
|
||||
Should Be Equal As Integers ${len} 1
|
||||
|
||||
Should Be Equal As Strings ${res}[tags][0][name] tag_desc
|
||||
Should Be Equal As Strings ${res}[tags][0][address] 1!400001
|
||||
Should Be Equal As Strings ${res}[tags][0][description] description info
|
||||
Should Be Equal As Strings ${res}[tags][0][attribute] ${TAG_ATTRIBUTE_READ}
|
||||
Should Be Equal As Strings ${res}[tags][0][type] ${TAG_TYPE_INT16}
|
||||
|
||||
@@ -50,7 +50,13 @@ typedef union neu_json_value {
|
||||
void * val_object;
|
||||
} neu_json_value_u;
|
||||
|
||||
typedef enum neu_json_attribute {
|
||||
NEU_JSON_ATTRIBUTE_REQUIRED,
|
||||
NEU_JSON_ATTRIBUTE_OPTIONAL,
|
||||
} neu_json_attribute_t;
|
||||
|
||||
typedef struct neu_json_elem {
|
||||
neu_json_attribute_t attribute;
|
||||
char * name;
|
||||
enum neu_json_type t;
|
||||
union neu_json_value v;
|
||||
|
||||
@@ -34,6 +34,7 @@ extern "C" {
|
||||
typedef struct {
|
||||
char * address;
|
||||
char * name;
|
||||
char * description;
|
||||
int64_t type;
|
||||
int64_t attribute;
|
||||
} neu_json_add_tags_req_tag_t;
|
||||
@@ -70,6 +71,7 @@ void neu_json_decode_del_tags_req_free(neu_json_del_tags_req_t *req);
|
||||
typedef struct {
|
||||
char * address;
|
||||
char * name;
|
||||
char * description;
|
||||
int64_t type;
|
||||
int64_t attribute;
|
||||
} neu_json_get_tags_resp_tag_t;
|
||||
@@ -84,6 +86,7 @@ int neu_json_encode_get_tags_resp(void *json_object, void *param);
|
||||
typedef struct {
|
||||
char * name;
|
||||
char * address;
|
||||
char * description;
|
||||
int64_t type;
|
||||
int64_t attribute;
|
||||
} neu_json_update_tags_req_tag_t;
|
||||
|
||||
@@ -27,9 +27,6 @@ config_ **/
|
||||
|
||||
#define NEU_TAG_ADDRESS_SIZE 128
|
||||
|
||||
typedef uint32_t neu_datatag_id_t;
|
||||
typedef char * neu_addr_str_t;
|
||||
typedef char * neu_tag_name;
|
||||
typedef enum {
|
||||
NEU_DTYPE_VOID, ///< like Haskell, a no value type
|
||||
NEU_DTYPE_UNIT, ///< like Haskell, a () type, same as void in C
|
||||
@@ -120,11 +117,11 @@ typedef enum {
|
||||
} neu_attribute_e;
|
||||
|
||||
typedef struct {
|
||||
neu_datatag_id_t id;
|
||||
neu_attribute_e attribute;
|
||||
neu_dtype_e type;
|
||||
neu_addr_str_t addr_str;
|
||||
neu_tag_name name;
|
||||
char * name;
|
||||
char * addr_str;
|
||||
char * description;
|
||||
neu_attribute_e attribute;
|
||||
neu_dtype_e type;
|
||||
} neu_datatag_t;
|
||||
|
||||
UT_icd *neu_tag_get_icd();
|
||||
|
||||
@@ -52,6 +52,11 @@ void handle_add_tags(nng_aio *aio)
|
||||
cmd.tags[i].type = req->tags[i].type;
|
||||
cmd.tags[i].addr_str = strdup(req->tags[i].address);
|
||||
cmd.tags[i].name = strdup(req->tags[i].name);
|
||||
if (req->tags[i].description != NULL) {
|
||||
cmd.tags[i].description = strdup(req->tags[i].description);
|
||||
} else {
|
||||
cmd.tags[i].description = strdup("");
|
||||
}
|
||||
}
|
||||
|
||||
ret = neu_plugin_op(plugin, header, &cmd);
|
||||
@@ -129,6 +134,11 @@ void handle_update_tags(nng_aio *aio)
|
||||
cmd.tags[i].type = req->tags[i].type;
|
||||
cmd.tags[i].addr_str = strdup(req->tags[i].address);
|
||||
cmd.tags[i].name = strdup(req->tags[i].name);
|
||||
if (req->tags[i].description != NULL) {
|
||||
cmd.tags[i].description = strdup(req->tags[i].description);
|
||||
} else {
|
||||
cmd.tags[i].description = strdup("");
|
||||
}
|
||||
}
|
||||
|
||||
ret = neu_plugin_op(plugin, header, &cmd);
|
||||
@@ -196,10 +206,11 @@ void handle_get_tags_resp(nng_aio *aio, neu_resp_get_tag_t *tags)
|
||||
{
|
||||
int index = utarray_eltidx(tags->tags, tag);
|
||||
|
||||
tags_res.tags[index].name = tag->name;
|
||||
tags_res.tags[index].address = tag->addr_str;
|
||||
tags_res.tags[index].type = tag->type;
|
||||
tags_res.tags[index].attribute = tag->attribute;
|
||||
tags_res.tags[index].name = tag->name;
|
||||
tags_res.tags[index].address = tag->addr_str;
|
||||
tags_res.tags[index].description = tag->description;
|
||||
tags_res.tags[index].type = tag->type;
|
||||
tags_res.tags[index].attribute = tag->attribute;
|
||||
}
|
||||
|
||||
neu_json_encode_by_fn(&tags_res, neu_json_encode_get_tags_resp, &result);
|
||||
|
||||
@@ -269,6 +269,7 @@ void neu_adapter_driver_write_tag(neu_adapter_driver_t *driver,
|
||||
cmd->value.value);
|
||||
free(tag->addr_str);
|
||||
free(tag->name);
|
||||
free(tag->description);
|
||||
free(tag);
|
||||
}
|
||||
}
|
||||
|
||||
+25
-19
@@ -73,6 +73,7 @@ void neu_group_destroy(neu_group_t *group)
|
||||
free(el->name);
|
||||
free(el->tag->name);
|
||||
free(el->tag->addr_str);
|
||||
free(el->tag->description);
|
||||
free(el->tag);
|
||||
free(el);
|
||||
}
|
||||
@@ -132,13 +133,14 @@ int neu_group_add_tag(neu_group_t *group, neu_datatag_t *tag)
|
||||
return NEU_ERR_TAG_NAME_CONFLICT;
|
||||
}
|
||||
|
||||
el = calloc(1, sizeof(tag_elem_t));
|
||||
el->name = strdup(tag->name);
|
||||
el->tag = calloc(1, sizeof(neu_datatag_t));
|
||||
el->tag->name = strdup(tag->name);
|
||||
el->tag->addr_str = strdup(tag->addr_str);
|
||||
el->tag->type = tag->type;
|
||||
el->tag->attribute = tag->attribute;
|
||||
el = calloc(1, sizeof(tag_elem_t));
|
||||
el->name = strdup(tag->name);
|
||||
el->tag = calloc(1, sizeof(neu_datatag_t));
|
||||
el->tag->name = strdup(tag->name);
|
||||
el->tag->addr_str = strdup(tag->addr_str);
|
||||
el->tag->description = strdup(tag->description);
|
||||
el->tag->type = tag->type;
|
||||
el->tag->attribute = tag->attribute;
|
||||
|
||||
HASH_ADD_STR(group->tags, name, el);
|
||||
update_timestamp(group);
|
||||
@@ -161,16 +163,18 @@ int neu_group_update_tag(neu_group_t *group, neu_datatag_t *tag)
|
||||
free(el->name);
|
||||
free(el->tag->name);
|
||||
free(el->tag->addr_str);
|
||||
free(el->tag->description);
|
||||
free(el->tag);
|
||||
free(el);
|
||||
|
||||
el = calloc(1, sizeof(tag_elem_t));
|
||||
el->name = strdup(tag->name);
|
||||
el->tag = calloc(1, sizeof(neu_datatag_t));
|
||||
el->tag->name = strdup(tag->name);
|
||||
el->tag->addr_str = strdup(tag->addr_str);
|
||||
el->tag->type = tag->type;
|
||||
el->tag->attribute = tag->attribute;
|
||||
el = calloc(1, sizeof(tag_elem_t));
|
||||
el->name = strdup(tag->name);
|
||||
el->tag = calloc(1, sizeof(neu_datatag_t));
|
||||
el->tag->name = strdup(tag->name);
|
||||
el->tag->addr_str = strdup(tag->addr_str);
|
||||
el->tag->description = strdup(tag->description);
|
||||
el->tag->type = tag->type;
|
||||
el->tag->attribute = tag->attribute;
|
||||
|
||||
HASH_ADD_STR(group->tags, name, el);
|
||||
update_timestamp(group);
|
||||
@@ -195,6 +199,7 @@ int neu_group_del_tag(neu_group_t *group, const char *tag_name)
|
||||
free(el->name);
|
||||
free(el->tag->name);
|
||||
free(el->tag->addr_str);
|
||||
free(el->tag->description);
|
||||
free(el->tag);
|
||||
free(el);
|
||||
|
||||
@@ -248,11 +253,12 @@ neu_datatag_t *neu_group_find_tag(neu_group_t *group, const char *tag)
|
||||
nng_mtx_lock(group->mtx);
|
||||
HASH_FIND_STR(group->tags, tag, find);
|
||||
if (find != NULL) {
|
||||
result = calloc(1, sizeof(neu_datatag_t));
|
||||
result->type = find->tag->type;
|
||||
result->attribute = find->tag->attribute;
|
||||
result->name = strdup(find->tag->name);
|
||||
result->addr_str = strdup(find->tag->addr_str);
|
||||
result = calloc(1, sizeof(neu_datatag_t));
|
||||
result->type = find->tag->type;
|
||||
result->attribute = find->tag->attribute;
|
||||
result->name = strdup(find->tag->name);
|
||||
result->addr_str = strdup(find->tag->addr_str);
|
||||
result->description = strdup(find->tag->description);
|
||||
}
|
||||
nng_mtx_unlock(group->mtx);
|
||||
|
||||
|
||||
+6
-4
@@ -29,10 +29,11 @@ static void tag_array_copy(void *_dst, const void *_src)
|
||||
neu_datatag_t *dst = (neu_datatag_t *) _dst;
|
||||
neu_datatag_t *src = (neu_datatag_t *) _src;
|
||||
|
||||
dst->type = src->type;
|
||||
dst->attribute = src->attribute;
|
||||
dst->addr_str = strdup(src->addr_str);
|
||||
dst->name = strdup(src->name);
|
||||
dst->type = src->type;
|
||||
dst->attribute = src->attribute;
|
||||
dst->addr_str = strdup(src->addr_str);
|
||||
dst->name = strdup(src->name);
|
||||
dst->description = strdup(src->description);
|
||||
}
|
||||
|
||||
static void tag_array_free(void *_elt)
|
||||
@@ -41,6 +42,7 @@ static void tag_array_free(void *_elt)
|
||||
|
||||
free(elt->name);
|
||||
free(elt->addr_str);
|
||||
free(elt->description);
|
||||
}
|
||||
|
||||
static UT_icd tag_icd = { sizeof(neu_datatag_t), NULL, tag_array_copy,
|
||||
|
||||
@@ -291,6 +291,7 @@ static int manager_loop(enum neu_event_io_type type, int fd, void *usr_data)
|
||||
for (int i = 0; i < cmd->n_tag; i++) {
|
||||
free(cmd->tags[i].addr_str);
|
||||
free(cmd->tags[i].name);
|
||||
free(cmd->tags[i].description);
|
||||
}
|
||||
free(cmd->tags);
|
||||
|
||||
@@ -334,6 +335,7 @@ static int manager_loop(enum neu_event_io_type type, int fd, void *usr_data)
|
||||
for (int i = 0; i < cmd->n_tag; i++) {
|
||||
free(cmd->tags[i].addr_str);
|
||||
free(cmd->tags[i].name);
|
||||
free(cmd->tags[i].description);
|
||||
}
|
||||
free(cmd->tags);
|
||||
|
||||
|
||||
+91
-62
@@ -65,32 +65,40 @@ int neu_json_decode_add_tags_req(char *buf, neu_json_add_tags_req_t **result)
|
||||
req->tags = calloc(req->n_tag, sizeof(neu_json_add_tags_req_tag_t));
|
||||
neu_json_add_tags_req_tag_t *p_tag = req->tags;
|
||||
for (int i = 0; i < req->n_tag; i++) {
|
||||
neu_json_elem_t tag_elems[] = { {
|
||||
.name = "type",
|
||||
.t = NEU_JSON_INT,
|
||||
},
|
||||
{
|
||||
.name = "name",
|
||||
.t = NEU_JSON_STR,
|
||||
},
|
||||
{
|
||||
.name = "attribute",
|
||||
.t = NEU_JSON_INT,
|
||||
},
|
||||
{
|
||||
.name = "address",
|
||||
.t = NEU_JSON_STR,
|
||||
} };
|
||||
ret = neu_json_decode_array_by_json(
|
||||
neu_json_elem_t tag_elems[] = {
|
||||
{
|
||||
.name = "type",
|
||||
.t = NEU_JSON_INT,
|
||||
},
|
||||
{
|
||||
.name = "name",
|
||||
.t = NEU_JSON_STR,
|
||||
},
|
||||
{
|
||||
.name = "attribute",
|
||||
.t = NEU_JSON_INT,
|
||||
},
|
||||
{
|
||||
.name = "address",
|
||||
.t = NEU_JSON_STR,
|
||||
},
|
||||
{
|
||||
.name = "description",
|
||||
.t = NEU_JSON_STR,
|
||||
.attribute = NEU_JSON_ATTRIBUTE_OPTIONAL,
|
||||
},
|
||||
};
|
||||
ret = neu_json_decode_array_by_json(
|
||||
json_obj, "tags", i, NEU_JSON_ELEM_SIZE(tag_elems), tag_elems);
|
||||
if (ret != 0) {
|
||||
goto decode_fail;
|
||||
}
|
||||
|
||||
p_tag->type = tag_elems[0].v.val_int;
|
||||
p_tag->name = tag_elems[1].v.val_str;
|
||||
p_tag->attribute = tag_elems[2].v.val_int;
|
||||
p_tag->address = tag_elems[3].v.val_str;
|
||||
p_tag->type = tag_elems[0].v.val_int;
|
||||
p_tag->name = tag_elems[1].v.val_str;
|
||||
p_tag->attribute = tag_elems[2].v.val_int;
|
||||
p_tag->address = tag_elems[3].v.val_str;
|
||||
p_tag->description = tag_elems[4].v.val_str;
|
||||
p_tag++;
|
||||
}
|
||||
|
||||
@@ -118,6 +126,9 @@ void neu_json_decode_add_tags_req_free(neu_json_add_tags_req_t *req)
|
||||
|
||||
neu_json_add_tags_req_tag_t *p_tag = req->tags;
|
||||
for (int i = 0; i < req->n_tag; i++) {
|
||||
if (p_tag->description != NULL) {
|
||||
free(p_tag->description);
|
||||
}
|
||||
free(p_tag->name);
|
||||
free(p_tag->address);
|
||||
p_tag++;
|
||||
@@ -243,26 +254,33 @@ int neu_json_encode_get_tags_resp(void *json_object, void *param)
|
||||
void * tag_array = neu_json_array();
|
||||
neu_json_get_tags_resp_tag_t *p_tag = resp->tags;
|
||||
for (int i = 0; i < resp->n_tag; i++) {
|
||||
neu_json_elem_t tag_elems[] = { {
|
||||
.name = "type",
|
||||
.t = NEU_JSON_INT,
|
||||
.v.val_int = p_tag->type,
|
||||
},
|
||||
{
|
||||
.name = "name",
|
||||
.t = NEU_JSON_STR,
|
||||
.v.val_str = p_tag->name,
|
||||
},
|
||||
{
|
||||
.name = "attribute",
|
||||
.t = NEU_JSON_INT,
|
||||
.v.val_int = p_tag->attribute,
|
||||
},
|
||||
{
|
||||
.name = "address",
|
||||
.t = NEU_JSON_STR,
|
||||
.v.val_str = p_tag->address,
|
||||
} };
|
||||
neu_json_elem_t tag_elems[] = {
|
||||
{
|
||||
.name = "type",
|
||||
.t = NEU_JSON_INT,
|
||||
.v.val_int = p_tag->type,
|
||||
},
|
||||
{
|
||||
.name = "name",
|
||||
.t = NEU_JSON_STR,
|
||||
.v.val_str = p_tag->name,
|
||||
},
|
||||
{
|
||||
.name = "attribute",
|
||||
.t = NEU_JSON_INT,
|
||||
.v.val_int = p_tag->attribute,
|
||||
},
|
||||
{
|
||||
.name = "address",
|
||||
.t = NEU_JSON_STR,
|
||||
.v.val_str = p_tag->address,
|
||||
},
|
||||
{
|
||||
.name = "description",
|
||||
.t = NEU_JSON_STR,
|
||||
.v.val_str = p_tag->description,
|
||||
},
|
||||
};
|
||||
tag_array = neu_json_encode_array(tag_array, tag_elems,
|
||||
NEU_JSON_ELEM_SIZE(tag_elems));
|
||||
p_tag++;
|
||||
@@ -317,32 +335,40 @@ int neu_json_decode_update_tags_req(char * buf,
|
||||
req->tags = calloc(req->n_tag, sizeof(neu_json_update_tags_req_tag_t));
|
||||
neu_json_update_tags_req_tag_t *p_tag = req->tags;
|
||||
for (int i = 0; i < req->n_tag; i++) {
|
||||
neu_json_elem_t tag_elems[] = { {
|
||||
.name = "type",
|
||||
.t = NEU_JSON_INT,
|
||||
},
|
||||
{
|
||||
.name = "name",
|
||||
.t = NEU_JSON_STR,
|
||||
},
|
||||
{
|
||||
.name = "attribute",
|
||||
.t = NEU_JSON_INT,
|
||||
},
|
||||
{
|
||||
.name = "address",
|
||||
.t = NEU_JSON_STR,
|
||||
} };
|
||||
ret = neu_json_decode_array_by_json(
|
||||
neu_json_elem_t tag_elems[] = {
|
||||
{
|
||||
.name = "type",
|
||||
.t = NEU_JSON_INT,
|
||||
},
|
||||
{
|
||||
.name = "name",
|
||||
.t = NEU_JSON_STR,
|
||||
},
|
||||
{
|
||||
.name = "attribute",
|
||||
.t = NEU_JSON_INT,
|
||||
},
|
||||
{
|
||||
.name = "address",
|
||||
.t = NEU_JSON_STR,
|
||||
},
|
||||
{
|
||||
.name = "description",
|
||||
.t = NEU_JSON_STR,
|
||||
.attribute = NEU_JSON_ATTRIBUTE_OPTIONAL,
|
||||
},
|
||||
};
|
||||
ret = neu_json_decode_array_by_json(
|
||||
json_obj, "tags", i, NEU_JSON_ELEM_SIZE(tag_elems), tag_elems);
|
||||
if (ret != 0) {
|
||||
goto decode_fail;
|
||||
}
|
||||
|
||||
p_tag->type = tag_elems[0].v.val_int;
|
||||
p_tag->name = tag_elems[1].v.val_str;
|
||||
p_tag->attribute = tag_elems[2].v.val_int;
|
||||
p_tag->address = tag_elems[3].v.val_str;
|
||||
p_tag->type = tag_elems[0].v.val_int;
|
||||
p_tag->name = tag_elems[1].v.val_str;
|
||||
p_tag->attribute = tag_elems[2].v.val_int;
|
||||
p_tag->address = tag_elems[3].v.val_str;
|
||||
p_tag->description = tag_elems[4].v.val_str;
|
||||
p_tag++;
|
||||
}
|
||||
|
||||
@@ -370,6 +396,9 @@ void neu_json_decode_update_tags_req_free(neu_json_update_tags_req_t *req)
|
||||
|
||||
neu_json_update_tags_req_tag_t *p_tag = req->tags;
|
||||
for (int i = 0; i < req->n_tag; i++) {
|
||||
if (p_tag->description != NULL) {
|
||||
free(p_tag->description);
|
||||
}
|
||||
free(p_tag->name);
|
||||
free(p_tag->address);
|
||||
p_tag++;
|
||||
|
||||
@@ -65,6 +65,10 @@ int neu_json_decode_datatag_req(char *buf, neu_json_datatag_req_t **result)
|
||||
.name = "address",
|
||||
.t = NEU_JSON_STR,
|
||||
},
|
||||
{
|
||||
.name = "description",
|
||||
.t = NEU_JSON_STR,
|
||||
},
|
||||
};
|
||||
ret = neu_json_decode_array_by_json(
|
||||
json_obj, "tags", i, NEU_JSON_ELEM_SIZE(tag_elems), tag_elems);
|
||||
@@ -72,10 +76,11 @@ int neu_json_decode_datatag_req(char *buf, neu_json_datatag_req_t **result)
|
||||
goto decode_fail;
|
||||
}
|
||||
|
||||
p_tag->type = tag_elems[0].v.val_int;
|
||||
p_tag->name = tag_elems[1].v.val_str;
|
||||
p_tag->attribute = tag_elems[2].v.val_int;
|
||||
p_tag->address = tag_elems[3].v.val_str;
|
||||
p_tag->type = tag_elems[0].v.val_int;
|
||||
p_tag->name = tag_elems[1].v.val_str;
|
||||
p_tag->attribute = tag_elems[2].v.val_int;
|
||||
p_tag->address = tag_elems[3].v.val_str;
|
||||
p_tag->description = tag_elems[4].v.val_str;
|
||||
p_tag++;
|
||||
}
|
||||
|
||||
@@ -105,6 +110,7 @@ void neu_json_decode_datatag_req_free(neu_json_datatag_req_t *req)
|
||||
for (int i = 0; i < req->n_tag; i++) {
|
||||
free(p_tag->name);
|
||||
free(p_tag->address);
|
||||
free(p_tag->description);
|
||||
p_tag++;
|
||||
}
|
||||
|
||||
@@ -142,6 +148,11 @@ int neu_json_encode_datatag_resp(void *json_object, void *param)
|
||||
.t = NEU_JSON_STR,
|
||||
.v.val_str = p_tag->address,
|
||||
},
|
||||
{
|
||||
.name = "description",
|
||||
.t = NEU_JSON_STR,
|
||||
.v.val_str = p_tag->description,
|
||||
},
|
||||
};
|
||||
tag_array = neu_json_encode_array(tag_array, tag_elems,
|
||||
NEU_JSON_ELEM_SIZE(tag_elems));
|
||||
|
||||
@@ -34,6 +34,7 @@ extern "C" {
|
||||
typedef struct {
|
||||
char * address;
|
||||
char * name;
|
||||
char * description;
|
||||
int64_t type;
|
||||
int64_t attribute;
|
||||
} neu_json_datatag_req_tag_t;
|
||||
@@ -49,6 +50,7 @@ void neu_json_decode_datatag_req_free(neu_json_datatag_req_t *req);
|
||||
typedef struct {
|
||||
char * address;
|
||||
char * name;
|
||||
char * description;
|
||||
int64_t type;
|
||||
int64_t attribute;
|
||||
} neu_json_datatag_resp_tag_t;
|
||||
|
||||
+10
-8
@@ -880,10 +880,11 @@ int neu_persister_store_datatags(neu_persister_t *persister,
|
||||
int index = 0;
|
||||
utarray_foreach(datatag_infos, neu_datatag_t *, tag)
|
||||
{
|
||||
datatags_resp.tags[index].name = tag->name;
|
||||
datatags_resp.tags[index].address = tag->addr_str;
|
||||
datatags_resp.tags[index].attribute = tag->attribute;
|
||||
datatags_resp.tags[index].type = tag->type;
|
||||
datatags_resp.tags[index].name = tag->name;
|
||||
datatags_resp.tags[index].description = tag->description;
|
||||
datatags_resp.tags[index].address = tag->addr_str;
|
||||
datatags_resp.tags[index].attribute = tag->attribute;
|
||||
datatags_resp.tags[index].type = tag->type;
|
||||
index += 1;
|
||||
}
|
||||
|
||||
@@ -936,10 +937,11 @@ int neu_persister_load_datatags(neu_persister_t *persister,
|
||||
utarray_new(*tags, neu_tag_get_icd());
|
||||
for (int i = 0; i < datatag_req->n_tag; i++) {
|
||||
neu_datatag_t tag = {
|
||||
.name = datatag_req->tags[i].name,
|
||||
.addr_str = datatag_req->tags[i].address,
|
||||
.type = datatag_req->tags[i].type,
|
||||
.attribute = datatag_req->tags[i].attribute,
|
||||
.name = datatag_req->tags[i].name,
|
||||
.addr_str = datatag_req->tags[i].address,
|
||||
.type = datatag_req->tags[i].type,
|
||||
.attribute = datatag_req->tags[i].attribute,
|
||||
.description = datatag_req->tags[i].description,
|
||||
};
|
||||
|
||||
utarray_push_back(*tags, &tag);
|
||||
|
||||
@@ -99,6 +99,9 @@ static int decode_object(json_t *root, neu_json_elem_t *ele)
|
||||
}
|
||||
|
||||
if (ob == NULL) {
|
||||
if (ele->attribute == NEU_JSON_ATTRIBUTE_OPTIONAL) {
|
||||
return 0;
|
||||
}
|
||||
zlog_error(neuron, "json decode: %s failed", ele->name);
|
||||
return -1;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user