/* ** 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. **/ #ifndef ZABBIX_CACHECONFIG_H #define ZABBIX_CACHECONFIG_H #include "zbxdbhigh.h" #include "zbxcomms.h" #include "zbxeval.h" #include "zbxavailability.h" #include "zbxversion.h" #define ZBX_NO_POLLER 255 #define ZBX_POLLER_TYPE_NORMAL 0 #define ZBX_POLLER_TYPE_UNREACHABLE 1 #define ZBX_POLLER_TYPE_IPMI 2 #define ZBX_POLLER_TYPE_PINGER 3 #define ZBX_POLLER_TYPE_JAVA 4 #define ZBX_POLLER_TYPE_HISTORY 5 #define ZBX_POLLER_TYPE_ODBC 6 #define ZBX_POLLER_TYPE_COUNT 7 /* number of poller types */ typedef enum { ZBX_SESSION_TYPE_DATA = 0, ZBX_SESSION_TYPE_CONFIG, ZBX_SESSION_TYPE_COUNT, } zbx_session_type_t; #define MAX_JAVA_ITEMS 32 #define MAX_SNMP_ITEMS 128 #define MAX_POLLER_ITEMS 128 /* MAX(MAX_JAVA_ITEMS, MAX_SNMP_ITEMS) */ #define MAX_PINGER_ITEMS 128 #define ZBX_TRIGGER_DEPENDENCY_LEVELS_MAX 32 #define ZBX_TRIGGER_DEPENDENCY_FAIL 1 #define ZBX_TRIGGER_DEPENDENCY_UNRESOLVED 2 #define ZBX_SNMPTRAP_LOGGING_ENABLED 1 #define ZBX_AGENT_ZABBIX (INTERFACE_TYPE_AGENT - 1) #define ZBX_AGENT_SNMP (INTERFACE_TYPE_SNMP - 1) #define ZBX_AGENT_IPMI (INTERFACE_TYPE_IPMI - 1) #define ZBX_AGENT_JMX (INTERFACE_TYPE_JMX - 1) #define ZBX_AGENT_UNKNOWN 255 #define ZBX_AGENT_MAX INTERFACE_TYPE_COUNT extern int CONFIG_TIMEOUT; extern zbx_uint64_t CONFIG_CONF_CACHE_SIZE; extern int CONFIG_POLLER_FORKS; extern int CONFIG_UNREACHABLE_POLLER_FORKS; extern int CONFIG_IPMIPOLLER_FORKS; extern int CONFIG_JAVAPOLLER_FORKS; extern int CONFIG_PINGER_FORKS; extern int CONFIG_UNREACHABLE_PERIOD; extern int CONFIG_UNREACHABLE_DELAY; extern int CONFIG_PROXYCONFIG_FREQUENCY; extern int CONFIG_PROXYDATA_FREQUENCY; extern int CONFIG_HISTORYPOLLER_FORKS; extern int CONFIG_ODBCPOLLER_FORKS; typedef struct { zbx_uint64_t interfaceid; char ip_orig[ZBX_INTERFACE_IP_LEN_MAX]; char dns_orig[ZBX_INTERFACE_DNS_LEN_MAX]; char port_orig[ZBX_INTERFACE_PORT_LEN_MAX]; char *addr; unsigned short port; unsigned char useip; unsigned char type; unsigned char main; unsigned char available; int disable_until; char error[ZBX_INTERFACE_ERROR_LEN_MAX]; int errors_from; } DC_INTERFACE; typedef struct { zbx_uint64_t interfaceid; char *addr; unsigned char type; unsigned char main; unsigned char bulk; unsigned char snmp_version; unsigned char useip; char ip_orig[ZBX_INTERFACE_IP_LEN_MAX]; char dns_orig[ZBX_INTERFACE_DNS_LEN_MAX]; char port_orig[ZBX_INTERFACE_PORT_LEN_MAX]; } DC_INTERFACE2; #define HOST_IPMI_USERNAME_LEN 16 #define HOST_IPMI_USERNAME_LEN_MAX (HOST_IPMI_USERNAME_LEN + 1) #define HOST_IPMI_PASSWORD_LEN 20 #define HOST_IPMI_PASSWORD_LEN_MAX (HOST_IPMI_PASSWORD_LEN + 1) #define HOST_PROXY_ADDRESS_LEN 255 #define HOST_PROXY_ADDRESS_LEN_MAX (HOST_PROXY_ADDRESS_LEN + 1) typedef struct { zbx_uint64_t hostid; zbx_uint64_t proxy_hostid; char host[ZBX_HOSTNAME_BUF_LEN]; char name[ZBX_MAX_HOSTNAME_LEN * ZBX_MAX_BYTES_IN_UTF8_CHAR + 1]; unsigned char maintenance_status; unsigned char maintenance_type; int maintenance_from; signed char ipmi_authtype; unsigned char ipmi_privilege; char ipmi_username[HOST_IPMI_USERNAME_LEN_MAX]; char ipmi_password[HOST_IPMI_PASSWORD_LEN_MAX]; signed char inventory_mode; unsigned char status; unsigned char tls_connect; unsigned char tls_accept; #if defined(HAVE_GNUTLS) || defined(HAVE_OPENSSL) char tls_issuer[HOST_TLS_ISSUER_LEN_MAX]; char tls_subject[HOST_TLS_SUBJECT_LEN_MAX]; char tls_psk_identity[HOST_TLS_PSK_IDENTITY_LEN_MAX]; char tls_psk[HOST_TLS_PSK_LEN_MAX]; #endif } DC_HOST; typedef struct { DC_HOST host; DC_INTERFACE interface; zbx_uint64_t itemid; zbx_uint64_t lastlogsize; zbx_uint64_t valuemapid; unsigned char type; unsigned char snmp_version; unsigned char value_type; unsigned char state; unsigned char snmpv3_securitylevel; unsigned char authtype; unsigned char flags; unsigned char snmpv3_authprotocol; unsigned char snmpv3_privprotocol; unsigned char inventory_link; unsigned char status; unsigned char history; unsigned char trends; unsigned char follow_redirects; unsigned char post_type; unsigned char retrieve_mode; unsigned char request_method; unsigned char output_format; unsigned char verify_peer; unsigned char verify_host; unsigned char allow_traps; char key_orig[ZBX_ITEM_KEY_LEN * ZBX_MAX_BYTES_IN_UTF8_CHAR + 1], *key; char *units; char *delay; int history_sec; int trends_sec; int mtime; char trapper_hosts[ZBX_ITEM_TRAPPER_HOSTS_LEN_MAX]; char logtimefmt[ZBX_ITEM_LOGTIMEFMT_LEN_MAX]; char snmp_community_orig[ZBX_ITEM_SNMP_COMMUNITY_LEN_MAX], *snmp_community; char snmp_oid_orig[ZBX_ITEM_SNMP_OID_LEN_MAX], *snmp_oid; char snmpv3_securityname_orig[ZBX_ITEM_SNMPV3_SECURITYNAME_LEN_MAX], *snmpv3_securityname; char snmpv3_authpassphrase_orig[ZBX_ITEM_SNMPV3_AUTHPASSPHRASE_LEN_MAX], *snmpv3_authpassphrase; char snmpv3_privpassphrase_orig[ZBX_ITEM_SNMPV3_PRIVPASSPHRASE_LEN_MAX], *snmpv3_privpassphrase; char ipmi_sensor[ZBX_ITEM_IPMI_SENSOR_LEN_MAX]; char *params; char username_orig[ZBX_ITEM_USERNAME_LEN_MAX], *username; char publickey_orig[ZBX_ITEM_PUBLICKEY_LEN_MAX], *publickey; char privatekey_orig[ZBX_ITEM_PRIVATEKEY_LEN_MAX], *privatekey; char password_orig[ZBX_ITEM_PASSWORD_LEN_MAX], *password; char snmpv3_contextname_orig[ZBX_ITEM_SNMPV3_CONTEXTNAME_LEN_MAX], *snmpv3_contextname; char jmx_endpoint_orig[ZBX_ITEM_JMX_ENDPOINT_LEN_MAX], *jmx_endpoint; char timeout_orig[ZBX_ITEM_TIMEOUT_LEN_MAX], *timeout; char url_orig[ZBX_ITEM_URL_LEN_MAX], *url; char query_fields_orig[ZBX_ITEM_QUERY_FIELDS_LEN_MAX], *query_fields; char *posts; char status_codes_orig[ZBX_ITEM_STATUS_CODES_LEN_MAX], *status_codes; char http_proxy_orig[ZBX_ITEM_HTTP_PROXY_LEN_MAX], *http_proxy; char *headers; char ssl_cert_file_orig[ZBX_ITEM_SSL_CERT_FILE_LEN_MAX], *ssl_cert_file; char ssl_key_file_orig[ZBX_ITEM_SSL_KEY_FILE_LEN_MAX], *ssl_key_file; char ssl_key_password_orig[ZBX_ITEM_SSL_KEY_PASSWORD_LEN_MAX], *ssl_key_password; char *script_params; char *error; unsigned char *formula_bin; char *history_period, *trends_period; } DC_ITEM; typedef struct { zbx_uint64_t functionid; zbx_uint64_t triggerid; zbx_uint64_t itemid; char *function; char *parameter; unsigned char type; } DC_FUNCTION; typedef struct { zbx_uint64_t hostid; zbx_uint64_t itemid; zbx_tag_t tag; } zbx_item_tag_t; #define ZBX_DC_TRIGGER_PROBLEM_EXPRESSION 0x1 /* this flag shows that trigger value recalculation is */ /* initiated by a time-based function or a new value of */ /* an item in problem expression */ typedef struct _DC_TRIGGER { zbx_uint64_t triggerid; char *description; char *expression; char *recovery_expression; char *error; char *new_error; char *correlation_tag; char *opdata; char *event_name; unsigned char *expression_bin; unsigned char *recovery_expression_bin; zbx_timespec_t timespec; int lastchange; unsigned char topoindex; unsigned char priority; unsigned char type; unsigned char value; unsigned char state; unsigned char new_value; unsigned char status; unsigned char recovery_mode; unsigned char correlation_mode; unsigned char flags; zbx_vector_ptr_t tags; zbx_vector_uint64_t itemids; zbx_eval_context_t *eval_ctx; zbx_eval_context_t *eval_ctx_r; } DC_TRIGGER; typedef struct { zbx_uint64_t hostid; char host[ZBX_HOSTNAME_BUF_LEN]; int proxy_config_nextcheck; int proxy_data_nextcheck; int proxy_tasks_nextcheck; int last_cfg_error_time; /* time when passive proxy misconfiguration error was */ /* seen or 0 if no error */ char version_str[ZBX_VERSION_BUF_LEN]; int version_int; zbx_proxy_compatibility_t compatibility; int lastaccess; char addr_orig[ZBX_INTERFACE_ADDR_LEN_MAX]; char port_orig[ZBX_INTERFACE_PORT_LEN_MAX]; char *addr; unsigned short port; unsigned char auto_compress; unsigned char tls_connect; unsigned char tls_accept; #if defined(HAVE_GNUTLS) || defined(HAVE_OPENSSL) char tls_issuer[HOST_TLS_ISSUER_LEN_MAX]; char tls_subject[HOST_TLS_SUBJECT_LEN_MAX]; char tls_psk_identity[HOST_TLS_PSK_IDENTITY_LEN_MAX]; char tls_psk[HOST_TLS_PSK_LEN_MAX]; #endif zbx_uint64_t revision; zbx_uint64_t macro_revision; char proxy_address[HOST_PROXY_ADDRESS_LEN_MAX]; int last_version_error_time; } DC_PROXY; #define ZBX_ACTION_OPCLASS_NONE 0 #define ZBX_ACTION_OPCLASS_NORMAL 1 #define ZBX_ACTION_OPCLASS_RECOVERY 2 #define ZBX_ACTION_OPCLASS_ACKNOWLEDGE 4 typedef struct { zbx_uint64_t actionid; char *formula; unsigned char eventsource; unsigned char evaltype; unsigned char opflags; zbx_vector_ptr_t conditions; } zbx_action_eval_t; typedef struct { char *host; char *key; } zbx_host_key_t; /* housekeeping related configuration data */ typedef struct { int events_trigger; int events_internal; int events_discovery; int events_autoreg; int events_service; int services; int audit; int sessions; int trends; int history; unsigned char services_mode; unsigned char audit_mode; unsigned char sessions_mode; unsigned char events_mode; unsigned char trends_mode; unsigned char trends_global; unsigned char history_mode; unsigned char history_global; } zbx_config_hk_t; typedef struct { char *extension; unsigned char history_compression_status; int history_compress_older; } zbx_config_db_t; /* global configuration data (loaded from config table) */ typedef struct { /* the fields set by zbx_config_get() function, see ZBX_CONFIG_FLAGS_ defines */ zbx_uint64_t flags; char **severity_name; zbx_uint64_t discovery_groupid; int default_inventory_mode; unsigned char snmptrap_logging; unsigned char autoreg_tls_accept; char *default_timezone; int auditlog_enabled; /* database configuration data for ZBX_CONFIG_DB_EXTENSION_* extensions */ zbx_config_db_t db; /* housekeeping related configuration data */ zbx_config_hk_t hk; } zbx_config_t; #define ZBX_CONFIG_FLAGS_SEVERITY_NAME __UINT64_C(0x0000000000000001) #define ZBX_CONFIG_FLAGS_DISCOVERY_GROUPID __UINT64_C(0x0000000000000002) #define ZBX_CONFIG_FLAGS_DEFAULT_INVENTORY_MODE __UINT64_C(0x0000000000000004) #define ZBX_CONFIG_FLAGS_SNMPTRAP_LOGGING __UINT64_C(0x0000000000000010) #define ZBX_CONFIG_FLAGS_HOUSEKEEPER __UINT64_C(0x0000000000000020) #define ZBX_CONFIG_FLAGS_DB_EXTENSION __UINT64_C(0x0000000000000040) #define ZBX_CONFIG_FLAGS_AUTOREG_TLS_ACCEPT __UINT64_C(0x0000000000000080) #define ZBX_CONFIG_FLAGS_DEFAULT_TIMEZONE __UINT64_C(0x0000000000000100) #define ZBX_CONFIG_FLAGS_AUDITLOG_ENABLED __UINT64_C(0x0000000000000200) typedef struct { zbx_uint64_t hostid; unsigned char idx; const char *field_name; char *value; } zbx_inventory_value_t; typedef struct { char *tag; } zbx_corr_condition_tag_t; typedef struct { char *tag; char *value; unsigned char op; } zbx_corr_condition_tag_value_t; typedef struct { zbx_uint64_t groupid; unsigned char op; } zbx_corr_condition_group_t; typedef struct { char *oldtag; char *newtag; } zbx_corr_condition_tag_pair_t; typedef union { zbx_corr_condition_tag_t tag; zbx_corr_condition_tag_value_t tag_value; zbx_corr_condition_group_t group; zbx_corr_condition_tag_pair_t tag_pair; } zbx_corr_condition_data_t; typedef struct { zbx_uint64_t corr_conditionid; int type; zbx_corr_condition_data_t data; } zbx_corr_condition_t; typedef struct { unsigned char type; } zbx_corr_operation_t; typedef struct { zbx_uint64_t correlationid; char *name; char *formula; unsigned char evaltype; zbx_vector_ptr_t conditions; zbx_vector_ptr_t operations; } zbx_correlation_t; typedef struct { zbx_vector_ptr_t correlations; zbx_hashset_t conditions; /* Configuration synchronization timestamp of the rules. */ /* Update the cache if this timesamp is less than the */ /* current configuration synchronization timestamp. */ int sync_ts; } zbx_correlation_rules_t; /* item queue data */ typedef struct { zbx_uint64_t itemid; zbx_uint64_t proxy_hostid; int type; int nextcheck; } zbx_queue_item_t; typedef union { zbx_uint64_t ui64; double dbl; } zbx_counter_value_t; typedef struct { zbx_uint64_t proxyid; zbx_counter_value_t counter_value; } zbx_proxy_counter_t; typedef struct { unsigned char type; unsigned char error_handler; char *params; char *error_handler_params; } zbx_preproc_op_t; typedef struct { zbx_uint64_t itemid; zbx_uint64_t hostid; unsigned char type; unsigned char value_type; int dep_itemids_num; int preproc_ops_num; zbx_uint64_t revision; zbx_uint64_t preproc_revision; zbx_uint64_pair_t *dep_itemids; zbx_preproc_op_t *preproc_ops; } zbx_preproc_item_t; /* the configuration cache statistics */ typedef struct { zbx_uint64_t hosts; zbx_uint64_t items; zbx_uint64_t items_unsupported; double requiredperformance; } zbx_config_cache_info_t; int is_item_processed_by_server(unsigned char type, const char *key); int zbx_is_counted_in_item_queue(unsigned char type, const char *key); int in_maintenance_without_data_collection(unsigned char maintenance_status, unsigned char maintenance_type, unsigned char type); void dc_add_history(zbx_uint64_t itemid, unsigned char item_value_type, unsigned char item_flags, AGENT_RESULT *result, const zbx_timespec_t *ts, unsigned char state, const char *error); void dc_flush_history(void); #define ZBX_SYNC_NONE 0 #define ZBX_SYNC_ALL 1 /* initial sync, get all data */ #define ZBX_DBSYNC_INIT 0 /* update sync, get changed data */ #define ZBX_DBSYNC_UPDATE 1 #define ZBX_DBSYNC_STATUS_INITIALIZED 0 #define ZBX_DBSYNC_STATUS_UNKNOWN -1 typedef enum { ZBX_SYNCED_NEW_CONFIG_NO, ZBX_SYNCED_NEW_CONFIG_YES } zbx_synced_new_config_t; #define ZBX_ITEM_GET_MISC 0x0001 #define ZBX_ITEM_GET_DELAY 0x0002 #define ZBX_ITEM_GET_EMPTY_ERROR 0x0004 #define ZBX_ITEM_GET_NUM 0x0008 #define ZBX_ITEM_GET_EMPTY_UNITS 0x0010 #define ZBX_ITEM_GET_LOGTIMEFMT 0x0020 #define ZBX_ITEM_GET_POLLINFO 0x0040 #define ZBX_ITEM_GET_INTERFACE 0x0080 #define ZBX_ITEM_GET_HOSTNAME 0x0100 #define ZBX_ITEM_GET_HOSTINFO 0x0200 #define ZBX_ITEM_GET_MAINTENANCE 0x0400 #define ZBX_ITEM_GET_INVENTORY 0x0800 #define ZBX_ITEM_GET_HOUSEKEEPING 0x1000 #define ZBX_ITEM_GET_DEFAULT (~(unsigned int)ZBX_ITEM_GET_HOUSEKEEPING) #define ZBX_ITEM_GET_ALL (~(unsigned int)0) #define ZBX_ITEM_GET_SYNC (ZBX_ITEM_GET_INVENTORY | ZBX_ITEM_GET_NUM | ZBX_ITEM_GET_HOUSEKEEPING) #define ZBX_ITEM_GET_SYNC_EXPORT (ZBX_ITEM_GET_INVENTORY | ZBX_ITEM_GET_NUM | ZBX_ITEM_GET_HOSTNAME | \ ZBX_ITEM_GET_HOUSEKEEPING) #define ZBX_ITEM_GET_PROCESS (ZBX_ITEM_GET_MAINTENANCE|ZBX_ITEM_GET_MISC|ZBX_ITEM_GET_LOGTIMEFMT) #define ZBX_TRIGGER_GET_ITEMIDS 0x0001 #define ZBX_TRIGGER_GET_DEFAULT (~(unsigned int)ZBX_TRIGGER_GET_ITEMIDS) #define ZBX_TRIGGER_GET_ALL (~(unsigned int)0) void DCsync_configuration(unsigned char mode, zbx_synced_new_config_t synced, zbx_vector_uint64_t *deleted_itemids); void DCsync_kvs_paths(const struct zbx_json_parse *jp_kvs_paths); int init_configuration_cache(char **error); void free_configuration_cache(void); void DCconfig_get_triggers_by_triggerids(DC_TRIGGER *triggers, const zbx_uint64_t *triggerids, int *errcode, size_t num); void DCconfig_clean_items(DC_ITEM *items, int *errcodes, size_t num); int DCget_host_by_hostid(DC_HOST *host, zbx_uint64_t hostid); int DCconfig_get_hostid_by_name(const char *host, zbx_uint64_t *hostid); void DCconfig_get_hosts_by_itemids(DC_HOST *hosts, const zbx_uint64_t *itemids, int *errcodes, size_t num); void DCconfig_get_hosts_by_hostids(DC_HOST *hosts, const zbx_uint64_t *hostids, int *errcodes, int num); void DCconfig_get_items_by_keys(DC_ITEM *items, zbx_host_key_t *keys, int *errcodes, size_t num); void DCconfig_get_items_by_itemids(DC_ITEM *items, const zbx_uint64_t *itemids, int *errcodes, size_t num); void DCconfig_get_items_by_itemids_partial(DC_ITEM *items, const zbx_uint64_t *itemids, int *errcodes, int num, unsigned int mode); int DCconfig_get_active_items_count_by_hostid(zbx_uint64_t hostid); void DCconfig_get_active_items_by_hostid(DC_ITEM *items, zbx_uint64_t hostid, int *errcodes, size_t num); void DCconfig_get_preprocessable_items(zbx_hashset_t *items, zbx_uint64_t *revision); void DCconfig_get_functions_by_functionids(DC_FUNCTION *functions, zbx_uint64_t *functionids, int *errcodes, size_t num); void DCconfig_clean_functions(DC_FUNCTION *functions, int *errcodes, size_t num); void DCconfig_clean_triggers(DC_TRIGGER *triggers, int *errcodes, size_t num); int DCconfig_lock_triggers_by_history_items(zbx_vector_ptr_t *history_items, zbx_vector_uint64_t *triggerids); void DCconfig_lock_triggers_by_triggerids(zbx_vector_uint64_t *triggerids_in, zbx_vector_uint64_t *triggerids_out); void DCconfig_unlock_triggers(const zbx_vector_uint64_t *triggerids); void DCconfig_unlock_all_triggers(void); void DCconfig_get_triggers_by_itemids(zbx_hashset_t *trigger_info, zbx_vector_ptr_t *trigger_order, const zbx_uint64_t *itemids, const zbx_timespec_t *timespecs, int itemids_num); int DCconfig_trigger_exists(zbx_uint64_t triggerid); void DCfree_triggers(zbx_vector_ptr_t *triggers); void DCconfig_update_interface_snmp_stats(zbx_uint64_t interfaceid, int max_snmp_succeed, int min_snmp_fail); int DCconfig_get_suggested_snmp_vars(zbx_uint64_t interfaceid, int *bulk); int DCconfig_get_interface_by_type(DC_INTERFACE *interface, zbx_uint64_t hostid, unsigned char type); int DCconfig_get_interface(DC_INTERFACE *interface, zbx_uint64_t hostid, zbx_uint64_t itemid); int DCconfig_get_poller_nextcheck(unsigned char poller_type); int DCconfig_get_poller_items(unsigned char poller_type, DC_ITEM **items); int DCconfig_get_ipmi_poller_items(int now, DC_ITEM *items, int items_num, int *nextcheck); int DCconfig_get_snmp_interfaceids_by_addr(const char *addr, zbx_uint64_t **interfaceids); size_t DCconfig_get_snmp_items_by_interfaceid(zbx_uint64_t interfaceid, DC_ITEM **items); void DCconfig_update_autoreg_host(const char *host, const char *listen_ip, const char *listen_dns, unsigned short listen_port, const char *host_metadata, zbx_conn_flags_t flags, int now); void DCconfig_delete_autoreg_host(const zbx_vector_ptr_t *autoreg_hosts); #define ZBX_HK_OPTION_DISABLED 0 #define ZBX_HK_OPTION_ENABLED 1 /* options for hk.history_mode, trends_mode */ #define ZBX_HK_MODE_DISABLED ZBX_HK_OPTION_DISABLED #define ZBX_HK_MODE_REGULAR ZBX_HK_OPTION_ENABLED #define ZBX_HK_MODE_PARTITION 2 #define ZBX_HK_HISTORY_MIN SEC_PER_HOUR #define ZBX_HK_TRENDS_MIN SEC_PER_DAY #define ZBX_HK_PERIOD_MAX (25 * SEC_PER_YEAR) void DCrequeue_items(const zbx_uint64_t *itemids, const int *lastclocks, const int *errcodes, size_t num); void DCpoller_requeue_items(const zbx_uint64_t *itemids, const int *lastclocks, const int *errcodes, size_t num, unsigned char poller_type, int *nextcheck); void zbx_dc_requeue_unreachable_items(zbx_uint64_t *itemids, size_t itemids_num); int DCconfig_check_trigger_dependencies(zbx_uint64_t triggerid); void DCconfig_triggers_apply_changes(zbx_vector_ptr_t *trigger_diff); void DCconfig_items_apply_changes(const zbx_vector_ptr_t *item_diff); void DCconfig_update_inventory_values(const zbx_vector_ptr_t *inventory_values); int DCget_host_inventory_value_by_itemid(zbx_uint64_t itemid, char **replace_to, int value_idx); int DCget_host_inventory_value_by_hostid(zbx_uint64_t hostid, char **replace_to, int value_idx); #define ZBX_CONFSTATS_BUFFER_TOTAL 1 #define ZBX_CONFSTATS_BUFFER_USED 2 #define ZBX_CONFSTATS_BUFFER_FREE 3 #define ZBX_CONFSTATS_BUFFER_PUSED 4 #define ZBX_CONFSTATS_BUFFER_PFREE 5 void *DCconfig_get_stats(int request); int DCconfig_get_last_sync_time(void); int DCconfig_get_proxypoller_hosts(DC_PROXY *proxies, int max_hosts); int DCconfig_get_proxypoller_nextcheck(void); #define ZBX_PROXY_CONFIG_NEXTCHECK 0x01 #define ZBX_PROXY_DATA_NEXTCHECK 0x02 #define ZBX_PROXY_TASKS_NEXTCHECK 0x04 void DCrequeue_proxy(zbx_uint64_t hostid, unsigned char update_nextcheck, int proxy_conn_err); int DCcheck_proxy_permissions(const char *host, const zbx_socket_t *sock, zbx_uint64_t *hostid, char **error); int DCcheck_host_permissions(const char *host, const zbx_socket_t *sock, zbx_uint64_t *hostid, zbx_uint64_t *revision, char **error); int DCis_autoreg_host_changed(const char *host, unsigned short port, const char *host_metadata, zbx_conn_flags_t flag, const char *interface, int now, int heartbeat); #if defined(HAVE_GNUTLS) || defined(HAVE_OPENSSL) size_t DCget_psk_by_identity(const unsigned char *psk_identity, unsigned char *psk_buf, unsigned int *psk_usage); #endif void DCget_autoregistration_psk(char *psk_identity_buf, size_t psk_identity_buf_len, unsigned char *psk_buf, size_t psk_buf_len); #define ZBX_MACRO_ENV_SECURE 0 #define ZBX_MACRO_ENV_NONSECURE 1 #define ZBX_MACRO_ENV_DEFAULT 2 #define ZBX_MACRO_VALUE_TEXT 0 #define ZBX_MACRO_VALUE_SECRET 1 #define ZBX_MACRO_VALUE_VAULT 2 #define ZBX_MACRO_SECRET_MASK "******" int DCinterface_activate(zbx_uint64_t interfaceid, const zbx_timespec_t *ts, zbx_agent_availability_t *in, zbx_agent_availability_t *out); int DCinterface_deactivate(zbx_uint64_t interfaceid, const zbx_timespec_t *ts, zbx_agent_availability_t *in, zbx_agent_availability_t *out, const char *error_msg); #define ZBX_QUEUE_FROM_DEFAULT 6 /* default lower limit for delay (in seconds) */ #define ZBX_QUEUE_TO_INFINITY -1 /* no upper limit for delay */ void DCfree_item_queue(zbx_vector_ptr_t *queue); int DCget_item_queue(zbx_vector_ptr_t *queue, int from, int to); zbx_uint64_t DCget_item_count(zbx_uint64_t hostid); zbx_uint64_t DCget_item_unsupported_count(zbx_uint64_t hostid); zbx_uint64_t DCget_trigger_count(void); double DCget_required_performance(void); zbx_uint64_t DCget_host_count(void); void DCget_count_stats_all(zbx_config_cache_info_t *stats); void DCget_status(zbx_vector_ptr_t *hosts_monitored, zbx_vector_ptr_t *hosts_not_monitored, zbx_vector_ptr_t *items_active_normal, zbx_vector_ptr_t *items_active_notsupported, zbx_vector_ptr_t *items_disabled, zbx_uint64_t *triggers_enabled_ok, zbx_uint64_t *triggers_enabled_problem, zbx_uint64_t *triggers_disabled, zbx_vector_ptr_t *required_performance); void DCget_expressions_by_names(zbx_vector_ptr_t *expressions, const char * const *names, int names_num); void DCget_expressions_by_name(zbx_vector_ptr_t *expressions, const char *name); int DCget_data_expected_from(zbx_uint64_t itemid, int *seconds); void DCget_hostids_by_functionids(zbx_vector_uint64_t *functionids, zbx_vector_uint64_t *hostids); void DCget_hosts_by_functionids(const zbx_vector_uint64_t *functionids, zbx_hashset_t *hosts); int DCget_proxy_nodata_win(zbx_uint64_t hostid, zbx_proxy_suppress_t *nodata_win, int *lastaccess); int DCget_proxy_delay_by_name(const char *name, int *delay, char **error); int DCget_proxy_lastaccess_by_name(const char *name, int *lastaccess, char **error); int zbx_proxy_discovery_get(char **data, char **error); unsigned int DCget_internal_action_count(void); unsigned int DCget_auto_registration_action_count(void); /* global configuration support */ #define ZBX_DISCOVERY_GROUPID_UNDEFINED 0 void zbx_config_get(zbx_config_t *cfg, zbx_uint64_t flags); void zbx_config_clean(zbx_config_t *cfg); void zbx_config_get_hk_mode(unsigned char *history_mode, unsigned char *trends_mode); int DCset_interfaces_availability(zbx_vector_availability_ptr_t *availabilities); int DCreset_interfaces_availability(zbx_vector_availability_ptr_t *interfaces); void zbx_dc_get_actions_eval(zbx_vector_ptr_t *actions, unsigned char opflags); int DCget_interfaces_availability(zbx_vector_ptr_t *interfaces, int *ts); void DCtouch_interfaces_availability(const zbx_vector_uint64_t *interfaceids); void zbx_set_availability_diff_ts(int ts); void zbx_dc_correlation_rules_init(zbx_correlation_rules_t *rules); void zbx_dc_correlation_rules_clean(zbx_correlation_rules_t *rules); void zbx_dc_correlation_rules_free(zbx_correlation_rules_t *rules); void zbx_dc_correlation_rules_get(zbx_correlation_rules_t *rules); void zbx_dc_get_nested_hostgroupids(zbx_uint64_t *groupids, int groupids_num, zbx_vector_uint64_t *nested_groupids); void zbx_dc_get_hostids_by_group_name(const char *name, zbx_vector_uint64_t *hostids); #define ZBX_HC_ITEM_STATUS_NORMAL 0 #define ZBX_HC_ITEM_STATUS_BUSY 1 #define ZBX_DC_FLAG_META 0x01 /* contains meta information (lastlogsize and mtime) */ #define ZBX_DC_FLAG_NOVALUE 0x02 /* entry contains no value */ #define ZBX_DC_FLAG_LLD 0x04 /* low-level discovery value */ #define ZBX_DC_FLAG_UNDEF 0x08 /* unsupported or undefined (delta calculation failed) value */ #define ZBX_DC_FLAG_NOHISTORY 0x10 /* values should not be kept in history */ #define ZBX_DC_FLAG_NOTRENDS 0x20 /* values should not be kept in trends */ typedef struct zbx_hc_data { history_value_t value; zbx_uint64_t lastlogsize; zbx_timespec_t ts; int mtime; unsigned char value_type; unsigned char flags; unsigned char state; struct zbx_hc_data *next; } zbx_hc_data_t; typedef struct { zbx_uint64_t itemid; unsigned char status; int values_num; zbx_hc_data_t *tail; zbx_hc_data_t *head; } zbx_hc_item_t; void zbx_free_item_tag(zbx_item_tag_t *item_tag); int zbx_dc_get_active_proxy_by_name(const char *name, DC_PROXY *proxy, char **error); typedef struct { zbx_timespec_t ts; char *value; /* NULL in case of meta record (see "meta" field below) */ char *source; zbx_uint64_t lastlogsize; zbx_uint64_t id; int mtime; int timestamp; int severity; int logeventid; unsigned char state; unsigned char meta; /* non-zero if contains meta information (lastlogsize and mtime) */ } zbx_agent_value_t; void zbx_dc_items_update_nextcheck(DC_ITEM *items, zbx_agent_value_t *values, int *errcodes, size_t values_num); int zbx_dc_get_host_interfaces(zbx_uint64_t hostid, DC_INTERFACE2 **interfaces, int *n); void zbx_dc_update_proxy(zbx_proxy_diff_t *diff); void zbx_dc_get_proxy_lastaccess(zbx_vector_uint64_pair_t *lastaccess); void zbx_dc_proxy_update_nodata(zbx_vector_uint64_pair_t *subscriptions); typedef struct { zbx_uint64_t triggerid; unsigned char status; zbx_vector_uint64_t masterids; } zbx_trigger_dep_t; void zbx_dc_get_trigger_dependencies(const zbx_vector_uint64_t *triggerids, zbx_vector_ptr_t *deps); void zbx_dc_reschedule_items(const zbx_vector_uint64_t *itemids, int nextcheck, zbx_uint64_t *proxy_hostids); /* data session support */ typedef struct { zbx_uint64_t hostid; zbx_uint64_t last_id; const char *token; time_t lastaccess; } zbx_session_t; typedef struct { zbx_uint64_t config; /* configuration cache revision, increased every sync */ zbx_uint64_t expression; /* global expression revision */ zbx_uint64_t autoreg_tls; /* autoregistration tls revision */ zbx_uint64_t upstream; /* configuration revision received from server */ zbx_uint64_t config_table; /* the global configuration revision (config table) */ } zbx_dc_revision_t; const char *zbx_dc_get_session_token(void); zbx_session_t *zbx_dc_get_or_create_session(zbx_uint64_t hostid, const char *token, zbx_session_type_t session_type); int zbx_dc_register_config_session(zbx_uint64_t hostid, const char *token, zbx_uint64_t session_config_revision, zbx_dc_revision_t *dc_revision); void zbx_dc_cleanup_sessions(void); void zbx_dc_cleanup_autoreg_host(void); /* maintenance support */ typedef struct { zbx_uint64_t hostid; zbx_uint64_t maintenanceid; int maintenance_from; unsigned char maintenance_type; unsigned char maintenance_status; unsigned int flags; #define ZBX_FLAG_HOST_MAINTENANCE_UPDATE_MAINTENANCEID 0x0001 #define ZBX_FLAG_HOST_MAINTENANCE_UPDATE_MAINTENANCE_FROM 0x0002 #define ZBX_FLAG_HOST_MAINTENANCE_UPDATE_MAINTENANCE_TYPE 0x0003 #define ZBX_FLAG_HOST_MAINTENANCE_UPDATE_MAINTENANCE_STATUS 0x0004 } zbx_host_maintenance_diff_t; /* event maintenance query data, used to get event maintenances from cache */ typedef struct { zbx_uint64_t eventid; /* [IN] eventid */ zbx_uint64_t r_eventid; /* [-] recovery eventid */ zbx_uint64_t triggerid; /* [-] triggerid */ zbx_vector_uint64_t functionids; /* [IN] associated functionids */ zbx_vector_ptr_t tags; /* [IN] event tags */ zbx_vector_uint64_pair_t maintenances; /* [OUT] actual maintenance data for the event in */ /* (maintenanceid, suppress_until) pairs */ } zbx_event_suppress_query_t; #define ZBX_MAINTENANCE_UPDATE_TRUE 1 #define ZBX_MAINTENANCE_UPDATE_FALSE 0 void zbx_event_suppress_query_free(zbx_event_suppress_query_t *query); int zbx_dc_update_maintenances(void); void zbx_dc_get_host_maintenance_updates(const zbx_vector_uint64_t *maintenanceids, zbx_vector_ptr_t *updates); void zbx_dc_flush_host_maintenance_updates(const zbx_vector_ptr_t *updates); int zbx_dc_get_event_maintenances(zbx_vector_ptr_t *event_queries, const zbx_vector_uint64_t *maintenanceids); int zbx_dc_get_running_maintenanceids(zbx_vector_uint64_t *maintenanceids); void zbx_dc_maintenance_set_update_flags(void); void zbx_dc_maintenance_reset_update_flag(int timer); int zbx_dc_maintenance_check_update_flag(int timer); int zbx_dc_maintenance_check_update_flags(void); int zbx_dc_maintenance_has_tags(void); typedef struct { char *lld_macro; char *path; } zbx_lld_macro_path_t; int zbx_lld_macro_paths_get(zbx_uint64_t lld_ruleid, zbx_vector_ptr_t *lld_macro_paths, char **error); void zbx_lld_macro_path_free(zbx_lld_macro_path_t *lld_macro_path); int zbx_lld_macro_value_by_name(const struct zbx_json_parse *jp_row, const zbx_vector_ptr_t *lld_macro_paths, const char *macro, char **value); int zbx_lld_macro_paths_compare(const void *d1, const void *d2); void zbx_dc_get_item_tags(zbx_uint64_t itemid, zbx_vector_ptr_t *item_tags); void zbx_dc_get_item_tags_by_functionids(const zbx_uint64_t *functionids, size_t functionids_num, zbx_vector_ptr_t *item_tags); const char *zbx_dc_get_instanceid(void); typedef struct { zbx_uint64_t objectid; zbx_uint64_t triggerid; zbx_uint64_t hostid; zbx_uint32_t type; unsigned char lock; /* 1 if the timer has locked trigger, 0 otherwise */ zbx_uint64_t revision; /* revision */ time_t lastcheck; zbx_timespec_t eval_ts; /* the history time for which trigger must be recalculated */ zbx_timespec_t check_ts; /* time when timer must be checked */ zbx_timespec_t exec_ts; /* real time when the timer must be executed */ const char *parameter; /* function parameters (for trend functions) */ } zbx_trigger_timer_t; void zbx_dc_reschedule_trigger_timers(zbx_vector_ptr_t *timers, int now); void zbx_dc_get_trigger_timers(zbx_vector_ptr_t *timers, int now, int soft_limit, int hard_limit); void zbx_dc_clear_timer_queue(zbx_vector_ptr_t *timers); void zbx_dc_get_triggers_by_timers(zbx_hashset_t *trigger_info, zbx_vector_ptr_t *trigger_order, const zbx_vector_ptr_t *timers); void zbx_dc_free_timers(zbx_vector_ptr_t *timers); void zbx_get_host_interfaces_availability(zbx_uint64_t hostid, zbx_agent_availability_t *agents); /* external user macro cache API */ typedef struct zbx_dc_um_handle_t zbx_dc_um_handle_t; zbx_dc_um_handle_t *zbx_dc_open_user_macros(void); zbx_dc_um_handle_t *zbx_dc_open_user_macros_secure(void); zbx_dc_um_handle_t *zbx_dc_open_user_macros_masked(void); void zbx_dc_close_user_macros(zbx_dc_um_handle_t *um_handle); void zbx_dc_get_user_macro(const zbx_dc_um_handle_t *um_handle, const char *macro, const zbx_uint64_t *hostids, int hostids_num, char **value); int zbx_dc_expand_user_macros(const zbx_dc_um_handle_t *um_handle, char **text, const zbx_uint64_t *hostids, int hostids_num, char **error); char *zbx_dc_expand_user_macros_in_func_params(const char *params, zbx_uint64_t hostid); int zbx_dc_get_proxyid_by_name(const char *name, zbx_uint64_t *proxyid, unsigned char *type); int zbx_dc_update_passive_proxy_nextcheck(zbx_uint64_t proxyid); typedef struct { zbx_uint64_t hostid; unsigned char status; char *name; } zbx_cached_proxy_t; ZBX_PTR_VECTOR_DECL(cached_proxy_ptr, zbx_cached_proxy_t *) void zbx_dc_get_all_proxies(zbx_vector_cached_proxy_ptr_t *proxies); void zbx_cached_proxy_free(zbx_cached_proxy_t *proxy); int zbx_dc_get_proxy_name_type_by_id(zbx_uint64_t proxyid, int *status, char **name); /* item snmpv3 security levels */ #define ZBX_ITEM_SNMPV3_SECURITYLEVEL_NOAUTHNOPRIV 0 #define ZBX_ITEM_SNMPV3_SECURITYLEVEL_AUTHNOPRIV 1 #define ZBX_ITEM_SNMPV3_SECURITYLEVEL_AUTHPRIV 2 /* maintenance tag operators */ #define ZBX_MAINTENANCE_TAG_OPERATOR_EQUAL 0 #define ZBX_MAINTENANCE_TAG_OPERATOR_LIKE 2 /* maintenance tag evaluation types */ /* SYNC WITH PHP! */ #define ZBX_MAINTENANCE_TAG_EVAL_TYPE_AND_OR 0 #define ZBX_MAINTENANCE_TAG_EVAL_TYPE_OR 2 /* special item key used for ICMP pings */ #define ZBX_SERVER_ICMPPING_KEY "icmpping" /* special item key used for ICMP ping latency */ #define ZBX_SERVER_ICMPPINGSEC_KEY "icmppingsec" /* special item key used for ICMP ping loss packages */ #define ZBX_SERVER_ICMPPINGLOSS_KEY "icmppingloss" int zbx_dc_drule_next(time_t now, zbx_uint64_t *druleid, time_t *nextcheck); void zbx_dc_drule_queue(time_t now, zbx_uint64_t druleid, int delay); int zbx_dc_httptest_next(time_t now, zbx_uint64_t *httptestid, time_t *nextcheck); void zbx_dc_httptest_queue(time_t now, zbx_uint64_t httptestid, int delay); zbx_uint64_t zbx_dc_get_received_revision(void); void zbx_dc_update_received_revision(zbx_uint64_t revision); void zbx_dc_get_proxy_config_updates(zbx_uint64_t proxy_hostid, zbx_uint64_t revision, zbx_vector_uint64_t *hostids, zbx_vector_uint64_t *updated_hostids, zbx_vector_uint64_t *removed_hostids, zbx_vector_uint64_t *httptestids); void zbx_dc_get_macro_updates(const zbx_vector_uint64_t *hostids, const zbx_vector_uint64_t *updated_hostids, zbx_uint64_t revision, zbx_vector_uint64_t *macro_hostids, int *global, zbx_vector_uint64_t *del_macro_hostids); void zbx_dc_get_unused_macro_templates(zbx_hashset_t *templates, const zbx_vector_uint64_t *hostids, zbx_vector_uint64_t *templateids); #endif