mirror of
https://github.com/emqx/neuron.git
synced 2026-10-21 08:45:47 +08:00
feat(core): persist data when add/update/del template tags
This commit is contained in:
+7
-3
@@ -387,7 +387,8 @@ static int manager_loop(enum neu_event_io_type type, int fd, void *usr_data)
|
||||
|
||||
resp.error = neu_manager_add_template_tags(manager, cmd, &resp.index);
|
||||
if (resp.index > 0) {
|
||||
// TODO: storage
|
||||
manager_storage_add_template_tags(cmd->tmpl, cmd->group, cmd->tags,
|
||||
cmd->n_tag);
|
||||
}
|
||||
|
||||
neu_req_add_template_tag_fini(cmd);
|
||||
@@ -405,7 +406,8 @@ static int manager_loop(enum neu_event_io_type type, int fd, void *usr_data)
|
||||
resp.error =
|
||||
neu_manager_update_template_tags(manager, cmd, &resp.index);
|
||||
if (resp.index > 0) {
|
||||
// TODO: storage
|
||||
manager_storage_update_template_tags(cmd->tmpl, cmd->group,
|
||||
cmd->tags, cmd->n_tag);
|
||||
}
|
||||
|
||||
neu_req_update_template_tag_fini(cmd);
|
||||
@@ -422,7 +424,9 @@ static int manager_loop(enum neu_event_io_type type, int fd, void *usr_data)
|
||||
|
||||
resp.error = neu_manager_del_template_tags(manager, cmd);
|
||||
if (0 == resp.error) {
|
||||
// TODO: storage
|
||||
manager_storage_del_template_tags(cmd->tmpl, cmd->group,
|
||||
(const char *const *) cmd->tags,
|
||||
cmd->n_tag);
|
||||
}
|
||||
|
||||
neu_req_del_template_tag_fini(cmd);
|
||||
|
||||
+150
-3
@@ -85,7 +85,7 @@ void manager_storage_unsubscribe(neu_manager_t *manager, const char *app,
|
||||
}
|
||||
}
|
||||
|
||||
static int save_group_and_tags(neu_group_t *grp, void *data)
|
||||
static int save_node_group_and_tags(neu_group_t *grp, void *data)
|
||||
{
|
||||
const char *node = data;
|
||||
const char *name = neu_group_get_name(grp);
|
||||
@@ -117,13 +117,32 @@ void manager_storage_inst_node(neu_manager_t *manager, const char *tmpl_name,
|
||||
|
||||
manager_storage_add_node(manager, node);
|
||||
|
||||
int rv =
|
||||
neu_template_for_each_group(tmpl, save_group_and_tags, (void *) node);
|
||||
int rv = neu_template_for_each_group(tmpl, save_node_group_and_tags,
|
||||
(void *) node);
|
||||
if (0 != rv) {
|
||||
nlog_error("save instantiated node `%s` groups and tags fail", node);
|
||||
}
|
||||
}
|
||||
|
||||
static int save_tmpl_group_and_tags(neu_group_t *grp, void *data)
|
||||
{
|
||||
const char *tmpl_name = data;
|
||||
const char *name = neu_group_get_name(grp);
|
||||
uint32_t interval = neu_group_get_interval(grp);
|
||||
|
||||
UT_array *tags = neu_group_get_tag(grp);
|
||||
if (NULL == tags) {
|
||||
return NEU_ERR_EINTERNAL;
|
||||
}
|
||||
|
||||
manager_storage_add_template_group(tmpl_name, name, interval);
|
||||
manager_storage_add_template_tags(tmpl_name, name, utarray_front(tags),
|
||||
utarray_len(tags));
|
||||
|
||||
utarray_free(tags);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void manager_storage_add_template(neu_manager_t *manager, const char *tmpl_name)
|
||||
{
|
||||
neu_template_t *tmpl =
|
||||
@@ -136,6 +155,13 @@ void manager_storage_add_template(neu_manager_t *manager, const char *tmpl_name)
|
||||
int rv = neu_persister_store_template(tmpl_name, neu_template_plugin(tmpl));
|
||||
if (0 != rv) {
|
||||
nlog_error("failed to store template info");
|
||||
return;
|
||||
}
|
||||
|
||||
rv = neu_template_for_each_group(tmpl, save_tmpl_group_and_tags,
|
||||
(void *) tmpl_name);
|
||||
if (0 != rv) {
|
||||
nlog_error("save template `%s` groups and tags fail", tmpl_name);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -159,6 +185,127 @@ void manager_storage_clear_templates(neu_manager_t *manager)
|
||||
}
|
||||
}
|
||||
|
||||
void manager_storage_add_template_group(const char *tmpl, const char *group,
|
||||
uint32_t interval)
|
||||
{
|
||||
neu_persist_group_info_t info = {
|
||||
.name = (char *) group,
|
||||
.interval = interval,
|
||||
};
|
||||
|
||||
int rv = neu_persister_store_template_group(tmpl, &info);
|
||||
if (0 != rv) {
|
||||
nlog_error("store template:%s grp:%s, interval:%" PRIu32 " fail", tmpl,
|
||||
group, interval);
|
||||
}
|
||||
}
|
||||
|
||||
void manager_storage_update_template_group(const char *tmpl, const char *group,
|
||||
uint32_t interval)
|
||||
{
|
||||
neu_persist_group_info_t info = {
|
||||
.name = (char *) group,
|
||||
.interval = interval,
|
||||
};
|
||||
|
||||
int rv = neu_persister_update_template_group(tmpl, &info);
|
||||
if (0 != rv) {
|
||||
nlog_error("update template:%s grp:%s, interval:%" PRIu32 " fail", tmpl,
|
||||
group, interval);
|
||||
}
|
||||
}
|
||||
|
||||
void manager_storage_del_template_group(const char *tmpl, const char *group)
|
||||
{
|
||||
int rv = neu_persister_delete_template_group(tmpl, group);
|
||||
if (0 != rv) {
|
||||
nlog_error("delete template:%s grp:%s fail" PRIu32, tmpl, group);
|
||||
}
|
||||
}
|
||||
|
||||
void manager_storage_add_template_tag(const char *tmpl, const char *group,
|
||||
const neu_datatag_t *tag)
|
||||
{
|
||||
int rv = neu_persister_store_template_tags(tmpl, group, tag, 1);
|
||||
if (0 != rv) {
|
||||
nlog_error("store tag:%s template:%s grp:%s fail", tag->name, tmpl,
|
||||
group);
|
||||
}
|
||||
}
|
||||
|
||||
void manager_storage_add_template_tags(const char *tmpl, const char *group,
|
||||
const neu_datatag_t *tags, size_t n)
|
||||
{
|
||||
if (0 == n) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (1 == n) {
|
||||
return manager_storage_add_template_tag(tmpl, group, &tags[0]);
|
||||
}
|
||||
|
||||
int rv = neu_persister_store_template_tags(tmpl, group, tags, n);
|
||||
if (0 != rv) {
|
||||
nlog_error("store %zu tags:[%s ... %s] template:%s grp:%s fail", n,
|
||||
tags->name, tags[n - 1].name, tmpl, group);
|
||||
}
|
||||
}
|
||||
|
||||
void manager_storage_update_template_tag(const char *tmpl, const char *group,
|
||||
const neu_datatag_t *tag)
|
||||
{
|
||||
int rv = neu_persister_update_template_tags(tmpl, group, tag, 1);
|
||||
if (0 != rv) {
|
||||
nlog_error("update tag:%s template:%s grp:%s fail", tag->name, tmpl,
|
||||
group);
|
||||
}
|
||||
}
|
||||
|
||||
void manager_storage_update_template_tags(const char *tmpl, const char *group,
|
||||
const neu_datatag_t *tags, size_t n)
|
||||
{
|
||||
if (0 == n) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (1 == n) {
|
||||
return manager_storage_update_template_tag(tmpl, group, &tags[0]);
|
||||
}
|
||||
|
||||
int rv = neu_persister_update_template_tags(tmpl, group, tags, n);
|
||||
if (0 != rv) {
|
||||
nlog_error("update %zu tags:[%s ... %s] template:%s grp:%s fail", n,
|
||||
tags->name, tags[n - 1].name, tmpl, group);
|
||||
}
|
||||
}
|
||||
|
||||
void manager_storage_del_template_tag(const char *tmpl, const char *group,
|
||||
const char *tag)
|
||||
{
|
||||
int rv = neu_persister_delete_template_tags(tmpl, group, &tag, 1);
|
||||
if (0 != rv) {
|
||||
nlog_error("delete tag:%s template:%s grp:%s fail", tag, tmpl, group);
|
||||
}
|
||||
}
|
||||
|
||||
void manager_storage_del_template_tags(const char *tmpl, const char *group,
|
||||
const char *const *tags, size_t n)
|
||||
{
|
||||
if (0 == n) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (1 == n) {
|
||||
return manager_storage_del_template_tag(tmpl, group, tags[0]);
|
||||
}
|
||||
|
||||
int rv = neu_persister_delete_template_tags(tmpl, group, tags, n);
|
||||
if (0 != rv) {
|
||||
nlog_error("del %zu tags:[%s ... %s] template:%s grp:%s fail", n,
|
||||
tags[0], tags[n - 1], tmpl, group);
|
||||
}
|
||||
}
|
||||
|
||||
int manager_load_plugin(neu_manager_t *manager)
|
||||
{
|
||||
UT_array *plugin_infos = NULL;
|
||||
|
||||
@@ -41,6 +41,23 @@ void manager_storage_add_template(neu_manager_t *manager,
|
||||
void manager_storage_del_template(neu_manager_t *manager,
|
||||
const char * tmpl_name);
|
||||
void manager_storage_clear_templates(neu_manager_t *manager);
|
||||
void manager_storage_add_template_group(const char *tmpl, const char *group,
|
||||
uint32_t interval);
|
||||
void manager_storage_update_template_group(const char *tmpl, const char *group,
|
||||
uint32_t interval);
|
||||
void manager_storage_del_template_group(const char *tmpl, const char *group);
|
||||
void manager_storage_add_template_tag(const char *tmpl, const char *group,
|
||||
const neu_datatag_t *tag);
|
||||
void manager_storage_add_template_tags(const char *tmpl, const char *group,
|
||||
const neu_datatag_t *tags, size_t n);
|
||||
void manager_storage_update_template_tag(const char *tmpl, const char *group,
|
||||
const neu_datatag_t *tag);
|
||||
void manager_storage_update_template_tags(const char *tmpl, const char *group,
|
||||
const neu_datatag_t *tags, size_t n);
|
||||
void manager_storage_del_template_tag(const char *tmpl, const char *group,
|
||||
const char *tag);
|
||||
void manager_storage_del_template_tags(const char *tmpl, const char *group,
|
||||
const char *const *tags, size_t n);
|
||||
|
||||
int manager_load_plugin(neu_manager_t *manager);
|
||||
int manager_load_node(neu_manager_t *manager);
|
||||
|
||||
Reference in New Issue
Block a user