Merge pull request #1265 from eeff/eeff/dev

feat(core): load template data
This commit is contained in:
fengzeroz
2023-05-17 14:40:20 +08:00
committed by GitHub
5 changed files with 114 additions and 37 deletions
+10 -3
View File
@@ -122,6 +122,10 @@ neu_manager_t *neu_manager_create()
}
utarray_free(single_plugins);
if (manager_load_template(manager) != 0) {
nlog_warn("load template error");
}
manager_load_node(manager);
while (neu_node_manager_exist_uninit(manager->node_manager)) {
usleep(1000 * 100);
@@ -316,7 +320,8 @@ static int manager_loop(enum neu_event_io_type type, int fd, void *usr_data)
neu_resp_error_t e = { 0 };
neu_req_add_template_t *cmd = (neu_req_add_template_t *) &header[1];
e.error = neu_manager_add_template(manager, cmd);
e.error = neu_manager_add_template(manager, cmd->name, cmd->plugin,
cmd->n_group, cmd->groups);
if (NEU_ERR_SUCCESS == e.error) {
manager_storage_add_template(manager, cmd->name);
}
@@ -389,7 +394,8 @@ static int manager_loop(enum neu_event_io_type type, int fd, void *usr_data)
if (cmd->interval < NEU_GROUP_INTERVAL_LIMIT) {
e.error = NEU_ERR_GROUP_PARAMETER_INVALID;
} else {
e.error = neu_manager_add_template_group(manager, cmd);
e.error = neu_manager_add_template_group(manager, cmd->tmpl,
cmd->group, cmd->interval);
}
if (e.error == NEU_ERR_SUCCESS) {
@@ -463,7 +469,8 @@ static int manager_loop(enum neu_event_io_type type, int fd, void *usr_data)
(neu_req_add_template_tag_t *) &header[1];
neu_resp_add_tag_t resp = { 0 };
resp.error = neu_manager_add_template_tags(manager, cmd, &resp.index);
resp.error = neu_manager_add_template_tags(
manager, cmd->tmpl, cmd->group, cmd->n_tag, cmd->tags, &resp.index);
if (resp.index > 0) {
manager_storage_add_template_tags(cmd->tmpl, cmd->group, cmd->tags,
cmd->n_tag);
+18 -16
View File
@@ -103,17 +103,18 @@ UT_array *neu_manager_get_nodes(neu_manager_t *manager, neu_node_type_e type,
return neu_node_manager_filter(manager->node_manager, type, plugin, node);
}
int neu_manager_add_template(neu_manager_t * manager,
neu_req_add_template_t *req)
int neu_manager_add_template(neu_manager_t *manager, const char *name,
const char *plugin, uint16_t n_group,
neu_reqresp_template_group_t *groups)
{
int rv = 0;
neu_template_t *tmpl = neu_template_new(req->name, req->plugin);
neu_template_t *tmpl = neu_template_new(name, plugin);
if (NULL == tmpl) {
return NEU_ERR_EINTERNAL;
}
for (int i = 0; i < req->n_group; ++i) {
neu_reqresp_template_group_t *grp = &req->groups[i];
for (int i = 0; i < n_group; ++i) {
neu_reqresp_template_group_t *grp = &groups[i];
if (0 !=
(rv = neu_template_add_group(tmpl, grp->name, grp->interval))) {
goto error;
@@ -229,16 +230,17 @@ int neu_manager_get_templates(neu_manager_t * manager,
return 0;
}
int neu_manager_add_template_group(neu_manager_t * manager,
neu_req_add_template_group_t *req)
int neu_manager_add_template_group(neu_manager_t *manager,
const char *tmpl_name, const char *group,
uint32_t interval)
{
neu_template_t *tmpl =
neu_template_manager_find(manager->template_manager, req->tmpl);
neu_template_manager_find(manager->template_manager, tmpl_name);
if (NULL == tmpl) {
return NEU_ERR_TEMPLATE_NOT_FOUND;
}
return neu_template_add_group(tmpl, req->group, req->interval);
return neu_template_add_group(tmpl, group, interval);
}
int neu_manager_update_template_group(neu_manager_t * manager,
@@ -306,22 +308,22 @@ int neu_manager_get_template_group(neu_manager_t * manager,
return ret;
}
int neu_manager_add_template_tags(neu_manager_t * manager,
neu_req_add_template_tag_t *req,
uint16_t * index_p)
int neu_manager_add_template_tags(neu_manager_t *manager, const char *tmpl_name,
const char *group, uint16_t n_tag,
neu_datatag_t *tags, uint16_t *index_p)
{
int ret = 0;
neu_group_t *grp = NULL;
ret = neu_template_manager_find_group(manager->template_manager, req->tmpl,
req->group, &grp);
ret = neu_template_manager_find_group(manager->template_manager, tmpl_name,
group, &grp);
if (0 != ret) {
return ret;
}
int i = 0;
for (; i < req->n_tag; ++i) {
if (0 != (ret = neu_group_add_tag(grp, &req->tags[i]))) {
for (; i < n_tag; ++i) {
if (0 != (ret = neu_group_add_tag(grp, &tags[i]))) {
break;
}
}
+19 -17
View File
@@ -57,16 +57,18 @@ int neu_manager_del_node(neu_manager_t *manager, const char *node_name);
UT_array *neu_manager_get_nodes(neu_manager_t *manager, neu_node_type_e type,
const char *plugin, const char *node);
int neu_manager_add_template(neu_manager_t * manager,
neu_req_add_template_t *req);
int neu_manager_add_template(neu_manager_t *manager, const char *name,
const char *plugin, uint16_t n_group,
neu_reqresp_template_group_t *groups);
int neu_manager_del_template(neu_manager_t *manager, const char *name);
void neu_manager_clear_template(neu_manager_t *manager);
int neu_manager_get_template(neu_manager_t *manager, const char *name,
neu_resp_get_template_t *resp);
int neu_manager_get_templates(neu_manager_t * manager,
neu_resp_get_templates_t *resp);
int neu_manager_add_template_group(neu_manager_t * manager,
neu_req_add_template_group_t *req);
int neu_manager_add_template_group(neu_manager_t *manager,
const char *tmpl_name, const char *group,
uint32_t interval);
int neu_manager_update_template_group(neu_manager_t * manager,
neu_req_update_template_group_t *req);
int neu_manager_del_template_group(neu_manager_t * manager,
@@ -74,19 +76,19 @@ int neu_manager_del_template_group(neu_manager_t * manager,
int neu_manager_get_template_group(neu_manager_t * manager,
neu_req_get_template_group_t *req,
UT_array ** group_info_p);
int neu_manager_add_template_tags(neu_manager_t * manager,
neu_req_add_template_tag_t *req,
uint16_t * index_p);
int neu_manager_update_template_tags(neu_manager_t * manager,
neu_req_add_template_tag_t *req,
uint16_t * index_p);
int neu_manager_del_template_tags(neu_manager_t * manager,
neu_req_del_template_tag_t *req);
int neu_manager_get_template_tags(neu_manager_t * manager,
neu_req_get_template_tag_t *req,
UT_array ** tags_p);
int neu_manager_instantiate_template(neu_manager_t * manager,
neu_req_inst_template_t *req);
int neu_manager_add_template_tags(neu_manager_t *manager, const char *tmpl_name,
const char *group, uint16_t n_tag,
neu_datatag_t *tags, uint16_t *index_p);
int neu_manager_update_template_tags(neu_manager_t * manager,
neu_req_add_template_tag_t *req,
uint16_t * index_p);
int neu_manager_del_template_tags(neu_manager_t * manager,
neu_req_del_template_tag_t *req);
int neu_manager_get_template_tags(neu_manager_t * manager,
neu_req_get_template_tag_t *req,
UT_array ** tags_p);
int neu_manager_instantiate_template(neu_manager_t * manager,
neu_req_inst_template_t *req);
UT_array *neu_manager_get_driver_group(neu_manager_t *manager);
+66 -1
View File
@@ -390,4 +390,69 @@ int manager_load_subscribe(neu_manager_t *manager)
utarray_free(nodes);
return 0;
}
}
static int load_template_group_and_tags(neu_manager_t *manager,
const char * tmpl_name)
{
int rv = 0;
UT_array *group_infos = NULL;
rv = neu_persister_load_template_groups(tmpl_name, &group_infos);
if (0 != rv) {
nlog_warn("load template %s group fail", tmpl_name);
return rv;
}
utarray_foreach(group_infos, neu_persist_group_info_t *, p)
{
neu_manager_add_template_group(manager, tmpl_name, p->name,
p->interval);
UT_array *tags = NULL;
rv = neu_persister_load_template_tags(tmpl_name, p->name, &tags);
if (0 != rv) {
nlog_warn("load template:%s group:%s tags fail", tmpl_name,
p->name);
continue;
}
neu_manager_add_template_tags(manager, tmpl_name, p->name,
utarray_len(tags), utarray_front(tags),
NULL);
utarray_free(tags);
}
utarray_free(group_infos);
return rv;
}
int manager_load_template(neu_manager_t *manager)
{
int rv = 0;
UT_array *tmpl_infos = NULL;
rv = neu_persister_load_templates(&tmpl_infos);
if (0 != rv) {
nlog_error("failed to load template infos");
return -1;
}
utarray_foreach(tmpl_infos, neu_persist_template_info_t *, tmpl_info)
{
rv = neu_manager_add_template(manager, tmpl_info->name,
tmpl_info->plugin_name, 0, NULL);
const char *ok_or_err = (0 == rv) ? "success" : "fail";
nlog_info("load template name:%s plugin:%s %s", tmpl_info->name,
tmpl_info->plugin_name, ok_or_err);
if (0 != rv) {
continue; // ignore error, load as much data as possible
}
load_template_group_and_tags(manager, tmpl_info->name);
}
utarray_free(tmpl_infos);
return rv;
}
+1
View File
@@ -62,5 +62,6 @@ void manager_storage_del_template_tags(const char *tmpl, const char *group,
int manager_load_plugin(neu_manager_t *manager);
int manager_load_node(neu_manager_t *manager);
int manager_load_subscribe(neu_manager_t *manager);
int manager_load_template(neu_manager_t *manager);
#endif