mirror of
https://github.com/emqx/neuron.git
synced 2026-10-21 00:36:23 +08:00
feat(core): persist value when static tags are written
This commit is contained in:
@@ -261,10 +261,7 @@ void neu_adapter_driver_write_tag(neu_adapter_driver_t *driver,
|
||||
if ((tag->attribute & NEU_ATTRIBUTE_WRITE) != NEU_ATTRIBUTE_WRITE) {
|
||||
driver->adapter.cb_funs.driver.write_response(
|
||||
&driver->adapter, req, NEU_ERR_PLUGIN_TAG_NOT_ALLOW_WRITE);
|
||||
free(tag->address);
|
||||
free(tag->name);
|
||||
free(tag->description);
|
||||
free(tag);
|
||||
neu_tag_free(tag);
|
||||
return;
|
||||
}
|
||||
if (tag->type == NEU_TYPE_FLOAT || tag->type == NEU_TYPE_DOUBLE) {
|
||||
@@ -398,21 +395,21 @@ void neu_adapter_driver_write_tag(neu_adapter_driver_t *driver,
|
||||
}
|
||||
|
||||
if (neu_tag_attribute_test(tag, NEU_ATTRIBUTE_STATIC)) {
|
||||
neu_driver_cache_add(g->driver->cache, g->name, tag->name,
|
||||
cmd->value);
|
||||
neu_driver_cache_update(g->driver->cache, g->name, tag->name,
|
||||
global_timestamp, cmd->value);
|
||||
neu_tag_set_static_value(tag, &cmd->value.value);
|
||||
neu_group_update_tag(g->group, tag);
|
||||
adapter_storage_update_tag_value(cmd->driver, cmd->group, tag);
|
||||
neu_resp_error_t error = { .error = NEU_ERR_SUCCESS };
|
||||
req->type = NEU_RESP_ERROR;
|
||||
driver->adapter.cb_funs.response(&driver->adapter, req, &error);
|
||||
free(req);
|
||||
} else {
|
||||
driver->adapter.module->intf_funs->driver.write_tag(
|
||||
driver->adapter.plugin, (void *) req, tag, cmd->value.value);
|
||||
}
|
||||
|
||||
free(tag->address);
|
||||
free(tag->name);
|
||||
free(tag->description);
|
||||
free(tag);
|
||||
neu_tag_free(tag);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -102,6 +102,16 @@ void adapter_storage_update_tag(const char *node, const char *group,
|
||||
}
|
||||
}
|
||||
|
||||
void adapter_storage_update_tag_value(const char *node, const char *group,
|
||||
const neu_datatag_t *tag)
|
||||
{
|
||||
int rv = neu_persister_update_tag_value(node, group, tag);
|
||||
if (0 != rv) {
|
||||
nlog_error("fail update value tag:%s adapter:%s grp:%s", tag->name,
|
||||
node, group);
|
||||
}
|
||||
}
|
||||
|
||||
void adapter_storage_del_tag(const char *node, const char *group,
|
||||
const char *name)
|
||||
{
|
||||
|
||||
@@ -37,6 +37,8 @@ void adapter_storage_add_tags(const char *node, const char *group,
|
||||
const neu_datatag_t *tags, size_t n);
|
||||
void adapter_storage_update_tag(const char *node, const char *group,
|
||||
const neu_datatag_t *tag);
|
||||
void adapter_storage_update_tag_value(const char *node, const char *group,
|
||||
const neu_datatag_t *tag);
|
||||
void adapter_storage_del_tag(const char *node, const char *group,
|
||||
const char *name);
|
||||
|
||||
|
||||
+1
-10
@@ -210,16 +210,7 @@ neu_datatag_t *neu_group_find_tag(neu_group_t *group, const char *tag)
|
||||
|
||||
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->precision = find->tag->precision;
|
||||
result->decimal = find->tag->decimal;
|
||||
result->option = find->tag->option;
|
||||
result->name = strdup(find->tag->name);
|
||||
result->address = strdup(find->tag->address);
|
||||
result->description = strdup(find->tag->description);
|
||||
memcpy(result->meta, find->tag->meta, sizeof(find->tag->meta));
|
||||
result = neu_tag_dup(find->tag);
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
Reference in New Issue
Block a user