feat(core): persist value when static tags are written

This commit is contained in:
eeff
2023-02-08 18:29:45 +08:00
parent 773064674c
commit 4ab12d318f
4 changed files with 20 additions and 20 deletions
+7 -10
View File
@@ -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);
}
}
+10
View File
@@ -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)
{
+2
View File
@@ -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
View File
@@ -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;