329
328
zabbix_log(LOG_LEVEL_DEBUG, "End of %s()", __function_name);
332
int lld_check_record(struct zbx_json_parse *jp_row, const char *f_macro, const char *f_regexp,
333
zbx_vector_ptr_t *regexps)
331
int lld_check_record(struct zbx_json_parse *jp_row, const char *f_macro, const char *f_regexp, ZBX_REGEXP *regexps,
335
334
const char *__function_name = "lld_check_record";
347
346
if (SUCCEED == zbx_json_value_by_name_dyn(jp_row, f_macro, &value, &value_alloc))
348
res = regexp_match_ex(regexps, value, f_regexp, ZBX_CASE_SENSITIVE);
347
res = regexp_match_ex(regexps, regexps_num, value, f_regexp, ZBX_CASE_SENSITIVE);
877
876
******************************************************************************/
878
877
static void DBlld_update_triggers(zbx_uint64_t hostid, zbx_uint64_t discovery_itemid,
879
878
struct zbx_json_parse *jp_data, char **error, const char *f_macro,
880
const char *f_regexp, zbx_vector_ptr_t *regexps)
879
const char *f_regexp, ZBX_REGEXP *regexps, int regexps_num)
882
881
const char *__function_name = "DBlld_update_triggers";
951
950
if (FAIL == zbx_json_brackets_open(p, &jp_row))
954
if (SUCCEED != lld_check_record(&jp_row, f_macro, f_regexp, regexps))
953
if (SUCCEED != lld_check_record(&jp_row, f_macro, f_regexp, regexps, regexps_num))
957
956
DBlld_make_trigger(hostid, parent_triggerid, &triggers, description_proto, expression_proto,
1470
1469
******************************************************************************/
1471
1470
static void DBlld_update_graphs(zbx_uint64_t hostid, zbx_uint64_t discovery_itemid,
1472
1471
struct zbx_json_parse *jp_data, char **error, const char *f_macro,
1473
const char *f_regexp, zbx_vector_ptr_t *regexps)
1472
const char *f_regexp, ZBX_REGEXP *regexps, int regexps_num)
1475
1474
const char *__function_name = "DBlld_update_graphs";
1590
1589
if (FAIL == zbx_json_brackets_open(p, &jp_row))
1593
if (SUCCEED != lld_check_record(&jp_row, f_macro, f_regexp, regexps))
1592
if (SUCCEED != lld_check_record(&jp_row, f_macro, f_regexp, regexps, regexps_num))
1596
1595
DBlld_make_graph(hostid, parent_graphid, &graphs, name_proto, gitems_proto, gitems_proto_num,
1657
1656
unsigned char state = 0;
1658
1657
unsigned short lifetime;
1659
1658
char *f_macro = NULL, *f_regexp = NULL;
1660
zbx_vector_ptr_t regexps;
1659
ZBX_REGEXP *regexps = NULL;
1660
int regexps_alloc = 0, regexps_num = 0;
1661
1661
char *sql = NULL;
1662
1662
size_t sql_alloc = 128, sql_offset = 0;
1663
1663
const char *sql_start = "update items set ", *sql_continue = ",";
1665
1665
zabbix_log(LOG_LEVEL_DEBUG, "In %s() itemid:" ZBX_FS_UI64, __function_name, discovery_itemid);
1667
zbx_vector_ptr_create(®exps);
1669
1667
result = DBselect(
1670
1668
"select hostid,key_,state,filter,error,lifetime"
1724
1722
*f_regexp++ = '\0';
1726
1724
if ('@' == *f_regexp)
1727
DCget_expressions_by_name(®exps, f_regexp + 1);
1730
f_regexp_esc = DBdyn_escape_string(f_regexp + 1);
1732
result = DBselect("select e.expression,e.expression_type,e.exp_delimiter,e.case_sensitive"
1733
" from regexps r,expressions e"
1734
" where r.regexpid=e.regexpid"
1735
" and r.name='%s'" ZBX_SQL_NODE,
1736
f_regexp_esc, DBand_node_local("r.regexpid"));
1738
zbx_free(f_regexp_esc);
1740
while (NULL != (row = DBfetch(result)))
1742
add_regexp_ex(®exps, ®exps_alloc, ®exps_num,
1743
f_regexp + 1, row[0], atoi(row[1]), row[2][0], atoi(row[3]));
1745
DBfree_result(result);
1729
1748
zabbix_log(LOG_LEVEL_DEBUG, "%s() f_macro:'%s' f_regexp:'%s'",
1730
1749
__function_name, f_macro, f_regexp);
1733
DBlld_update_items(hostid, discovery_itemid, &jp_data, &error, f_macro, f_regexp, ®exps, lifetime, ts->sec);
1734
DBlld_update_triggers(hostid, discovery_itemid, &jp_data, &error, f_macro, f_regexp, ®exps);
1735
DBlld_update_graphs(hostid, discovery_itemid, &jp_data, &error, f_macro, f_regexp, ®exps);
1752
DBlld_update_items(hostid, discovery_itemid, &jp_data, &error, f_macro, f_regexp, regexps, regexps_num,
1754
DBlld_update_triggers(hostid, discovery_itemid, &jp_data, &error, f_macro, f_regexp, regexps, regexps_num);
1755
DBlld_update_graphs(hostid, discovery_itemid, &jp_data, &error, f_macro, f_regexp, regexps, regexps_num);
1757
clean_regexps_ex(regexps, ®exps_num);
1737
1760
if (ITEM_STATE_NOTSUPPORTED == state)