/****************************************************************************** * * * Function: lld_update_graphs * * * * Purpose: add or update graphs for discovery item * * * * Parameters: hostid - [IN] host identificator from database * * agent - [IN] discovery item identificator from database * * jp_data - [IN] received data * * * * Author: Alexander Vladishev * * * ******************************************************************************/ void lld_update_graphs(zbx_uint64_t hostid, zbx_uint64_t lld_ruleid, zbx_vector_ptr_t *lld_rows, char **error) { const char *__function_name = "lld_update_graphs"; DB_RESULT result; DB_ROW row; zbx_vector_ptr_t graphs; zbx_vector_ptr_t gitems_proto; zbx_vector_ptr_t items; zabbix_log(LOG_LEVEL_DEBUG, "In %s()", __function_name); zbx_vector_ptr_create(&graphs); /* list of graphs which were created or will be created or */ /* updated by the graph prototype */ zbx_vector_ptr_create(&gitems_proto); /* list of graphs_items which are used by the graph prototype */ zbx_vector_ptr_create(&items); /* list of items which are related to the graph prototype */ result = DBselect( "select distinct g.graphid,g.name,g.width,g.height,g.yaxismin,g.yaxismax,g.show_work_period," "g.show_triggers,g.graphtype,g.show_legend,g.show_3d,g.percent_left,g.percent_right," "g.ymin_type,g.ymin_itemid,g.ymax_type,g.ymax_itemid" " from graphs g,graphs_items gi,items i,item_discovery id" " where g.graphid=gi.graphid" " and gi.itemid=i.itemid" " and i.itemid=id.itemid" " and id.parent_itemid=" ZBX_FS_UI64, lld_ruleid); while (NULL != (row = DBfetch(result))) { zbx_uint64_t parent_graphid, ymin_itemid_proto, ymax_itemid_proto; const char *name_proto; int width, height; double yaxismin, yaxismax, percent_left, percent_right; unsigned char show_work_period, show_triggers, graphtype, show_legend, show_3d, ymin_type, ymax_type; ZBX_STR2UINT64(parent_graphid, row[0]); name_proto = row[1]; width = atoi(row[2]); height = atoi(row[3]); yaxismin = atof(row[4]); yaxismax = atof(row[5]); ZBX_STR2UCHAR(show_work_period, row[6]); ZBX_STR2UCHAR(show_triggers, row[7]); ZBX_STR2UCHAR(graphtype, row[8]); ZBX_STR2UCHAR(show_legend, row[9]); ZBX_STR2UCHAR(show_3d, row[10]); percent_left = atof(row[11]); percent_right = atof(row[12]); ZBX_STR2UCHAR(ymin_type, row[13]); ZBX_DBROW2UINT64(ymin_itemid_proto, row[14]); ZBX_STR2UCHAR(ymax_type, row[15]); ZBX_DBROW2UINT64(ymax_itemid_proto, row[16]); lld_graphs_get(parent_graphid, &graphs, width, height, yaxismin, yaxismax, show_work_period, show_triggers, graphtype, show_legend, show_3d, percent_left, percent_right, ymin_type, ymax_type); lld_gitems_get(parent_graphid, &gitems_proto, &graphs); lld_items_get(&gitems_proto, ymin_itemid_proto, ymax_itemid_proto, &items); /* making graphs */ lld_graphs_make(&gitems_proto, &graphs, &items, name_proto, ymin_itemid_proto, ymax_itemid_proto, lld_rows); lld_graphs_validate(hostid, &graphs, error); lld_graphs_save(parent_graphid, &graphs, width, height, yaxismin, yaxismax, show_work_period, show_triggers, graphtype, show_legend, show_3d, percent_left, percent_right, ymin_type, ymax_type); lld_items_free(&items); lld_gitems_free(&gitems_proto); lld_graphs_free(&graphs); } DBfree_result(result); zbx_vector_ptr_destroy(&items); zbx_vector_ptr_destroy(&gitems_proto); zbx_vector_ptr_destroy(&graphs); zabbix_log(LOG_LEVEL_DEBUG, "End of %s()", __function_name); }
/****************************************************************************** * * * Function: lld_update_triggers * * * * Purpose: add or update triggers for discovered items * * * ******************************************************************************/ void lld_update_triggers(zbx_uint64_t hostid, zbx_uint64_t lld_ruleid, zbx_vector_ptr_t *lld_rows, char **error) { const char *__function_name = "lld_update_triggers"; DB_RESULT result; DB_ROW row; zbx_vector_ptr_t triggers; zbx_vector_ptr_t functions_proto; zbx_vector_ptr_t items; zbx_lld_trigger_t *trigger; zabbix_log(LOG_LEVEL_DEBUG, "In %s()", __function_name); zbx_vector_ptr_create(&triggers); /* list of triggers which were created or will be created or */ /* updated by the trigger prototype */ zbx_vector_ptr_create(&functions_proto); /* list of functions which are used by the trigger prototype */ zbx_vector_ptr_create(&items); /* list of items which are related to the trigger prototype */ result = DBselect( "select distinct t.triggerid,t.description,t.expression,t.status,t.type,t.priority,t.comments," "t.url" " from triggers t,functions f,items i,item_discovery id" " where t.triggerid=f.triggerid" " and f.itemid=i.itemid" " and i.itemid=id.itemid" " and id.parent_itemid=" ZBX_FS_UI64, lld_ruleid); /* run through trigger prototypes */ while (NULL != (row = DBfetch(result))) { zbx_uint64_t parent_triggerid; const char *description_proto, *comments_proto, *url; char *expression_proto; unsigned char status, type, priority; int i; ZBX_STR2UINT64(parent_triggerid, row[0]); description_proto = row[1]; expression_proto = zbx_strdup(NULL, row[2]); ZBX_STR2UCHAR(status, row[3]); ZBX_STR2UCHAR(type, row[4]); ZBX_STR2UCHAR(priority, row[5]); comments_proto = row[6]; url = row[7]; lld_triggers_get(parent_triggerid, &triggers, type, priority, url); lld_functions_get(parent_triggerid, &functions_proto, &triggers); lld_items_get(parent_triggerid, &items); /* simplifying trigger expressions */ lld_expression_simplify(&expression_proto, &functions_proto); for (i = 0; i < triggers.values_num; i++) { trigger = (zbx_lld_trigger_t *)triggers.values[i]; lld_expression_simplify(&trigger->expression, &trigger->functions); } /* making triggers */ lld_triggers_make(&functions_proto, &triggers, &items, description_proto, expression_proto, comments_proto, lld_rows, error); lld_triggers_validate(hostid, &triggers, error); lld_triggers_save(parent_triggerid, &triggers, status, type, priority, url); /* cleaning */ zbx_vector_ptr_clean(&items, (zbx_mem_free_func_t)lld_item_free); zbx_vector_ptr_clean(&functions_proto, (zbx_mem_free_func_t)lld_function_free); zbx_vector_ptr_clean(&triggers, (zbx_mem_free_func_t)lld_trigger_free); zbx_free(expression_proto); } DBfree_result(result); zbx_vector_ptr_destroy(&items); zbx_vector_ptr_destroy(&functions_proto); zbx_vector_ptr_destroy(&triggers); zabbix_log(LOG_LEVEL_DEBUG, "End of %s()", __function_name); }