diff options
Diffstat (limited to 'src/libs/zbxcacheconfig/dbconfig_dump.c')
-rw-r--r-- | src/libs/zbxcacheconfig/dbconfig_dump.c | 1483 |
1 files changed, 1483 insertions, 0 deletions
diff --git a/src/libs/zbxcacheconfig/dbconfig_dump.c b/src/libs/zbxcacheconfig/dbconfig_dump.c new file mode 100644 index 00000000000..bda02393f27 --- /dev/null +++ b/src/libs/zbxcacheconfig/dbconfig_dump.c @@ -0,0 +1,1483 @@ +/* +** Zabbix +** Copyright (C) 2001-2022 Zabbix SIA +** +** This program is free software; you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation; either version 2 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program; if not, write to the Free Software +** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +**/ +#include "zbxcacheconfig.h" +#include "dbconfig.h" + +#include "zbxcommon.h" +#include "log.h" +#include "zbxalgo.h" + +static void DCdump_config(void) +{ + int i; + + zabbix_log(LOG_LEVEL_TRACE, "In %s()", __func__); + + if (NULL == config->config) + goto out; + + zabbix_log(LOG_LEVEL_TRACE, "revision:" ZBX_FS_UI64, config->revision.config_table); + zabbix_log(LOG_LEVEL_TRACE, "discovery_groupid:" ZBX_FS_UI64, config->config->discovery_groupid); + zabbix_log(LOG_LEVEL_TRACE, "snmptrap_logging:%hhu", config->config->snmptrap_logging); + zabbix_log(LOG_LEVEL_TRACE, "default_inventory_mode:%d", config->config->default_inventory_mode); + + zabbix_log(LOG_LEVEL_TRACE, "db:"); + zabbix_log(LOG_LEVEL_TRACE, " extension: %s", config->config->db.extension); + zabbix_log(LOG_LEVEL_TRACE, " history_compression_status: %d", + config->config->db.history_compression_status); + zabbix_log(LOG_LEVEL_TRACE, " history_compress_older: %d", config->config->db.history_compress_older); + + zabbix_log(LOG_LEVEL_TRACE, "autoreg_tls_accept:%hhu", config->config->autoreg_tls_accept); + + zabbix_log(LOG_LEVEL_TRACE, "severity names:"); + for (i = 0; TRIGGER_SEVERITY_COUNT > i; i++) + zabbix_log(LOG_LEVEL_TRACE, " %s", config->config->severity_name[i]); + + zabbix_log(LOG_LEVEL_TRACE, "housekeeping:"); + zabbix_log(LOG_LEVEL_TRACE, " events, mode:%u period:[trigger:%d internal:%d autoreg:%d discovery:%d]", + config->config->hk.events_mode, config->config->hk.events_trigger, + config->config->hk.events_internal, config->config->hk.events_autoreg, + config->config->hk.events_discovery); + + zabbix_log(LOG_LEVEL_TRACE, " audit, mode:%u period:%d", config->config->hk.audit_mode, + config->config->hk.audit); + + zabbix_log(LOG_LEVEL_TRACE, " it services, mode:%u period:%d", config->config->hk.services_mode, + config->config->hk.services); + + zabbix_log(LOG_LEVEL_TRACE, " user sessions, mode:%u period:%d", config->config->hk.sessions_mode, + config->config->hk.sessions); + + zabbix_log(LOG_LEVEL_TRACE, " history, mode:%u global:%u period:%d", config->config->hk.history_mode, + config->config->hk.history_global, config->config->hk.history); + + zabbix_log(LOG_LEVEL_TRACE, " trends, mode:%u global:%u period:%d", config->config->hk.trends_mode, + config->config->hk.trends_global, config->config->hk.trends); + + zabbix_log(LOG_LEVEL_TRACE, " default timezone '%s'", config->config->default_timezone); + + zabbix_log(LOG_LEVEL_TRACE, " auditlog_enabled: %d", config->config->auditlog_enabled); +out: + zabbix_log(LOG_LEVEL_TRACE, "End of %s()", __func__); +} + +static void DCdump_hosts(void) +{ + ZBX_DC_HOST *host; + zbx_hashset_iter_t iter; + zbx_vector_ptr_t index; + int i; + + zabbix_log(LOG_LEVEL_TRACE, "In %s()", __func__); + + zbx_vector_ptr_create(&index); + zbx_hashset_iter_reset(&config->hosts, &iter); + + while (NULL != (host = (ZBX_DC_HOST *)zbx_hashset_iter_next(&iter))) + zbx_vector_ptr_append(&index, host); + + zbx_vector_ptr_sort(&index, ZBX_DEFAULT_UINT64_PTR_COMPARE_FUNC); + + for (i = 0; i < index.values_num; i++) + { + int j; + + host = (ZBX_DC_HOST *)index.values[i]; + zabbix_log(LOG_LEVEL_TRACE, "hostid:" ZBX_FS_UI64 " host:'%s' name:'%s' status:%u revision:" ZBX_FS_UI64, + host->hostid, host->host, host->name, host->status, host->revision); + + zabbix_log(LOG_LEVEL_TRACE, " proxy_hostid:" ZBX_FS_UI64, host->proxy_hostid); + zabbix_log(LOG_LEVEL_TRACE, " data_expected_from:%d", host->data_expected_from); + + zabbix_log(LOG_LEVEL_TRACE, " maintenanceid:" ZBX_FS_UI64 " maintenance_status:%u maintenance_type:%u" + " maintenance_from:%d", host->maintenanceid, host->maintenance_status, + host->maintenance_type, host->maintenance_from); + + /* 'tls_connect' and 'tls_accept' must be respected even if encryption support is not compiled in */ + zabbix_log(LOG_LEVEL_TRACE, " tls:[connect:%u accept:%u]", host->tls_connect, host->tls_accept); +#if defined(HAVE_GNUTLS) || defined(HAVE_OPENSSL) + zabbix_log(LOG_LEVEL_TRACE, " tls:[issuer:'%s' subject:'%s']", host->tls_issuer, host->tls_subject); + + if (NULL != host->tls_dc_psk) + { + zabbix_log(LOG_LEVEL_TRACE, " tls:[psk_identity:'%s' psk:'%s' dc_psk:%u]", + host->tls_dc_psk->tls_psk_identity, host->tls_dc_psk->tls_psk, + host->tls_dc_psk->refcount); + } +#endif + for (j = 0; j < host->interfaces_v.values_num; j++) + { + ZBX_DC_INTERFACE *interface = (ZBX_DC_INTERFACE *)host->interfaces_v.values[j]; + + zabbix_log(LOG_LEVEL_TRACE, " interfaceid:" ZBX_FS_UI64, interface->interfaceid); + } + + zabbix_log(LOG_LEVEL_TRACE, " httptests:"); + for (j = 0; j < host->httptests.values_num; j++) + { + zabbix_log(LOG_LEVEL_TRACE, " httptestid:" ZBX_FS_UI64, + host->httptests.values[j]->httptestid); + } + + zabbix_log(LOG_LEVEL_TRACE, " items:"); + for (j = 0; j < host->items.values_num; j++) + zabbix_log(LOG_LEVEL_TRACE, " itemid:" ZBX_FS_UI64, host->items.values[j]->itemid); + } + + zbx_vector_ptr_destroy(&index); + + zabbix_log(LOG_LEVEL_TRACE, "End of %s()", __func__); +} + +static void DCdump_autoreg_hosts(void) +{ + ZBX_DC_AUTOREG_HOST *autoreg_host; + zbx_hashset_iter_t iter; + + zabbix_log(LOG_LEVEL_TRACE, "In %s()", __func__); + + zbx_hashset_iter_reset(&config->autoreg_hosts, &iter); + + while (NULL != (autoreg_host = (ZBX_DC_AUTOREG_HOST *)zbx_hashset_iter_next(&iter))) + { + zabbix_log(LOG_LEVEL_TRACE, " host:'%s' listen_ip:'%s' listen_dns:'%s' host_metadata:'%s' flags:%d" + " timestamp:%d listen_port:%u", + autoreg_host->host, autoreg_host->listen_ip, autoreg_host->listen_dns, + autoreg_host->host_metadata, autoreg_host->flags, autoreg_host->timestamp, + autoreg_host->listen_port); + } + + zabbix_log(LOG_LEVEL_TRACE, "End of %s()", __func__); +} + +static void DCdump_host_tags(void) +{ + zbx_dc_host_tag_t *host_tag; + zbx_dc_host_tag_index_t *host_tag_index; + zbx_hashset_iter_t iter; + zbx_vector_ptr_t index; + int i; + + zabbix_log(LOG_LEVEL_TRACE, "In %s()", __func__); + + zbx_vector_ptr_create(&index); + zbx_hashset_iter_reset(&config->host_tags_index, &iter); + + while (NULL != (host_tag_index = (zbx_dc_host_tag_index_t *)zbx_hashset_iter_next(&iter))) + zbx_vector_ptr_append(&index, host_tag_index); + + zbx_vector_ptr_sort(&index, ZBX_DEFAULT_UINT64_PTR_COMPARE_FUNC); + + for (i = 0; i < index.values_num; i++) + { + int j; + + host_tag_index = (zbx_dc_host_tag_index_t *)index.values[i]; + zabbix_log(LOG_LEVEL_TRACE, "hostid:" ZBX_FS_UI64, host_tag_index->hostid); + + for (j = 0; j < host_tag_index->tags.values_num; j++) + { + host_tag = (zbx_dc_host_tag_t *)host_tag_index->tags.values[j]; + zabbix_log(LOG_LEVEL_TRACE, " '%s':'%s'", host_tag->tag, host_tag->value); + } + } + + zbx_vector_ptr_destroy(&index); + + zabbix_log(LOG_LEVEL_TRACE, "End of %s()", __func__); +} + +static void DCdump_proxies(void) +{ + ZBX_DC_PROXY *proxy; + zbx_hashset_iter_t iter; + zbx_vector_ptr_t index; + int i, j; + + zabbix_log(LOG_LEVEL_TRACE, "In %s()", __func__); + + zbx_vector_ptr_create(&index); + zbx_hashset_iter_reset(&config->proxies, &iter); + + while (NULL != (proxy = (ZBX_DC_PROXY *)zbx_hashset_iter_next(&iter))) + zbx_vector_ptr_append(&index, proxy); + + zbx_vector_ptr_sort(&index, ZBX_DEFAULT_UINT64_PTR_COMPARE_FUNC); + + for (i = 0; i < index.values_num; i++) + { + proxy = (ZBX_DC_PROXY *)index.values[i]; + zabbix_log(LOG_LEVEL_TRACE, "hostid:" ZBX_FS_UI64 " location:%u revision:" ZBX_FS_UI64, proxy->hostid, + proxy->location, proxy->revision); + zabbix_log(LOG_LEVEL_TRACE, " proxy_address:'%s'", proxy->proxy_address); + zabbix_log(LOG_LEVEL_TRACE, " compress:%d", proxy->auto_compress); + zabbix_log(LOG_LEVEL_TRACE, " lastaccess:%d", proxy->lastaccess); + + zabbix_log(LOG_LEVEL_TRACE, " hosts:%d", proxy->hosts.values_num); + for (j = 0; j < proxy->hosts.values_num; j++) + zabbix_log(LOG_LEVEL_TRACE, " hostid:" ZBX_FS_UI64, proxy->hosts.values[j]->hostid); + + zabbix_log(LOG_LEVEL_TRACE, " removed hosts:%d", proxy->removed_hosts.values_num); + for (j = 0; j < proxy->removed_hosts.values_num; j++) + zabbix_log(LOG_LEVEL_TRACE, " hostid:" ZBX_FS_UI64 " revision:" ZBX_FS_UI64, + proxy->removed_hosts.values[j].hostid, proxy->removed_hosts.values[j].revision); + } + + zbx_vector_ptr_destroy(&index); + + zabbix_log(LOG_LEVEL_TRACE, "End of %s()", __func__); +} + +static void DCdump_ipmihosts(void) +{ + ZBX_DC_IPMIHOST *ipmihost; + zbx_hashset_iter_t iter; + zbx_vector_ptr_t index; + int i; + + zabbix_log(LOG_LEVEL_TRACE, "In %s()", __func__); + + zbx_vector_ptr_create(&index); + zbx_hashset_iter_reset(&config->ipmihosts, &iter); + + while (NULL != (ipmihost = (ZBX_DC_IPMIHOST *)zbx_hashset_iter_next(&iter))) + zbx_vector_ptr_append(&index, ipmihost); + + zbx_vector_ptr_sort(&index, ZBX_DEFAULT_UINT64_PTR_COMPARE_FUNC); + + for (i = 0; i < index.values_num; i++) + { + ipmihost = (ZBX_DC_IPMIHOST *)index.values[i]; + zabbix_log(LOG_LEVEL_TRACE, "hostid:" ZBX_FS_UI64 " ipmi:[username:'%s' password:'%s' authtype:%d" + " privilege:%u]", ipmihost->hostid, ipmihost->ipmi_username, ipmihost->ipmi_password, + ipmihost->ipmi_authtype, ipmihost->ipmi_privilege); + } + + zbx_vector_ptr_destroy(&index); + + zabbix_log(LOG_LEVEL_TRACE, "End of %s()", __func__); +} + +static void DCdump_host_inventories(void) +{ + ZBX_DC_HOST_INVENTORY *host_inventory; + zbx_hashset_iter_t iter; + zbx_vector_ptr_t index; + int i, j; + + zabbix_log(LOG_LEVEL_TRACE, "In %s()", __func__); + + zbx_vector_ptr_create(&index); + zbx_hashset_iter_reset(&config->host_inventories, &iter); + + while (NULL != (host_inventory = (ZBX_DC_HOST_INVENTORY *)zbx_hashset_iter_next(&iter))) + zbx_vector_ptr_append(&index, host_inventory); + + zbx_vector_ptr_sort(&index, ZBX_DEFAULT_UINT64_PTR_COMPARE_FUNC); + + for (i = 0; i < index.values_num; i++) + { + host_inventory = (ZBX_DC_HOST_INVENTORY *)index.values[i]; + zabbix_log(LOG_LEVEL_TRACE, "hostid:" ZBX_FS_UI64 " inventory_mode:%u", host_inventory->hostid, + host_inventory->inventory_mode); + + for (j = 0; j < HOST_INVENTORY_FIELD_COUNT; j++) + { + zabbix_log(LOG_LEVEL_TRACE, " %s: '%s'", DBget_inventory_field(j + 1), + host_inventory->values[j]); + } + } + + zbx_vector_ptr_destroy(&index); + + zabbix_log(LOG_LEVEL_TRACE, " End of %s()", __func__); +} + +static void DCdump_kvs_paths(void) +{ + zbx_dc_kvs_path_t *kvs_path; + zbx_dc_kv_t *kvs; + zbx_hashset_iter_t iter; + int i; + + zabbix_log(LOG_LEVEL_TRACE, "In %s()", __func__); + + for (i = 0; i < config->kvs_paths.values_num; i++) + { + kvs_path = (zbx_dc_kvs_path_t *)config->kvs_paths.values[i]; + zabbix_log(LOG_LEVEL_TRACE, "kvs_path:'%s'", kvs_path->path); + + zbx_hashset_iter_reset(&kvs_path->kvs, &iter); + while (NULL != (kvs = (zbx_dc_kv_t *)zbx_hashset_iter_next(&iter))) + { + int j; + + zabbix_log(LOG_LEVEL_TRACE, " key:'%s'", kvs->key); + + for (j = 0; j < kvs->macros.values_num; j++) + { + zabbix_log(LOG_LEVEL_TRACE, " hostid:" ZBX_FS_UI64 " macroid:" ZBX_FS_UI64, + kvs->macros.values[j].first, kvs->macros.values[j].second); + } + } + } + + zabbix_log(LOG_LEVEL_TRACE, "End of %s()", __func__); +} + +static void DCdump_interfaces(void) +{ + ZBX_DC_INTERFACE *interface; + ZBX_DC_SNMPINTERFACE *snmp; + zbx_hashset_iter_t iter; + zbx_vector_ptr_t index; + char *if_msg = NULL; + size_t alloc, offset; + int i; + + zabbix_log(LOG_LEVEL_TRACE, "In %s()", __func__); + + zbx_vector_ptr_create(&index); + zbx_hashset_iter_reset(&config->interfaces, &iter); + + while (NULL != (interface = (ZBX_DC_INTERFACE *)zbx_hashset_iter_next(&iter))) + zbx_vector_ptr_append(&index, interface); + + zbx_vector_ptr_sort(&index, ZBX_DEFAULT_UINT64_PTR_COMPARE_FUNC); + + for (i = 0; i < index.values_num; i++) + { + interface = (ZBX_DC_INTERFACE *)index.values[i]; + + zbx_snprintf_alloc(&if_msg, &alloc, &offset, "interfaceid:" ZBX_FS_UI64 " hostid:" ZBX_FS_UI64 + " ip:'%s' dns:'%s' port:'%s' type:%u main:%u useip:%u" + " available:%u errors_from:%d disable_until:%d error:'%s' availability_ts:%d" + " reset_availability:%d items_num %d", + interface->interfaceid, interface->hostid, interface->ip, interface->dns, + interface->port, interface->type, interface->main, interface->useip, + interface->available, interface->errors_from, interface->disable_until, + interface->error, interface->availability_ts, interface->reset_availability, + interface->items_num); + + if (INTERFACE_TYPE_SNMP == interface->type && + NULL != (snmp = (ZBX_DC_SNMPINTERFACE *)zbx_hashset_search(&config->interfaces_snmp, + &interface->interfaceid))) + { + zbx_snprintf_alloc(&if_msg, &alloc, &offset, "snmp:[bulk:%u snmp_type:%u community:'%s']", + snmp->bulk, snmp->version, snmp->community); + + if (ZBX_IF_SNMP_VERSION_3 == snmp->version) + { + zbx_snprintf_alloc(&if_msg, &alloc, &offset," snmpv3:[" + "securityname:'%s' securitylevel:%u authprotocol:%u privprotocol:%u" + " contextname:'%s']", snmp->securityname, snmp->securitylevel, + snmp->authprotocol, snmp->privprotocol, snmp->contextname); + } + } + + zabbix_log(LOG_LEVEL_TRACE, "%s", if_msg); + + offset = 0; + } + + zbx_free(if_msg); + zbx_vector_ptr_destroy(&index); + + zabbix_log(LOG_LEVEL_TRACE, "End of %s()", __func__); +} + +static void DCdump_numitem(const ZBX_DC_NUMITEM *numitem) +{ + zabbix_log(LOG_LEVEL_TRACE, " units:'%s' trends:%s", numitem->units, numitem->trends_period); +} + +static void DCdump_snmpitem(const ZBX_DC_SNMPITEM *snmpitem) +{ + zabbix_log(LOG_LEVEL_TRACE, " snmp:[oid:'%s' oid_type:%u]", snmpitem->snmp_oid, snmpitem->snmp_oid_type); +} + +static void DCdump_ipmiitem(const ZBX_DC_IPMIITEM *ipmiitem) +{ + zabbix_log(LOG_LEVEL_TRACE, " ipmi_sensor:'%s'", ipmiitem->ipmi_sensor); +} + +static void DCdump_trapitem(const ZBX_DC_TRAPITEM *trapitem) +{ + zabbix_log(LOG_LEVEL_TRACE, " trapper_hosts:'%s'", trapitem->trapper_hosts); +} + +static void DCdump_logitem(ZBX_DC_LOGITEM *logitem) +{ + zabbix_log(LOG_LEVEL_TRACE, " logtimefmt:'%s'", logitem->logtimefmt); +} + +static void DCdump_dbitem(const ZBX_DC_DBITEM *dbitem) +{ + zabbix_log(LOG_LEVEL_TRACE, " db:[params:'%s' username:'%s' password:'%s']", dbitem->params, + dbitem->username, dbitem->password); +} + +static void DCdump_sshitem(const ZBX_DC_SSHITEM *sshitem) +{ + zabbix_log(LOG_LEVEL_TRACE, " ssh:[username:'%s' password:'%s' authtype:%u params:'%s']", + sshitem->username, sshitem->password, sshitem->authtype, sshitem->params); + zabbix_log(LOG_LEVEL_TRACE, " ssh:[publickey:'%s' privatekey:'%s']", sshitem->publickey, + sshitem->privatekey); +} + +static void DCdump_httpitem(const ZBX_DC_HTTPITEM *httpitem) +{ + zabbix_log(LOG_LEVEL_TRACE, " http:[url:'%s']", httpitem->url); + zabbix_log(LOG_LEVEL_TRACE, " http:[query fields:'%s']", httpitem->query_fields); + zabbix_log(LOG_LEVEL_TRACE, " http:[headers:'%s']", httpitem->headers); + zabbix_log(LOG_LEVEL_TRACE, " http:[posts:'%s']", httpitem->posts); + + zabbix_log(LOG_LEVEL_TRACE, " http:[timeout:'%s' status codes:'%s' follow redirects:%u post type:%u" + " http proxy:'%s' retrieve mode:%u request method:%u output format:%u allow traps:%u" + " trapper_hosts:'%s']", + httpitem->timeout, httpitem->status_codes, httpitem->follow_redirects, httpitem->post_type, + httpitem->http_proxy, httpitem->retrieve_mode, httpitem->request_method, + httpitem->output_format, httpitem->allow_traps, httpitem->trapper_hosts); + + zabbix_log(LOG_LEVEL_TRACE, " http:[username:'%s' password:'%s' authtype:%u]", + httpitem->username, httpitem->password, httpitem->authtype); + zabbix_log(LOG_LEVEL_TRACE, " http:[publickey:'%s' privatekey:'%s' ssl key password:'%s' verify peer:%u" + " verify host:%u]", httpitem->ssl_cert_file, httpitem->ssl_key_file, httpitem->ssl_key_password, + httpitem->verify_peer, httpitem->verify_host); +} + +static void DCdump_scriptitem(const ZBX_DC_SCRIPTITEM *scriptitem) +{ + int i; + + zabbix_log(LOG_LEVEL_TRACE, " script:[timeout:'%s' script:'%s']", scriptitem->timeout, scriptitem->script); + + for (i = 0; i < scriptitem->params.values_num; i++) + { + zbx_dc_scriptitem_param_t *params = (zbx_dc_scriptitem_param_t *)scriptitem->params.values[i]; + + zabbix_log(LOG_LEVEL_TRACE, " item_script_paramid:" ZBX_FS_UI64 " name: '%s' value:'%s'", + params->item_script_paramid, params->name, params->value); + } +} + +static void DCdump_telnetitem(const ZBX_DC_TELNETITEM *telnetitem) +{ + zabbix_log(LOG_LEVEL_TRACE, " telnet:[username:'%s' password:'%s' params:'%s']", telnetitem->username, + telnetitem->password, telnetitem->params); +} + +static void DCdump_simpleitem(const ZBX_DC_SIMPLEITEM *simpleitem) +{ + zabbix_log(LOG_LEVEL_TRACE, " simple:[username:'%s' password:'%s']", simpleitem->username, + simpleitem->password); +} + +static void DCdump_jmxitem(const ZBX_DC_JMXITEM *jmxitem) +{ + zabbix_log(LOG_LEVEL_TRACE, " jmx:[username:'%s' password:'%s' endpoint:'%s']", + jmxitem->username, jmxitem->password, jmxitem->jmx_endpoint); +} + +static void DCdump_calcitem(const ZBX_DC_CALCITEM *calcitem) +{ + zabbix_log(LOG_LEVEL_TRACE, " calc:[params:'%s']", calcitem->params); +} + +static void DCdump_masteritem(const ZBX_DC_MASTERITEM *masteritem) +{ + int i; + + zabbix_log(LOG_LEVEL_TRACE, " dependent:"); + for (i = 0; i < masteritem->dep_itemids.values_num; i++) + { + zabbix_log(LOG_LEVEL_TRACE, " itemid:" ZBX_FS_UI64 " flags:" ZBX_FS_UI64, + masteritem->dep_itemids.values[i].first, masteritem->dep_itemids.values[i].second); + } +} + +static void DCdump_preprocitem(const ZBX_DC_PREPROCITEM *preprocitem) +{ + int i; + + zabbix_log(LOG_LEVEL_TRACE, " preprocessing:"); + + for (i = 0; i < preprocitem->preproc_ops.values_num; i++) + { + zbx_dc_preproc_op_t *op = (zbx_dc_preproc_op_t *)preprocitem->preproc_ops.values[i]; + zabbix_log(LOG_LEVEL_TRACE, " opid:" ZBX_FS_UI64 " step:%d type:%u params:'%s'" + " error_handler:%d error_handler_params:'%s'", + op->item_preprocid, op->step, op->type, op->params, op->error_handler, op->error_handler_params); + } +} + +/* item type specific information debug logging support */ + +typedef void (*zbx_dc_dump_func_t)(void *); + +typedef struct +{ + zbx_hashset_t *hashset; + zbx_dc_dump_func_t dump_func; +} +zbx_trace_item_t; + +static void DCdump_item_tags(const ZBX_DC_ITEM *item) +{ + int i; + zbx_vector_ptr_t index; + + zbx_vector_ptr_create(&index); + + zbx_vector_ptr_append_array(&index, item->tags.values, item->tags.values_num); + zbx_vector_ptr_sort(&index, ZBX_DEFAULT_UINT64_PTR_COMPARE_FUNC); + + zabbix_log(LOG_LEVEL_TRACE, " tags:"); + + for (i = 0; i < index.values_num; i++) + { + zbx_dc_item_tag_t *tag = (zbx_dc_item_tag_t *)index.values[i]; + zabbix_log(LOG_LEVEL_TRACE, " tagid:" ZBX_FS_UI64 " tag:'%s' value:'%s'", + tag->itemtagid, tag->tag, tag->value); + } + + zbx_vector_ptr_destroy(&index); +} + +static void DCdump_items(void) +{ + ZBX_DC_ITEM *item; + zbx_hashset_iter_t iter; + int i, j; + zbx_vector_ptr_t index; + void *ptr; + zbx_trace_item_t trace_items[] = + { + {&config->numitems, (zbx_dc_dump_func_t)DCdump_numitem}, + {&config->snmpitems, (zbx_dc_dump_func_t)DCdump_snmpitem}, + {&config->ipmiitems, (zbx_dc_dump_func_t)DCdump_ipmiitem}, + {&config->trapitems, (zbx_dc_dump_func_t)DCdump_trapitem}, + {&config->logitems, (zbx_dc_dump_func_t)DCdump_logitem}, + {&config->dbitems, (zbx_dc_dump_func_t)DCdump_dbitem}, + {&config->sshitems, (zbx_dc_dump_func_t)DCdump_sshitem}, + {&config->telnetitems, (zbx_dc_dump_func_t)DCdump_telnetitem}, + {&config->simpleitems, (zbx_dc_dump_func_t)DCdump_simpleitem}, + {&config->jmxitems, (zbx_dc_dump_func_t)DCdump_jmxitem}, + {&config->calcitems, (zbx_dc_dump_func_t)DCdump_calcitem}, + {&config->httpitems, (zbx_dc_dump_func_t)DCdump_httpitem}, + {&config->scriptitems, (zbx_dc_dump_func_t)DCdump_scriptitem}, + }; + + zabbix_log(LOG_LEVEL_TRACE, "In %s()", __func__); + + zbx_vector_ptr_create(&index); + zbx_hashset_iter_reset(&config->items, &iter); + + while (NULL != (item = (ZBX_DC_ITEM *)zbx_hashset_iter_next(&iter))) + zbx_vector_ptr_append(&index, item); + + zbx_vector_ptr_sort(&index, ZBX_DEFAULT_UINT64_PTR_COMPARE_FUNC); + + for (i = 0; i < index.values_num; i++) + { + item = (ZBX_DC_ITEM *)index.values[i]; + zabbix_log(LOG_LEVEL_TRACE, "itemid:" ZBX_FS_UI64 " hostid:" ZBX_FS_UI64 " key:'%s' revision:" ZBX_FS_UI64, + item->itemid, item->hostid, item->key, item->revision); + zabbix_log(LOG_LEVEL_TRACE, " type:%u value_type:%u", item->type, item->value_type); + zabbix_log(LOG_LEVEL_TRACE, " interfaceid:" ZBX_FS_UI64, item->interfaceid); + zabbix_log(LOG_LEVEL_TRACE, " state:%u error:'%s'", item->state, item->error); + zabbix_log(LOG_LEVEL_TRACE, " flags:%u status:%u", item->flags, item->status); + zabbix_log(LOG_LEVEL_TRACE, " valuemapid:" ZBX_FS_UI64, item->valuemapid); + zabbix_log(LOG_LEVEL_TRACE, " lastlogsize:" ZBX_FS_UI64 " mtime:%d", item->lastlogsize, item->mtime); + zabbix_log(LOG_LEVEL_TRACE, " delay:'%s' nextcheck:%d", item->delay, item->nextcheck); + zabbix_log(LOG_LEVEL_TRACE, " data_expected_from:%d", item->data_expected_from); + zabbix_log(LOG_LEVEL_TRACE, " history:%s", item->history_period); + zabbix_log(LOG_LEVEL_TRACE, " poller_type:%u location:%u", item->poller_type, item->location); + zabbix_log(LOG_LEVEL_TRACE, " inventory_link:%u", item->inventory_link); + zabbix_log(LOG_LEVEL_TRACE, " priority:%u", item->queue_priority); + + for (j = 0; j < (int)ARRSIZE(trace_items); j++) + { + if (NULL != (ptr = zbx_hashset_search(trace_items[j].hashset, &item->itemid))) + trace_items[j].dump_func(ptr); + } + + if (NULL != item->master_item) + DCdump_masteritem(item->master_item); + + if (NULL != item->preproc_item) + DCdump_preprocitem(item->preproc_item); + + if (0 != item->tags.values_num) + DCdump_item_tags(item); + + if (NULL != item->triggers) + { + ZBX_DC_TRIGGER *trigger; + + zabbix_log(LOG_LEVEL_TRACE, " triggers:"); + + for (j = 0; NULL != (trigger = item->triggers[j]); j++) + zabbix_log(LOG_LEVEL_TRACE, " triggerid:" ZBX_FS_UI64, trigger->triggerid); + } + } + + zbx_vector_ptr_destroy(&index); + + zabbix_log(LOG_LEVEL_TRACE, "End of %s()", __func__); +} + +static void DCdump_interface_snmpitems(void) +{ + ZBX_DC_INTERFACE_ITEM *interface_snmpitem; + zbx_hashset_iter_t iter; + int i, j; + zbx_vector_ptr_t index; + + zabbix_log(LOG_LEVEL_TRACE, "In %s()", __func__); + + zbx_vector_ptr_create(&index); + zbx_hashset_iter_reset(&config->interface_snmpitems, &iter); + + while (NULL != (interface_snmpitem = (ZBX_DC_INTERFACE_ITEM *)zbx_hashset_iter_next(&iter))) + zbx_vector_ptr_append(&index, interface_snmpitem); + + zbx_vector_ptr_sort(&index, ZBX_DEFAULT_UINT64_PTR_COMPARE_FUNC); + + for (i = 0; i < index.values_num; i++) + { + interface_snmpitem = (ZBX_DC_INTERFACE_ITEM *)index.values[i]; + zabbix_log(LOG_LEVEL_TRACE, "interfaceid:" ZBX_FS_UI64, interface_snmpitem->interfaceid); + + for (j = 0; j < interface_snmpitem->itemids.values_num; j++) + zabbix_log(LOG_LEVEL_TRACE, " itemid:" ZBX_FS_UI64, interface_snmpitem->itemids.values[j]); + } + + zbx_vector_ptr_destroy(&index); + + zabbix_log(LOG_LEVEL_TRACE, "End of %s()", __func__); +} + +static void DCdump_template_items(void) +{ + ZBX_DC_TEMPLATE_ITEM *template_item; + zbx_hashset_iter_t iter; + int i; + zbx_vector_ptr_t index; + + zabbix_log(LOG_LEVEL_TRACE, "In %s()", __func__); + + zbx_vector_ptr_create(&index); + zbx_hashset_iter_reset(&config->template_items, &iter); + + while (NULL != (template_item = (ZBX_DC_TEMPLATE_ITEM *)zbx_hashset_iter_next(&iter))) + zbx_vector_ptr_append(&index, template_item); + + zbx_vector_ptr_sort(&index, ZBX_DEFAULT_UINT64_PTR_COMPARE_FUNC); + + for (i = 0; i < index.values_num; i++) + { + template_item = (ZBX_DC_TEMPLATE_ITEM *)index.values[i]; + zabbix_log(LOG_LEVEL_TRACE, "itemid:" ZBX_FS_UI64 " hostid:" ZBX_FS_UI64 " templateid:" ZBX_FS_UI64, + template_item->itemid, template_item->hostid, template_item->templateid); + } + + zbx_vector_ptr_destroy(&index); + + zabbix_log(LOG_LEVEL_TRACE, "End of %s()", __func__); +} + +static void DCdump_item_discovery(void) +{ + ZBX_DC_ITEM_DISCOVERY *item_discovery; + zbx_hashset_iter_t iter; + int i; + zbx_vector_ptr_t index; + + zabbix_log(LOG_LEVEL_TRACE, "In %s()", __func__); + + zbx_vector_ptr_create(&index); + zbx_hashset_iter_reset(&config->item_discovery, &iter); + + while (NULL != (item_discovery = (ZBX_DC_ITEM_DISCOVERY *)zbx_hashset_iter_next(&iter))) + zbx_vector_ptr_append(&index, item_discovery); + + zbx_vector_ptr_sort(&index, ZBX_DEFAULT_UINT64_PTR_COMPARE_FUNC); + + for (i = 0; i < index.values_num; i++) + { + item_discovery = (ZBX_DC_ITEM_DISCOVERY *)index.values[i]; + zabbix_log(LOG_LEVEL_TRACE, "itemid:" ZBX_FS_UI64 " parent_itemid:" ZBX_FS_UI64, + item_discovery->itemid, item_discovery->parent_itemid); + } + + zbx_vector_ptr_destroy(&index); + + zabbix_log(LOG_LEVEL_TRACE, "End of %s()", __func__); +} + +static void DCdump_prototype_items(void) +{ + ZBX_DC_PROTOTYPE_ITEM *proto_item; + zbx_hashset_iter_t iter; + int i; + zbx_vector_ptr_t index; + + zabbix_log(LOG_LEVEL_TRACE, "In %s()", __func__); + + zbx_vector_ptr_create(&index); + zbx_hashset_iter_reset(&config->template_items, &iter); + + while (NULL != (proto_item = (ZBX_DC_PROTOTYPE_ITEM *)zbx_hashset_iter_next(&iter))) + zbx_vector_ptr_append(&index, proto_item); + + zbx_vector_ptr_sort(&index, ZBX_DEFAULT_UINT64_PTR_COMPARE_FUNC); + + for (i = 0; i < index.values_num; i++) + { + proto_item = (ZBX_DC_PROTOTYPE_ITEM *)index.values[i]; + zabbix_log(LOG_LEVEL_TRACE, "itemid:" ZBX_FS_UI64 " hostid:" ZBX_FS_UI64 " templateid:" ZBX_FS_UI64, + proto_item->itemid, proto_item->hostid, proto_item->templateid); + } + + zbx_vector_ptr_destroy(&index); + + zabbix_log(LOG_LEVEL_TRACE, "End of %s()", __func__); +} + +static void DCdump_functions(void) +{ + ZBX_DC_FUNCTION *function; + zbx_hashset_iter_t iter; + int i; + zbx_vector_ptr_t index; + + zabbix_log(LOG_LEVEL_TRACE, "In %s()", __func__); + + zbx_vector_ptr_create(&index); + zbx_hashset_iter_reset(&config->functions, &iter); + + while (NULL != (function = (ZBX_DC_FUNCTION *)zbx_hashset_iter_next(&iter))) + zbx_vector_ptr_append(&index, function); + + zbx_vector_ptr_sort(&index, ZBX_DEFAULT_UINT64_PTR_COMPARE_FUNC); + + for (i = 0; i < index.values_num; i++) + { + function = (ZBX_DC_FUNCTION *)index.values[i]; + zabbix_log(LOG_LEVEL_DEBUG, "functionid:" ZBX_FS_UI64 " triggerid:" ZBX_FS_UI64 " itemid:" + ZBX_FS_UI64 " function:'%s' parameter:'%s' type:%u timer_revision:" ZBX_FS_UI64, + function->functionid, function->triggerid, function->itemid, function->function, + function->parameter, function->type, function->timer_revision); + + } + + zbx_vector_ptr_destroy(&index); + + zabbix_log(LOG_LEVEL_TRACE, "End of %s()", __func__); +} + +static void DCdump_trigger_tags(const ZBX_DC_TRIGGER *trigger) +{ + int i; + zbx_vector_ptr_t index; + + zbx_vector_ptr_create(&index); + + zbx_vector_ptr_append_array(&index, trigger->tags.values, trigger->tags.values_num); + zbx_vector_ptr_sort(&index, ZBX_DEFAULT_UINT64_PTR_COMPARE_FUNC); + + zabbix_log(LOG_LEVEL_TRACE, " tags:"); + + for (i = 0; i < index.values_num; i++) + { + zbx_dc_trigger_tag_t *tag = (zbx_dc_trigger_tag_t *)index.values[i]; + zabbix_log(LOG_LEVEL_TRACE, " tagid:" ZBX_FS_UI64 " tag:'%s' value:'%s'", + tag->triggertagid, tag->tag, tag->value); + } + + zbx_vector_ptr_destroy(&index); +} + +static void DCdump_triggers(void) +{ + ZBX_DC_TRIGGER *trigger; + zbx_hashset_iter_t iter; + int i; + zbx_vector_ptr_t index; + + zabbix_log(LOG_LEVEL_TRACE, "In %s()", __func__); + + zbx_vector_ptr_create(&index); + zbx_hashset_iter_reset(&config->triggers, &iter); + + while (NULL != (trigger = (ZBX_DC_TRIGGER *)zbx_hashset_iter_next(&iter))) + zbx_vector_ptr_append(&index, trigger); + + zbx_vector_ptr_sort(&index, ZBX_DEFAULT_UINT64_PTR_COMPARE_FUNC); + + for (i = 0; i < index.values_num; i++) + { + zbx_uint64_t *itemid; + + trigger = (ZBX_DC_TRIGGER *)index.values[i]; + if (ZBX_FLAG_DISCOVERY_PROTOTYPE == trigger->flags) + { + zabbix_log(LOG_LEVEL_TRACE, "triggerid:" ZBX_FS_UI64 " flags:%u", trigger->triggerid, + trigger->flags); + continue; + } + + zabbix_log(LOG_LEVEL_TRACE, "triggerid:" ZBX_FS_UI64 " description:'%s' event_name:'%s' type:%u" + " status:%u priority:%u flags:%u", trigger->triggerid, trigger->description, + trigger->event_name, trigger->type, trigger->status, trigger->priority, trigger->flags); + zabbix_log(LOG_LEVEL_TRACE, " expression:'%s' recovery_expression:'%s'", trigger->expression, + trigger->recovery_expression); + zabbix_log(LOG_LEVEL_TRACE, " value:%u state:%u error:'%s' lastchange:%d", trigger->value, + trigger->state, ZBX_NULL2EMPTY_STR(trigger->error), trigger->lastchange); + zabbix_log(LOG_LEVEL_TRACE, " correlation_tag:'%s' recovery_mode:'%u' correlation_mode:'%u'", + trigger->correlation_tag, trigger->recovery_mode, trigger->correlation_mode); + zabbix_log(LOG_LEVEL_TRACE, " topoindex:%u functional:%u locked:%u", trigger->topoindex, + trigger->functional, trigger->locked); + zabbix_log(LOG_LEVEL_TRACE, " opdata:'%s'", trigger->opdata); + + if (NULL != trigger->itemids) + { + zabbix_log(LOG_LEVEL_TRACE, " itemids:"); + + for (itemid = trigger->itemids; 0 != *itemid; itemid++) + zabbix_log(LOG_LEVEL_TRACE, " " ZBX_FS_UI64, *itemid); + } + + if (0 != trigger->tags.values_num) + DCdump_trigger_tags(trigger); + } + + zbx_vector_ptr_destroy(&index); + + zabbix_log(LOG_LEVEL_TRACE, "End of %s()", __func__); +} + +static void DCdump_trigdeps(void) +{ + ZBX_DC_TRIGGER_DEPLIST *trigdep; + zbx_hashset_iter_t iter; + int i, j; + zbx_vector_ptr_t index; + + zabbix_log(LOG_LEVEL_TRACE, "In %s()", __func__); + + zbx_vector_ptr_create(&index); + zbx_hashset_iter_reset(&config->trigdeps, &iter); + + while (NULL != (trigdep = (ZBX_DC_TRIGGER_DEPLIST *)zbx_hashset_iter_next(&iter))) + zbx_vector_ptr_append(&index, trigdep); + + zbx_vector_ptr_sort(&index, ZBX_DEFAULT_UINT64_PTR_COMPARE_FUNC); + + for (i = 0; i < index.values_num; i++) + { + trigdep = (ZBX_DC_TRIGGER_DEPLIST *)index.values[i]; + zabbix_log(LOG_LEVEL_TRACE, "triggerid:" ZBX_FS_UI64 " refcount:%d", trigdep->triggerid, + trigdep->refcount); + + for (j = 0; j < trigdep->dependencies.values_num; j++) + { + const ZBX_DC_TRIGGER_DEPLIST *trigdep_up = (ZBX_DC_TRIGGER_DEPLIST *)trigdep->dependencies.values[j]; + + zabbix_log(LOG_LEVEL_TRACE, " triggerid:" ZBX_FS_UI64, trigdep_up->triggerid); + } + } + + zbx_vector_ptr_destroy(&index); + + zabbix_log(LOG_LEVEL_TRACE, "End of %s()", __func__); +} + +static void DCdump_expressions(void) +{ + ZBX_DC_EXPRESSION *expression; + zbx_hashset_iter_t iter; + int i; + zbx_vector_ptr_t index; + + zabbix_log(LOG_LEVEL_TRACE, "In %s()", __func__); + + zabbix_log(LOG_LEVEL_TRACE, "expression_revision:" ZBX_FS_UI64, config->revision.expression); + + zbx_vector_ptr_create(&index); + zbx_hashset_iter_reset(&config->expressions, &iter); + + while (NULL != (expression = (ZBX_DC_EXPRESSION *)zbx_hashset_iter_next(&iter))) + zbx_vector_ptr_append(&index, expression); + + zbx_vector_ptr_sort(&index, ZBX_DEFAULT_UINT64_PTR_COMPARE_FUNC); + + for (i = 0; i < index.values_num; i++) + { + expression = (ZBX_DC_EXPRESSION *)index.values[i]; + zabbix_log(LOG_LEVEL_TRACE, "expressionid:" ZBX_FS_UI64 " regexp:'%s' expression:'%s delimiter:%d" + " type:%u case_sensitive:%u", expression->expressionid, expression->regexp, + expression->expression, expression->delimiter, expression->type, + expression->case_sensitive); + } + + zbx_vector_ptr_destroy(&index); + + zabbix_log(LOG_LEVEL_TRACE, "End of %s()", __func__); +} + +static void DCdump_actions(void) +{ + zbx_dc_action_t *action; + zbx_hashset_iter_t iter; + int i, j; + zbx_vector_ptr_t index; + + zabbix_log(LOG_LEVEL_TRACE, "In %s()", __func__); + + zbx_vector_ptr_create(&index); + zbx_hashset_iter_reset(&config->actions, &iter); + + while (NULL != (action = (zbx_dc_action_t *)zbx_hashset_iter_next(&iter))) + zbx_vector_ptr_append(&index, action); + + zbx_vector_ptr_sort(&index, ZBX_DEFAULT_UINT64_PTR_COMPARE_FUNC); + + for (i = 0; i < index.values_num; i++) + { + action = (zbx_dc_action_t *)index.values[i]; + zabbix_log(LOG_LEVEL_TRACE, "actionid:" ZBX_FS_UI64 " formula:'%s' eventsource:%u evaltype:%u" + " opflags:%x", action->actionid, action->formula, action->eventsource, action->evaltype, + action->opflags); + + for (j = 0; j < action->conditions.values_num; j++) + { + zbx_dc_action_condition_t *condition = (zbx_dc_action_condition_t *)action->conditions.values[j]; + + zabbix_log(LOG_LEVEL_TRACE, " conditionid:" ZBX_FS_UI64 " conditiontype:%u operator:%u" + " value:'%s' value2:'%s'", condition->conditionid, condition->conditiontype, + condition->op, condition->value, condition->value2); + } + } + + zbx_vector_ptr_destroy(&index); + + zabbix_log(LOG_LEVEL_TRACE, "End of %s()", __func__); +} + +static void DCdump_corr_conditions(zbx_dc_correlation_t *correlation) +{ + int i; + zbx_vector_ptr_t index; + + zbx_vector_ptr_create(&index); + + zbx_vector_ptr_append_array(&index, correlation->conditions.values, correlation->conditions.values_num); + zbx_vector_ptr_sort(&index, ZBX_DEFAULT_UINT64_PTR_COMPARE_FUNC); + + zabbix_log(LOG_LEVEL_TRACE, " conditions:"); + + for (i = 0; i < index.values_num; i++) + { + zbx_dc_corr_condition_t *condition = (zbx_dc_corr_condition_t *)index.values[i]; + zabbix_log(LOG_LEVEL_TRACE, " conditionid:" ZBX_FS_UI64 " type:%d", + condition->corr_conditionid, condition->type); + + switch (condition->type) + { + case ZBX_CORR_CONDITION_EVENT_TAG_PAIR: + zabbix_log(LOG_LEVEL_TRACE, " oldtag:'%s' newtag:'%s'", + condition->data.tag_pair.oldtag, condition->data.tag_pair.newtag); + break; + case ZBX_CORR_CONDITION_NEW_EVENT_HOSTGROUP: + zabbix_log(LOG_LEVEL_TRACE, " groupid:" ZBX_FS_UI64 " op:%u", + condition->data.group.groupid, condition->data.group.op); + break; + case ZBX_CORR_CONDITION_NEW_EVENT_TAG: + case ZBX_CORR_CONDITION_OLD_EVENT_TAG: + zabbix_log(LOG_LEVEL_TRACE, " tag:'%s'", condition->data.tag.tag); + break; + case ZBX_CORR_CONDITION_NEW_EVENT_TAG_VALUE: + case ZBX_CORR_CONDITION_OLD_EVENT_TAG_VALUE: + zabbix_log(LOG_LEVEL_TRACE, " tag:'%s' value:'%s'", + condition->data.tag_value.tag, condition->data.tag_value.value); + break; + } + } + + zbx_vector_ptr_destroy(&index); +} + +static void DCdump_corr_operations(zbx_dc_correlation_t *correlation) +{ + int i; + zbx_vector_ptr_t index; + + zbx_vector_ptr_create(&index); + + zbx_vector_ptr_append_array(&index, correlation->operations.values, correlation->operations.values_num); + zbx_vector_ptr_sort(&index, ZBX_DEFAULT_UINT64_PTR_COMPARE_FUNC); + + zabbix_log(LOG_LEVEL_TRACE, " operations:"); + + for (i = 0; i < index.values_num; i++) + { + zbx_dc_corr_operation_t *operation = (zbx_dc_corr_operation_t *)index.values[i]; + zabbix_log(LOG_LEVEL_TRACE, " operetionid:" ZBX_FS_UI64 " type:%d", + operation->corr_operationid, operation->type); + } + + zbx_vector_ptr_destroy(&index); +} + +static void DCdump_correlations(void) +{ + zbx_dc_correlation_t *correlation; + zbx_hashset_iter_t iter; + int i; + zbx_vector_ptr_t index; + + zabbix_log(LOG_LEVEL_TRACE, "In %s()", __func__); + + zbx_vector_ptr_create(&index); + zbx_hashset_iter_reset(&config->correlations, &iter); + + while (NULL != (correlation = (zbx_dc_correlation_t *)zbx_hashset_iter_next(&iter))) + zbx_vector_ptr_append(&index, correlation); + + zbx_vector_ptr_sort(&index, ZBX_DEFAULT_UINT64_PTR_COMPARE_FUNC); + + for (i = 0; i < index.values_num; i++) + { + correlation = (zbx_dc_correlation_t *)index.values[i]; + zabbix_log(LOG_LEVEL_TRACE, "correlationid:" ZBX_FS_UI64 " name:'%s' evaltype:%u formula:'%s'", + correlation->correlationid, correlation->name, correlation->evaltype, + correlation->formula); + + DCdump_corr_conditions(correlation); + DCdump_corr_operations(correlation); + } + + zbx_vector_ptr_destroy(&index); + + zabbix_log(LOG_LEVEL_TRACE, "End of %s()", __func__); +} + +static void DCdump_host_group_hosts(zbx_dc_hostgroup_t *group) +{ + zbx_hashset_iter_t iter; + int i; + zbx_vector_uint64_t index; + zbx_uint64_t *phostid; + + zbx_vector_uint64_create(&index); + zbx_hashset_iter_reset(&group->hostids, &iter); + + while (NULL != (phostid = (zbx_uint64_t *)zbx_hashset_iter_next(&iter))) + zbx_vector_uint64_append_ptr(&index, phostid); + + zbx_vector_uint64_sort(&index, ZBX_DEFAULT_UINT64_COMPARE_FUNC); + + zabbix_log(LOG_LEVEL_TRACE, " hosts:"); + + for (i = 0; i < index.values_num; i++) + zabbix_log(LOG_LEVEL_TRACE, " hostid:" ZBX_FS_UI64, index.values[i]); + + zbx_vector_uint64_destroy(&index); +} + +static void DCdump_host_groups(void) +{ + zbx_dc_hostgroup_t *group; + zbx_hashset_iter_t iter; + int i; + zbx_vector_ptr_t index; + + zabbix_log(LOG_LEVEL_TRACE, "In %s()", __func__); + + zbx_vector_ptr_create(&index); + zbx_hashset_iter_reset(&config->hostgroups, &iter); + + while (NULL != (group = (zbx_dc_hostgroup_t *)zbx_hashset_iter_next(&iter))) + zbx_vector_ptr_append(&index, group); + + zbx_vector_ptr_sort(&index, ZBX_DEFAULT_UINT64_PTR_COMPARE_FUNC); + + for (i = 0; i < index.values_num; i++) + { + group = (zbx_dc_hostgroup_t *)index.values[i]; + zabbix_log(LOG_LEVEL_TRACE, "groupid:" ZBX_FS_UI64 " name:'%s'", group->groupid, group->name); + + if (0 != group->hostids.num_data) + DCdump_host_group_hosts(group); + } + + zbx_vector_ptr_destroy(&index); + + zabbix_log(LOG_LEVEL_TRACE, "End of %s()", __func__); +} + +static void DCdump_host_group_index(void) +{ + zbx_dc_hostgroup_t *group; + int i; + + zabbix_log(LOG_LEVEL_TRACE, "In %s()", __func__); + + zabbix_log(LOG_LEVEL_TRACE, "group index:"); + + for (i = 0; i < config->hostgroups_name.values_num; i++) + { + group = (zbx_dc_hostgroup_t *)config->hostgroups_name.values[i]; + zabbix_log(LOG_LEVEL_TRACE, " %s", group->name); + } + + zabbix_log(LOG_LEVEL_TRACE, "End of %s()", __func__); +} + +static void DCdump_maintenance_groups(zbx_dc_maintenance_t *maintenance) +{ + int i; + zbx_vector_uint64_t index; + + zbx_vector_uint64_create(&index); + + if (0 != maintenance->groupids.values_num) + { + zbx_vector_uint64_append_array(&index, maintenance->groupids.values, maintenance->groupids.values_num); + zbx_vector_uint64_sort(&index, ZBX_DEFAULT_UINT64_COMPARE_FUNC); + } + + zabbix_log(LOG_LEVEL_TRACE, " groups:"); + + for (i = 0; i < index.values_num; i++) + zabbix_log(LOG_LEVEL_TRACE, " groupid:" ZBX_FS_UI64, index.values[i]); + + zbx_vector_uint64_destroy(&index); +} + +static void DCdump_maintenance_hosts(zbx_dc_maintenance_t *maintenance) +{ + int i; + zbx_vector_uint64_t index; + + zbx_vector_uint64_create(&index); + + if (0 != maintenance->hostids.values_num) + { + zbx_vector_uint64_append_array(&index, maintenance->hostids.values, maintenance->hostids.values_num); + zbx_vector_uint64_sort(&index, ZBX_DEFAULT_UINT64_COMPARE_FUNC); + } + + zabbix_log(LOG_LEVEL_TRACE, " hosts:"); + + for (i = 0; i < index.values_num; i++) + zabbix_log(LOG_LEVEL_TRACE, " hostid:" ZBX_FS_UI64, index.values[i]); + + zbx_vector_uint64_destroy(&index); +} + +static int maintenance_tag_compare(const void *v1, const void *v2) +{ + const zbx_dc_maintenance_tag_t *tag1 = *(const zbx_dc_maintenance_tag_t **)v1; + const zbx_dc_maintenance_tag_t *tag2 = *(const zbx_dc_maintenance_tag_t **)v2; + int ret; + + if (0 != (ret = (strcmp(tag1->tag, tag2->tag)))) + return ret; + + if (0 != (ret = (strcmp(tag1->value, tag2->value)))) + return ret; + + ZBX_RETURN_IF_NOT_EQUAL(tag1->op, tag2->op); + + return 0; +} + +static void DCdump_maintenance_tags(zbx_dc_maintenance_t *maintenance) +{ + int i; + zbx_vector_ptr_t index; + + zbx_vector_ptr_create(&index); + + if (0 != maintenance->tags.values_num) + { + zbx_vector_ptr_append_array(&index, maintenance->tags.values, maintenance->tags.values_num); + zbx_vector_ptr_sort(&index, maintenance_tag_compare); + } + + zabbix_log(LOG_LEVEL_TRACE, " tags:"); + + for (i = 0; i < index.values_num; i++) + { + zbx_dc_maintenance_tag_t *tag = (zbx_dc_maintenance_tag_t *)index.values[i]; + zabbix_log(LOG_LEVEL_TRACE, " maintenancetagid:" ZBX_FS_UI64 " operator:%u tag:'%s' value:'%s'", + tag->maintenancetagid, tag->op, tag->tag, tag->value); + } + + zbx_vector_ptr_destroy(&index); +} + +static void DCdump_maintenance_periods(zbx_dc_maintenance_t *maintenance) +{ + int i; + zbx_vector_ptr_t index; + + zbx_vector_ptr_create(&index); + + zbx_vector_ptr_append_array(&index, maintenance->periods.values, maintenance->periods.values_num); + zbx_vector_ptr_sort(&index, ZBX_DEFAULT_UINT64_PTR_COMPARE_FUNC); + + zabbix_log(LOG_LEVEL_TRACE, " periods:"); + + for (i = 0; i < index.values_num; i++) + { + zbx_dc_maintenance_period_t *period = (zbx_dc_maintenance_period_t *)index.values[i]; + zabbix_log(LOG_LEVEL_TRACE, " timeperiodid:" ZBX_FS_UI64 " type:%u every:%d month:%d dayofweek:%d" + " day:%d start_time:%d period:%d start_date:%d", + period->timeperiodid, period->type, period->every, period->month, period->dayofweek, + period->day, period->start_time, period->period, period->start_date); + } + + zbx_vector_ptr_destroy(&index); +} + +static void DCdump_maintenances(void) +{ + zbx_dc_maintenance_t *maintenance; + zbx_hashset_iter_t iter; + int i; + zbx_vector_ptr_t index; + + zabbix_log(LOG_LEVEL_TRACE, "In %s()", __func__); + + zbx_vector_ptr_create(&index); + zbx_hashset_iter_reset(&config->maintenances, &iter); + + while (NULL != (maintenance = (zbx_dc_maintenance_t *)zbx_hashset_iter_next(&iter))) + zbx_vector_ptr_append(&index, maintenance); + + zbx_vector_ptr_sort(&index, ZBX_DEFAULT_UINT64_PTR_COMPARE_FUNC); + + for (i = 0; i < index.values_num; i++) + { + maintenance = (zbx_dc_maintenance_t *)index.values[i]; + zabbix_log(LOG_LEVEL_TRACE, "maintenanceid:" ZBX_FS_UI64 " type:%u tag_evaltype:%u active_since:%d" + " active_until:%d", maintenance->maintenanceid, maintenance->type, + maintenance->tags_evaltype, maintenance->active_since, maintenance->active_until); + zabbix_log(LOG_LEVEL_TRACE, " state:%u running_since:%d running_until:%d", + maintenance->state, maintenance->running_since, maintenance->running_until); + + DCdump_maintenance_groups(maintenance); + DCdump_maintenance_hosts(maintenance); + DCdump_maintenance_tags(maintenance); + DCdump_maintenance_periods(maintenance); + } + + zbx_vector_ptr_destroy(&index); + + zabbix_log(LOG_LEVEL_TRACE, "End of %s()", __func__); +} + +/* stringpool dumping is disabled by default to avoid leaking secret macro data */ +#ifdef HAVE_TESTS +static int strpool_compare(const void *v1, const void *v2) +{ + const char *s1 = *(const char * const *)v1 + sizeof(zbx_uint32_t); + const char *s2 = *(const char * const *)v2 + sizeof(zbx_uint32_t); + + return strcmp(s1, s2); +} + +static void DCdump_strpool() +{ + zbx_hashset_iter_t iter; + zbx_vector_ptr_t records; + char *record; + int i; + + zabbix_log(LOG_LEVEL_TRACE, "In %s()", __func__); + + zbx_vector_ptr_create(&records); + zbx_hashset_iter_reset(&config->strpool, &iter); + + while (NULL != (record = (char *)zbx_hashset_iter_next(&iter))) + zbx_vector_ptr_append(&records, record); + + zbx_vector_ptr_sort(&records, strpool_compare); + + for (i = 0; i < records.values_num; i++) + { + zabbix_log(LOG_LEVEL_TRACE, " %s: %u", (char *)records.values[i] + sizeof(zbx_uint32_t), + *(zbx_uint32_t *)records.values[i]); + } + + zbx_vector_ptr_destroy(&records); +} +#endif + +static void DCdump_drules(void) +{ + zbx_hashset_iter_t iter; + zbx_dc_drule_t *drule; + + zabbix_log(LOG_LEVEL_TRACE, "In %s()", __func__); + + zbx_hashset_iter_reset(&config->drules, &iter); + while (NULL != (drule = (zbx_dc_drule_t *)zbx_hashset_iter_next(&iter))) + { + zabbix_log(LOG_LEVEL_TRACE, "druleid:" ZBX_FS_UI64 " proxy_hostid:" ZBX_FS_UI64 " revision:" ZBX_FS_UI64, + drule->druleid, drule->proxy_hostid, drule->revision); + zabbix_log(LOG_LEVEL_TRACE, " status:%u delay:%d location:%d nextcheck:%ld", + drule->status, drule->delay, drule->location, (long int)drule->nextcheck); + } + + zabbix_log(LOG_LEVEL_TRACE, "End of %s()", __func__); +} + +static void DCdump_dchecks(void) +{ + zbx_hashset_iter_t iter; + zbx_dc_dcheck_t *dcheck; + + zabbix_log(LOG_LEVEL_TRACE, "In %s()", __func__); + + zbx_hashset_iter_reset(&config->dchecks, &iter); + while (NULL != (dcheck = (zbx_dc_dcheck_t *)zbx_hashset_iter_next(&iter))) + { + zabbix_log(LOG_LEVEL_TRACE, "dcheckid:" ZBX_FS_UI64 " druleid:" ZBX_FS_UI64, + dcheck->dcheckid, dcheck->druleid); + } + + zabbix_log(LOG_LEVEL_TRACE, "End of %s()", __func__); +} + +static void DCdump_httptests(void) +{ + zbx_hashset_iter_t iter; + zbx_dc_httptest_t *httptest; + + zabbix_log(LOG_LEVEL_TRACE, "In %s()", __func__); + + zbx_hashset_iter_reset(&config->httptests, &iter); + while (NULL != (httptest = (zbx_dc_httptest_t *)zbx_hashset_iter_next(&iter))) + { + zabbix_log(LOG_LEVEL_TRACE, "httptestid:" ZBX_FS_UI64 " hostid:" ZBX_FS_UI64 " revision:" ZBX_FS_UI64, + httptest->httptestid, httptest->hostid, httptest->revision); + zabbix_log(LOG_LEVEL_TRACE, " status:%u delay:%d location:%d nextcheck:%ld", + httptest->status, httptest->delay, httptest->location, (long int)httptest->nextcheck); + } + + zabbix_log(LOG_LEVEL_TRACE, "End of %s()", __func__); +} + +static void DCdump_httptest_fields(void) +{ + zbx_hashset_iter_t iter; + zbx_dc_httptest_field_t *httptest_field; + + zabbix_log(LOG_LEVEL_TRACE, "In %s()", __func__); + + zbx_hashset_iter_reset(&config->httptest_fields, &iter); + while (NULL != (httptest_field = (zbx_dc_httptest_field_t *)zbx_hashset_iter_next(&iter))) + { + zabbix_log(LOG_LEVEL_TRACE, "httptest_fieldid:" ZBX_FS_UI64 " httptestid:" ZBX_FS_UI64, + httptest_field->httptest_fieldid, httptest_field->httptestid); + } + + zabbix_log(LOG_LEVEL_TRACE, "End of %s()", __func__); +} + +static void DCdump_httpsteps(void) +{ + zbx_hashset_iter_t iter; + zbx_dc_httpstep_t *httpstep; + + zabbix_log(LOG_LEVEL_TRACE, "In %s()", __func__); + + zbx_hashset_iter_reset(&config->httpsteps, &iter); + while (NULL != (httpstep = (zbx_dc_httpstep_t *)zbx_hashset_iter_next(&iter))) + { + zabbix_log(LOG_LEVEL_TRACE, "httpstepid:" ZBX_FS_UI64 " httptestid:" ZBX_FS_UI64, + httpstep->httpstepid, httpstep->httptestid); + } + + zabbix_log(LOG_LEVEL_TRACE, "End of %s()", __func__); +} + +static void DCdump_httpstep_fields(void) +{ + zbx_hashset_iter_t iter; + zbx_dc_httpstep_field_t *httpstep_field; + + zabbix_log(LOG_LEVEL_TRACE, "In %s()", __func__); + + zbx_hashset_iter_reset(&config->httpstep_fields, &iter); + while (NULL != (httpstep_field = (zbx_dc_httpstep_field_t *)zbx_hashset_iter_next(&iter))) + { + zabbix_log(LOG_LEVEL_TRACE, "httpstep_fieldid:" ZBX_FS_UI64 " httpstepid:" ZBX_FS_UI64, + httpstep_field->httpstep_fieldid, httpstep_field->httpstepid); + } + + zabbix_log(LOG_LEVEL_TRACE, "End of %s()", __func__); +} + +void DCdump_configuration(void) +{ + zabbix_log(LOG_LEVEL_TRACE, "=== Configuration cache contents (revision:" ZBX_FS_UI64 ") ===", + config->revision.config); + + zabbix_log(LOG_LEVEL_TRACE, " autoreg_tls_revision:" ZBX_FS_UI64, config->revision.autoreg_tls); + + DCdump_config(); + DCdump_hosts(); + DCdump_host_tags(); + DCdump_proxies(); + DCdump_ipmihosts(); + DCdump_host_inventories(); + DCdump_kvs_paths(); + um_cache_dump(config->um_cache); + DCdump_interfaces(); + DCdump_items(); + DCdump_item_discovery(); + DCdump_interface_snmpitems(); + DCdump_template_items(); + DCdump_prototype_items(); + DCdump_triggers(); + DCdump_trigdeps(); + DCdump_functions(); + DCdump_expressions(); + DCdump_actions(); + DCdump_correlations(); + DCdump_host_groups(); + DCdump_host_group_index(); + DCdump_maintenances(); + DCdump_drules(); + DCdump_dchecks(); + DCdump_httptests(); + DCdump_httptest_fields(); + DCdump_httpsteps(); + DCdump_httpstep_fields(); + DCdump_autoreg_hosts(); +#ifdef HAVE_TESTS + DCdump_strpool(); +#endif +} |