/****************************************************************************** * * * Function: lld_graph_make * * * * Purpose: create a graph based on lld rule and add it to the list * * * ******************************************************************************/ static void lld_graph_make(zbx_vector_ptr_t *gitems_proto, zbx_vector_ptr_t *graphs, zbx_vector_ptr_t *items, const char *name_proto, zbx_uint64_t ymin_itemid_proto, zbx_uint64_t ymax_itemid_proto, zbx_lld_row_t *lld_row) { const char *__function_name = "lld_graph_make"; zbx_lld_graph_t *graph = NULL; char *buffer = NULL; struct zbx_json_parse *jp_row = &lld_row->jp_row; zbx_uint64_t ymin_itemid, ymax_itemid; zabbix_log(LOG_LEVEL_DEBUG, "In %s()", __function_name); if (0 == ymin_itemid_proto) ymin_itemid = 0; else if (SUCCEED != lld_item_get(ymin_itemid_proto, items, &lld_row->item_links, &ymin_itemid)) goto out; if (0 == ymax_itemid_proto) ymax_itemid = 0; else if (SUCCEED != lld_item_get(ymax_itemid_proto, items, &lld_row->item_links, &ymax_itemid)) goto out; if (NULL != (graph = lld_graph_get(gitems_proto, graphs, &lld_row->item_links))) { buffer = zbx_strdup(buffer, name_proto); substitute_discovery_macros(&buffer, jp_row, ZBX_MACRO_SIMPLE, NULL, 0); zbx_lrtrim(buffer, ZBX_WHITESPACE); if (0 != strcmp(graph->name, buffer)) { graph->name_orig = graph->name; graph->name = buffer; buffer = NULL; graph->flags |= ZBX_FLAG_LLD_GRAPH_UPDATE_NAME; } if (graph->ymin_itemid != ymin_itemid) { graph->ymin_itemid = ymin_itemid; graph->flags |= ZBX_FLAG_LLD_GRAPH_UPDATE_YMIN_ITEMID; } if (graph->ymax_itemid != ymax_itemid) { graph->ymax_itemid = ymax_itemid; graph->flags |= ZBX_FLAG_LLD_GRAPH_UPDATE_YMAX_ITEMID; } } else { graph = zbx_malloc(NULL, sizeof(zbx_lld_graph_t)); graph->graphid = 0; graph->name = zbx_strdup(NULL, name_proto); graph->name_orig = NULL; substitute_discovery_macros(&graph->name, jp_row, ZBX_MACRO_SIMPLE, NULL, 0); zbx_lrtrim(graph->name, ZBX_WHITESPACE); graph->ymin_itemid = ymin_itemid; graph->ymax_itemid = ymax_itemid; zbx_vector_ptr_create(&graph->gitems); graph->flags = ZBX_FLAG_LLD_GRAPH_UNSET; zbx_vector_ptr_append(graphs, graph); } zbx_free(buffer); if (SUCCEED != lld_gitems_make(gitems_proto, &graph->gitems, items, &lld_row->item_links)) return; graph->flags |= ZBX_FLAG_LLD_GRAPH_DISCOVERED; out: zabbix_log(LOG_LEVEL_DEBUG, "End of %s()", __function_name); }
/****************************************************************************** * * * Function: lld_trigger_make * * * * Purpose: create a trigger based on lld rule and add it to the list * * * ******************************************************************************/ static void lld_trigger_make(zbx_vector_ptr_t *functions_proto, zbx_vector_ptr_t *triggers, zbx_vector_ptr_t *items, const char *description_proto, const char *expression_proto, const char *comments_proto, zbx_lld_row_t *lld_row, char **error) { const char *__function_name = "lld_trigger_make"; zbx_lld_trigger_t *trigger = NULL; char *buffer = NULL, *expression = NULL, err[64]; struct zbx_json_parse *jp_row = &lld_row->jp_row; zabbix_log(LOG_LEVEL_DEBUG, "In %s()", __function_name); trigger = lld_trigger_get(triggers, &lld_row->item_links); expression = zbx_strdup(expression, expression_proto); if (SUCCEED != substitute_discovery_macros(&expression, jp_row, ZBX_MACRO_NUMERIC, err, sizeof(err))) { *error = zbx_strdcatf(*error, "Cannot %s trigger: %s.\n", (NULL != trigger ? "update" : "create"), err); goto out; } if (NULL != trigger) { buffer = zbx_strdup(buffer, description_proto); substitute_discovery_macros(&buffer, jp_row, ZBX_MACRO_ANY, NULL, 0); zbx_lrtrim(buffer, ZBX_WHITESPACE); if (0 != strcmp(trigger->description, buffer)) { trigger->description_orig = trigger->description; trigger->description = buffer; buffer = NULL; trigger->flags |= ZBX_FLAG_LLD_TRIGGER_UPDATE_DESCRIPTION; } if (0 != strcmp(trigger->expression, expression)) { trigger->expression_orig = trigger->expression; trigger->expression = expression; expression = NULL; trigger->flags |= ZBX_FLAG_LLD_TRIGGER_UPDATE_EXPRESSION; } buffer = zbx_strdup(buffer, comments_proto); substitute_discovery_macros(&buffer, jp_row, ZBX_MACRO_ANY, NULL, 0); zbx_lrtrim(buffer, ZBX_WHITESPACE); if (0 != strcmp(trigger->comments, buffer)) { trigger->comments_orig = trigger->comments; trigger->comments = buffer; buffer = NULL; trigger->flags |= ZBX_FLAG_LLD_TRIGGER_UPDATE_COMMENTS; } } else { trigger = zbx_malloc(NULL, sizeof(zbx_lld_trigger_t)); trigger->triggerid = 0; trigger->description = zbx_strdup(NULL, description_proto); trigger->description_orig = NULL; substitute_discovery_macros(&trigger->description, jp_row, ZBX_MACRO_ANY, NULL, 0); zbx_lrtrim(trigger->description, ZBX_WHITESPACE); trigger->expression = expression; trigger->expression_orig = NULL; expression = NULL; trigger->comments = zbx_strdup(NULL, comments_proto); trigger->comments_orig = NULL; substitute_discovery_macros(&trigger->comments, jp_row, ZBX_MACRO_ANY, NULL, 0); zbx_lrtrim(trigger->comments, ZBX_WHITESPACE); zbx_vector_ptr_create(&trigger->functions); trigger->flags = ZBX_FLAG_LLD_TRIGGER_UNSET; zbx_vector_ptr_append(triggers, trigger); } zbx_free(buffer); if (SUCCEED != lld_functions_make(functions_proto, &trigger->functions, items, &lld_row->item_links)) goto out; trigger->flags |= ZBX_FLAG_LLD_TRIGGER_DISCOVERED; out: zbx_free(expression); zabbix_log(LOG_LEVEL_DEBUG, "End of %s()", __function_name); }