feat(core): persist data when add/update/del template tags

This commit is contained in:
eeff
2023-04-27 17:31:27 +08:00
parent af94581652
commit cbbba80080
3 changed files with 174 additions and 6 deletions
+7 -3
View File
@@ -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
View File
@@ -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;
+17
View File
@@ -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);