Merge pull request #1145 from eeff/eeff/dev

fix: driver static tags
This commit is contained in:
fengzeroz
2023-03-31 14:22:05 +08:00
committed by GitHub
4 changed files with 60 additions and 12 deletions
+10 -6
View File
@@ -94,19 +94,23 @@ static void update(neu_adapter_t *adapter, const char *group, const char *tag,
if (value.type == NEU_TYPE_ERROR && tag == NULL) {
group_t *g = find_group(driver, group);
if (g != NULL) {
UT_array *tags = neu_group_get_read_tag(g->group);
UT_array *tags = neu_group_get_read_tag(g->group);
uint64_t err_count = 0;
utarray_foreach(tags, neu_datatag_t *, t)
{
if (neu_tag_attribute_test(t, NEU_ATTRIBUTE_STATIC)) {
continue;
}
neu_driver_cache_update(driver->cache, group, t->name,
global_timestamp, value);
++err_count;
}
driver->adapter.cb_funs.update_metric(&driver->adapter,
NEU_METRIC_TAG_READS_TOTAL,
utarray_len(tags), NULL);
driver->adapter.cb_funs.update_metric(
&driver->adapter, NEU_METRIC_TAG_READ_ERRORS_TOTAL,
utarray_len(tags), NULL);
&driver->adapter, NEU_METRIC_TAG_READS_TOTAL, err_count, NULL);
driver->adapter.cb_funs.update_metric(
&driver->adapter, NEU_METRIC_TAG_READ_ERRORS_TOTAL, err_count,
NULL);
utarray_free(tags);
}
} else {
+12 -2
View File
@@ -579,6 +579,12 @@ int neu_tag_set_static_value_json(neu_datatag_t *tag, neu_json_type_e t,
case NEU_TYPE_UINT64:
value.u64 = v->val_int;
break;
case NEU_TYPE_FLOAT:
value.f32 = v->val_int;
break;
case NEU_TYPE_DOUBLE:
value.d64 = v->val_int;
break;
default:
rv = -1;
break;
@@ -588,14 +594,18 @@ int neu_tag_set_static_value_json(neu_datatag_t *tag, neu_json_type_e t,
case NEU_JSON_FLOAT: {
if (NEU_TYPE_FLOAT == tag->type) {
value.f32 = v->val_float;
} else if (NEU_TYPE_DOUBLE == tag->type) {
value.d64 = v->val_float;
} else {
rv = -1;
}
break;
}
case NEU_JSON_DOUBLE: {
if (NEU_TYPE_DOUBLE == tag->type) {
value.d64 = v->val_float;
if (NEU_TYPE_FLOAT == tag->type) {
value.f32 = v->val_double;
} else if (NEU_TYPE_DOUBLE == tag->type) {
value.d64 = v->val_double;
} else {
rv = -1;
}
+37 -4
View File
@@ -31,6 +31,7 @@
#include "neu_json_tag.h"
#include "tag.h"
#include "type.h"
int neu_json_encode_tag(void *json_obj, void *param)
{
@@ -151,10 +152,7 @@ int neu_json_decode_tag_json(void *json_obj, neu_json_tag_t *tag_p)
goto decode_fail;
}
if (((NEU_ATTRIBUTE_STATIC & tag.attribute) &&
NEU_JSON_UNDEFINE == tag.t) ||
(!(NEU_ATTRIBUTE_STATIC & tag.attribute) &&
NEU_JSON_UNDEFINE != tag.t)) {
if (!neu_json_tag_check_type(&tag)) {
goto decode_fail;
}
@@ -176,6 +174,41 @@ void neu_json_decode_tag_fini(neu_json_tag_t *tag)
}
}
int neu_json_tag_check_type(neu_json_tag_t *tag)
{
if (NEU_ATTRIBUTE_STATIC & tag->attribute) {
switch (tag->type) {
case NEU_TYPE_BIT:
case NEU_TYPE_INT8:
case NEU_TYPE_UINT8:
case NEU_TYPE_INT16:
case NEU_TYPE_UINT16:
case NEU_TYPE_INT32:
case NEU_TYPE_UINT32:
case NEU_TYPE_INT64:
case NEU_TYPE_UINT64:
case NEU_TYPE_WORD:
case NEU_TYPE_DWORD:
case NEU_TYPE_LWORD:
return NEU_JSON_INT == tag->t;
case NEU_TYPE_FLOAT:
case NEU_TYPE_DOUBLE:
return NEU_JSON_INT == tag->t || NEU_JSON_FLOAT == tag->t ||
NEU_JSON_DOUBLE == tag->t;
case NEU_TYPE_BOOL:
return NEU_JSON_BOOL == tag->t;
case NEU_TYPE_BYTES:
case NEU_TYPE_STRING:
return NEU_JSON_STR == tag->t;
}
} else {
// non-static tag should have no initial value
return NEU_JSON_UNDEFINE == tag->t;
}
return true;
}
int neu_json_encode_tag_array(void *json_obj, void *param)
{
neu_json_tag_array_t *array = param;
+1
View File
@@ -46,6 +46,7 @@ typedef struct {
int neu_json_encode_tag(void *json_obj, void *param);
int neu_json_decode_tag_json(void *json_obj, neu_json_tag_t *tag_p);
void neu_json_decode_tag_fini(neu_json_tag_t *tag);
int neu_json_tag_check_type(neu_json_tag_t *tag);
typedef struct {
int len;