mirror of
https://github.com/emqx/neuron.git
synced 2026-10-25 03:10:21 +08:00
@@ -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
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user