~ko-de-r-de/zabbix/precise

« back to all changes in this revision

Viewing changes to src/libs/zbxdbhigh/lld.c

  • Committer: guntis
  • Date: 2013-08-01 06:46:25 UTC
  • Revision ID: svn-v4:f4e7fd02-d210-4e34-a1e0-d4093fb66cc2:trunk:37472
..F....... [ZBX-4986] absolute urls replaced with relative and fixed commit bugs

Show diffs side-by-side

added added

removed removed

Lines of Context:
23
23
#include "events.h"
24
24
#include "zbxalgo.h"
25
25
#include "zbxserver.h"
26
 
#include "zbxregexp.h"
27
26
 
28
27
typedef struct
29
28
{
329
328
        zabbix_log(LOG_LEVEL_DEBUG, "End of %s()", __function_name);
330
329
}
331
330
 
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,
 
332
        int regexps_num)
334
333
{
335
334
        const char      *__function_name = "lld_check_record";
336
335
 
345
344
                goto out;
346
345
 
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);
349
348
 
350
349
        zbx_free(value);
351
350
out:
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)
881
880
{
882
881
        const char              *__function_name = "DBlld_update_triggers";
883
882
 
951
950
                        if (FAIL == zbx_json_brackets_open(p, &jp_row))
952
951
                                continue;
953
952
 
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))
955
954
                                continue;
956
955
 
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)
1474
1473
{
1475
1474
        const char              *__function_name = "DBlld_update_graphs";
1476
1475
 
1590
1589
                        if (FAIL == zbx_json_brackets_open(p, &jp_row))
1591
1590
                                continue;
1592
1591
 
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))
1594
1593
                                continue;
1595
1594
 
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 = ",";
1664
1664
 
1665
1665
        zabbix_log(LOG_LEVEL_DEBUG, "In %s() itemid:" ZBX_FS_UI64, __function_name, discovery_itemid);
1666
1666
 
1667
 
        zbx_vector_ptr_create(&regexps);
1668
 
 
1669
1667
        result = DBselect(
1670
1668
                        "select hostid,key_,state,filter,error,lifetime"
1671
1669
                        " from items"
1724
1722
                *f_regexp++ = '\0';
1725
1723
 
1726
1724
                if ('@' == *f_regexp)
1727
 
                        DCget_expressions_by_name(&regexps, f_regexp + 1);
 
1725
                {
 
1726
                        DB_RESULT       result;
 
1727
                        DB_ROW          row;
 
1728
                        char            *f_regexp_esc;
 
1729
 
 
1730
                        f_regexp_esc = DBdyn_escape_string(f_regexp + 1);
 
1731
 
 
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"));
 
1737
 
 
1738
                        zbx_free(f_regexp_esc);
 
1739
 
 
1740
                        while (NULL != (row = DBfetch(result)))
 
1741
                        {
 
1742
                                add_regexp_ex(&regexps, &regexps_alloc, &regexps_num,
 
1743
                                                f_regexp + 1, row[0], atoi(row[1]), row[2][0], atoi(row[3]));
 
1744
                        }
 
1745
                        DBfree_result(result);
 
1746
                }
1728
1747
 
1729
1748
                zabbix_log(LOG_LEVEL_DEBUG, "%s() f_macro:'%s' f_regexp:'%s'",
1730
1749
                                __function_name, f_macro, f_regexp);
1731
1750
        }
1732
1751
 
1733
 
        DBlld_update_items(hostid, discovery_itemid, &jp_data, &error, f_macro, f_regexp, &regexps, lifetime, ts->sec);
1734
 
        DBlld_update_triggers(hostid, discovery_itemid, &jp_data, &error, f_macro, f_regexp, &regexps);
1735
 
        DBlld_update_graphs(hostid, discovery_itemid, &jp_data, &error, f_macro, f_regexp, &regexps);
 
1752
        DBlld_update_items(hostid, discovery_itemid, &jp_data, &error, f_macro, f_regexp, regexps, regexps_num,
 
1753
                        lifetime, ts->sec);
 
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);
 
1756
 
 
1757
        clean_regexps_ex(regexps, &regexps_num);
 
1758
        zbx_free(regexps);
1736
1759
 
1737
1760
        if (ITEM_STATE_NOTSUPPORTED == state)
1738
1761
        {
1768
1791
                DBcommit();
1769
1792
        }
1770
1793
clean:
1771
 
        zbx_regexp_clean_expressions(&regexps);
1772
 
        zbx_vector_ptr_destroy(&regexps);
1773
 
 
1774
1794
        zbx_free(error);
1775
1795
        zbx_free(db_error);
1776
1796
        zbx_free(filter);