1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
|
/*
** Zabbix
** Copyright (C) 2001-2014 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_DBCACHE_H
#define ZABBIX_DBCACHE_H
#include "db.h"
#include "sysinfo.h"
#include "zbxalgo.h"
#define ZBX_SYNC_PARTIAL 0
#define ZBX_SYNC_FULL 1
#define ZBX_SYNC_MAX 1000
#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_COUNT 5 /* number of poller types */
#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
extern char *CONFIG_FILE;
extern int CONFIG_TIMEOUT;
extern zbx_uint64_t CONFIG_CONF_CACHE_SIZE;
extern zbx_uint64_t CONFIG_HISTORY_CACHE_SIZE;
extern zbx_uint64_t CONFIG_TRENDS_CACHE_SIZE;
extern zbx_uint64_t CONFIG_TEXT_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_UNAVAILABLE_DELAY;
extern int CONFIG_UNREACHABLE_PERIOD;
extern int CONFIG_UNREACHABLE_DELAY;
extern int CONFIG_HISTSYNCER_FORKS;
extern int CONFIG_PROXYCONFIG_FREQUENCY;
extern int CONFIG_PROXYDATA_FREQUENCY;
typedef struct
{
zbx_uint64_t interfaceid;
char ip_orig[INTERFACE_IP_LEN_MAX];
char dns_orig[INTERFACE_DNS_LEN_MAX];
char port_orig[INTERFACE_PORT_LEN_MAX];
char *addr;
unsigned short port;
unsigned char useip;
unsigned char type;
unsigned char main;
}
DC_INTERFACE;
typedef struct
{
zbx_uint64_t hostid;
zbx_uint64_t proxy_hostid;
char host[HOST_HOST_LEN_MAX];
char name[HOST_HOST_LEN_MAX];
unsigned char maintenance_status;
unsigned char maintenance_type;
int maintenance_from;
int errors_from;
unsigned char available;
int disable_until;
int snmp_errors_from;
unsigned char snmp_available;
int snmp_disable_until;
int ipmi_errors_from;
unsigned char ipmi_available;
int ipmi_disable_until;
signed char ipmi_authtype;
unsigned char ipmi_privilege;
char ipmi_username[HOST_IPMI_USERNAME_LEN_MAX];
char ipmi_password[HOST_IPMI_PASSWORD_LEN_MAX];
int jmx_errors_from;
unsigned char jmx_available;
int jmx_disable_until;
char inventory_mode;
unsigned char status;
}
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 data_type;
unsigned char value_type;
unsigned char delta;
unsigned char multiplier;
unsigned char state;
unsigned char db_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;
char key_orig[ITEM_KEY_LEN * 4 + 1], *key;
char *formula;
char *units;
int delay;
int nextcheck;
int lastclock;
int mtime;
int history;
int trends;
char trapper_hosts[ITEM_TRAPPER_HOSTS_LEN_MAX];
char logtimefmt[ITEM_LOGTIMEFMT_LEN_MAX];
char snmp_community_orig[ITEM_SNMP_COMMUNITY_LEN_MAX], *snmp_community;
char snmp_oid_orig[ITEM_SNMP_OID_LEN_MAX], *snmp_oid;
char snmpv3_securityname_orig[ITEM_SNMPV3_SECURITYNAME_LEN_MAX], *snmpv3_securityname;
char snmpv3_authpassphrase_orig[ITEM_SNMPV3_AUTHPASSPHRASE_LEN_MAX], *snmpv3_authpassphrase;
char snmpv3_privpassphrase_orig[ITEM_SNMPV3_PRIVPASSPHRASE_LEN_MAX], *snmpv3_privpassphrase;
char ipmi_sensor[ITEM_IPMI_SENSOR_LEN_MAX];
char *params;
char delay_flex[ITEM_DELAY_FLEX_LEN_MAX];
char username_orig[ITEM_USERNAME_LEN_MAX], *username;
char publickey_orig[ITEM_PUBLICKEY_LEN_MAX], *publickey;
char privatekey_orig[ITEM_PRIVATEKEY_LEN_MAX], *privatekey;
char password_orig[ITEM_PASSWORD_LEN_MAX], *password;
char snmpv3_contextname_orig[ITEM_SNMPV3_CONTEXTNAME_LEN_MAX], *snmpv3_contextname;
char *db_error;
}
DC_ITEM;
typedef struct
{
zbx_uint64_t functionid;
zbx_uint64_t triggerid;
zbx_uint64_t itemid;
char *function;
char *parameter;
}
DC_FUNCTION;
typedef struct _DC_TRIGGER
{
zbx_uint64_t triggerid;
char *description;
char *expression_orig;
/* temporary value, allocated during processing and freed right after */
char *expression;
char *error;
char *new_error;
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;
}
DC_TRIGGER;
typedef struct
{
zbx_uint64_t hostid;
char host[HOST_HOST_LEN_MAX];
int proxy_config_nextcheck;
int proxy_data_nextcheck;
char addr_orig[INTERFACE_ADDR_LEN_MAX];
char port_orig[INTERFACE_PORT_LEN_MAX];
char *addr;
unsigned short port;
}
DC_PROXY;
typedef struct
{
const char *host;
const 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 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
{
zbx_uint64_t itemid;
zbx_timespec_t timestamp;
history_value_t value;
}
zbx_item_history_value_t;
/* item queue data */
typedef struct
{
zbx_uint64_t itemid;
zbx_uint64_t proxy_hostid;
int type;
int nextcheck;
}
zbx_queue_item_t;
typedef struct
{
zbx_uint64_t hostid;
int errors_from;
int disable_until;
unsigned char type;
unsigned char available;
}
zbx_host_availability_t;
int is_item_processed_by_server(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 value_type, unsigned char flags, AGENT_RESULT *value,
zbx_timespec_t *ts, unsigned char state, const char *error);
void dc_flush_history();
int DCsync_history(int sync_type);
void init_database_cache();
void free_database_cache();
void DCadd_nextcheck(zbx_uint64_t itemid, const zbx_timespec_t *ts, const char *error_msg);
void DCflush_nextchecks();
#define ZBX_STATS_HISTORY_COUNTER 0
#define ZBX_STATS_HISTORY_FLOAT_COUNTER 1
#define ZBX_STATS_HISTORY_UINT_COUNTER 2
#define ZBX_STATS_HISTORY_STR_COUNTER 3
#define ZBX_STATS_HISTORY_LOG_COUNTER 4
#define ZBX_STATS_HISTORY_TEXT_COUNTER 5
#define ZBX_STATS_NOTSUPPORTED_COUNTER 6
#define ZBX_STATS_HISTORY_TOTAL 7
#define ZBX_STATS_HISTORY_USED 8
#define ZBX_STATS_HISTORY_FREE 9
#define ZBX_STATS_HISTORY_PFREE 10
#define ZBX_STATS_TREND_TOTAL 11
#define ZBX_STATS_TREND_USED 12
#define ZBX_STATS_TREND_FREE 13
#define ZBX_STATS_TREND_PFREE 14
#define ZBX_STATS_TEXT_TOTAL 15
#define ZBX_STATS_TEXT_USED 16
#define ZBX_STATS_TEXT_FREE 17
#define ZBX_STATS_TEXT_PFREE 18
void *DCget_stats(int request);
zbx_uint64_t DCget_nextid(const char *table_name, int num);
void DCsync_configuration(void);
void init_configuration_cache();
void free_configuration_cache();
void DCload_config();
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);
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_set_item_db_state(zbx_uint64_t itemid, unsigned char state, const char *error);
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);
void DCconfig_lock_triggers_by_itemids(zbx_uint64_t *itemids, int itemids_num, zbx_vector_uint64_t *triggerids);
void DCconfig_unlock_triggers(const zbx_vector_uint64_t *triggerids);
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, char **errors, int itemids_num);
void DCconfig_get_time_based_triggers(DC_TRIGGER **trigger_info, zbx_vector_ptr_t *trigger_order, int max_triggers,
int process_num);
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_poller_nextcheck(unsigned char poller_type);
int DCconfig_get_poller_items(unsigned char poller_type, DC_ITEM *items);
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);
#define CONFIG_REFRESH_UNSUPPORTED 1
#define CONFIG_DISCOVERY_GROUPID 2
#define CONFIG_SNMPTRAP_LOGGING 3
#define ZBX_HK_OPTION_DISABLED 0
#define ZBX_HK_OPTION_ENABLED 1
void *DCconfig_get_config_data(void *data, int type);
void DCconfig_get_config_hk(zbx_config_hk_t *data);
int DCget_trigger_severity_name(unsigned char priority, char **replace_to);
void DCrequeue_items(zbx_uint64_t *itemids, unsigned char *states, int *lastclocks, zbx_uint64_t *lastlogsizes,
int *mtimes, int *errcodes, size_t num);
int DCconfig_activate_host(DC_ITEM *item);
int DCconfig_deactivate_host(DC_ITEM *item, int now);
int DCconfig_check_trigger_dependencies(zbx_uint64_t triggerid);
void DCconfig_set_trigger_value(zbx_uint64_t triggerid, unsigned char value,
unsigned char state, const char *error, int *lastchange);
void DCconfig_set_maintenance(const zbx_uint64_t *hostids, int hostids_num, int maintenance_status,
int maintenance_type, int maintenance_from);
#define ZBX_CONFSTATS_BUFFER_TOTAL 1
#define ZBX_CONFSTATS_BUFFER_USED 2
#define ZBX_CONFSTATS_BUFFER_FREE 3
#define ZBX_CONFSTATS_BUFFER_PFREE 4
void *DCconfig_get_stats(int request);
int DCconfig_get_proxypoller_hosts(DC_PROXY *proxies, int max_hosts);
int DCconfig_get_proxypoller_nextcheck();
void DCrequeue_proxy(zbx_uint64_t hostid, unsigned char update_nextcheck);
void DCget_user_macro(zbx_uint64_t *hostids, int host_num, const char *macro, char **replace_to);
int DChost_activate(zbx_host_availability_t *in, zbx_host_availability_t *out);
int DChost_deactivate(const zbx_timespec_t *ts, zbx_host_availability_t *in, zbx_host_availability_t *out);
void DChost_update_availability(const zbx_host_availability_t *availability, int availability_num);
void DCget_delta_items(zbx_hashset_t *items, const zbx_vector_uint64_t *ids);
void DCset_delta_items(zbx_hashset_t *items);
void DCfree_item_queue(zbx_vector_ptr_t *queue);
int DCget_item_queue(zbx_vector_ptr_t *queue, int from, int to);
int DCget_item_count();
int DCget_item_unsupported_count();
int DCget_trigger_count();
double DCget_required_performance();
int DCget_host_count();
void DCget_functions_hostids(zbx_vector_uint64_t *hostids, const zbx_vector_uint64_t *functionids);
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);
#endif
|