support array string

This commit is contained in:
xiang.zhou
2024-12-19 09:58:37 +08:00
parent 2499657f8d
commit bb9d5a71dc
8 changed files with 184 additions and 6 deletions
+82 -6
View File
@@ -104,6 +104,11 @@ void neu_driver_cache_destroy(neu_driver_cache_t *cache)
json_decref(elem->value.value.json);
elem->value.value.json = NULL;
}
} else if (elem->value.type == NEU_TYPE_ARRAY_STRING) {
for (int i = 0; i < elem->value.value.strs.length; i++) {
free(elem->value.value.strs.strs[i]);
elem->value.value.strs.strs[i] = NULL;
}
}
free(elem);
@@ -399,6 +404,18 @@ void neu_driver_cache_update_change(neu_driver_cache_t *cache,
}
}
break;
case NEU_TYPE_ARRAY_STRING:
if (elem->value_old.value.strs.length !=
value.value.strs.length) {
elem->changed = true;
} else {
if (memcmp(elem->value_old.value.strs.strs,
value.value.strs.strs,
value.value.strs.length * sizeof(char *)) != 0) {
elem->changed = true;
}
}
break;
case NEU_TYPE_CUSTOM: {
if (json_equal(elem->value_old.value.json, value.value.json) !=
0) {
@@ -602,6 +619,17 @@ void neu_driver_cache_update_change(neu_driver_cache_t *cache,
}
}
break;
case NEU_TYPE_ARRAY_STRING:
if (elem->value.value.strs.length != value.value.strs.length) {
elem->changed = true;
} else {
if (memcmp(elem->value.value.strs.strs,
value.value.strs.strs,
value.value.strs.length * sizeof(char *)) != 0) {
elem->changed = true;
}
}
break;
case NEU_TYPE_PTR: {
if (elem->value.value.ptr.length != value.value.ptr.length) {
elem->changed = true;
@@ -668,14 +696,43 @@ void neu_driver_cache_update_change(neu_driver_cache_t *cache,
elem->value.value.ptr.ptr = calloc(1, value.value.ptr.length);
memcpy(elem->value.value.ptr.ptr, value.value.ptr.ptr,
value.value.ptr.length);
} else if (value.type == NEU_TYPE_CUSTOM ||
value.type == NEU_TYPE_ERROR) {
if (elem->value.type == NEU_TYPE_CUSTOM &&
elem->value.value.json != NULL) {
json_decref(elem->value.value.json);
elem->value.value.json = NULL;
} else if (value.type == NEU_TYPE_CUSTOM) {
if (elem->value.type == NEU_TYPE_CUSTOM) {
if (elem->value.value.json != NULL) {
json_decref(elem->value.value.json);
elem->value.value.json = NULL;
}
}
elem->value.value.json = value.value.json;
} else if (value.type == NEU_TYPE_ARRAY_STRING) {
if (elem->value.type == NEU_TYPE_ARRAY_STRING) {
for (int i = 0; i < elem->value.value.strs.length; i++) {
free(elem->value.value.strs.strs[i]);
elem->value.value.strs.strs[i] = NULL;
}
}
elem->value.value.strs.length = value.value.strs.length;
for (int i = 0; i < value.value.strs.length; i++) {
elem->value.value.strs.strs[i] = value.value.strs.strs[i];
}
} else if (value.type == NEU_TYPE_ERROR) {
if (elem->value.type == NEU_TYPE_CUSTOM) {
if (elem->value.value.json != NULL) {
json_decref(elem->value.value.json);
elem->value.value.json = NULL;
}
}
if (elem->value.type == NEU_TYPE_ARRAY_STRING) {
for (int i = 0; i < elem->value.value.strs.length; i++) {
free(elem->value.value.strs.strs[i]);
elem->value.value.strs.strs[i] = NULL;
}
}
elem->value.value = value.value;
} else {
elem->value.value = value.value;
}
@@ -814,6 +871,13 @@ int neu_driver_cache_meta_get(neu_driver_cache_t *cache, const char *group,
memcpy(value->value.value.f64s.f64s, elem->value.value.f64s.f64s,
elem->value.value.f64s.length * sizeof(double));
break;
case NEU_TYPE_ARRAY_STRING:
value->value.value.strs.length = elem->value.value.strs.length;
for (int i = 0; i < elem->value.value.strs.length; i++) {
value->value.value.strs.strs[i] =
strdup(elem->value.value.strs.strs[i]);
}
break;
case NEU_TYPE_PTR:
value->value.value.ptr.length = elem->value.value.ptr.length;
value->value.value.ptr.type = elem->value.value.ptr.type;
@@ -958,6 +1022,13 @@ int neu_driver_cache_meta_get_changed(neu_driver_cache_t *cache,
memcpy(value->value.value.f64s.f64s, elem->value.value.f64s.f64s,
elem->value.value.f64s.length * sizeof(double));
break;
case NEU_TYPE_ARRAY_STRING:
value->value.value.strs.length = elem->value.value.strs.length;
for (int i = 0; i < elem->value.value.strs.length; i++) {
value->value.value.strs.strs[i] =
strdup(elem->value.value.strs.strs[i]);
}
break;
case NEU_TYPE_PTR:
value->value.value.ptr.length = elem->value.value.ptr.length;
value->value.value.ptr.type = elem->value.value.ptr.type;
@@ -1010,6 +1081,11 @@ void neu_driver_cache_del(neu_driver_cache_t *cache, const char *group,
json_decref(elem->value.value.json);
elem->value.value.json = NULL;
}
} else if (elem->value.type == NEU_TYPE_ARRAY_STRING) {
for (int i = 0; i < elem->value.value.strs.length; i++) {
free(elem->value.value.strs.strs[i]);
elem->value.value.strs.strs[i] = NULL;
}
}
free(elem);
}
+22
View File
@@ -751,6 +751,7 @@ static void fix_value(neu_datatag_t *tag, neu_type_e value_type,
case NEU_TYPE_ARRAY_INT64:
case NEU_TYPE_ARRAY_CHAR:
case NEU_TYPE_ARRAY_BOOL:
case NEU_TYPE_ARRAY_STRING:
case NEU_TYPE_CUSTOM:
break;
case NEU_TYPE_BIT:
@@ -2184,6 +2185,11 @@ static int report_callback(void *usr_data)
free(tag_value->value.value.ptr.ptr);
} else if (tag_value->value.type == NEU_TYPE_CUSTOM) {
json_decref(tag_value->value.value.json);
} else if (tag_value->value.type == NEU_TYPE_ARRAY_STRING) {
for (size_t i = 0; i < tag_value->value.value.strs.length;
++i) {
free(tag_value->value.value.strs.strs[i]);
}
}
}
utarray_free(data->tags);
@@ -2487,6 +2493,10 @@ static void read_report_group(int64_t timestamp, int64_t timeout,
free(value.value.value.ptr.ptr);
} else if (value.value.type == NEU_TYPE_CUSTOM) {
json_decref(value.value.value.json);
} else if (value.value.type == NEU_TYPE_ARRAY_STRING) {
for (size_t i = 0; i < value.value.value.strs.length; ++i) {
free(value.value.value.strs.strs[i]);
}
}
tag_value.value.type = NEU_TYPE_ERROR;
tag_value.value.value.i32 = NEU_ERR_PLUGIN_TAG_VALUE_EXPIRED;
@@ -2651,6 +2661,12 @@ static void read_group(int64_t timestamp, int64_t timeout,
(timestamp - value.timestamp) > timeout) {
if (value.value.type == NEU_TYPE_PTR) {
free(value.value.value.ptr.ptr);
} else if (value.value.type == NEU_TYPE_CUSTOM) {
json_decref(value.value.value.json);
} else if (value.value.type == NEU_TYPE_ARRAY_STRING) {
for (size_t i = 0; i < value.value.value.strs.length; ++i) {
free(value.value.value.strs.strs[i]);
}
}
tag_value.value.type = NEU_TYPE_ERROR;
tag_value.value.value.i32 = NEU_ERR_PLUGIN_TAG_VALUE_EXPIRED;
@@ -2829,6 +2845,12 @@ static void read_group_paginate(int64_t timestamp, int64_t timeout,
(timestamp - value.timestamp) > timeout) {
if (value.value.type == NEU_TYPE_PTR) {
free(value.value.value.ptr.ptr);
} else if (value.value.type == NEU_TYPE_CUSTOM) {
json_decref(value.value.value.json);
} else if (value.value.type == NEU_TYPE_ARRAY_STRING) {
for (size_t i = 0; i < value.value.value.strs.length; ++i) {
free(value.value.value.strs.strs[i]);
}
}
tag_value.value.type = NEU_TYPE_ERROR;
tag_value.value.value.i32 = NEU_ERR_PLUGIN_TAG_VALUE_EXPIRED;
+14
View File
@@ -305,6 +305,17 @@ static json_t *encode_object(json_t *object, neu_json_elem_t ele)
json_object_set_new(ob, ele.name, array);
break;
}
case NEU_JSON_ARRAY_STR: {
void *array = json_array();
for (int i = 0; i < ele.v.val_array_str.length; i++) {
json_array_append_new(array,
json_string(ele.v.val_array_str.p_strs[i]));
}
json_object_set_new(ob, ele.name, array);
break;
}
case NEU_JSON_OBJECT:
json_object_set_new(ob, ele.name, ele.v.val_object);
break;
@@ -668,6 +679,9 @@ static int decode_object(json_t *root, neu_json_elem_t *ele)
}
case NEU_JSON_OBJECT:
ele->v.val_object = ob;
if (ele->name == NULL) {
json_incref(ele->v.val_object);
}
break;
default:
ele->ok = false;