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
390
391
392
393
394
395
396
397
398
399
|
/*
** ZABBIX
** Copyright (C) 2000-2005 SIA Zabbix
**
** 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., 675 Mass Ave, Cambridge, MA 02139, USA.
**/
#ifndef ZABBIX_DB_H
#define ZABBIX_DB_H
/* time_t */
#include <time.h>
#include "config.h"
#include "common.h"
#ifdef HAVE_MYSQL
# include "mysql.h"
# include "errmsg.h"
# include "mysqld_error.h"
# define DB_HANDLE MYSQL
#endif /* HAVE_MYSQL */
#ifdef HAVE_ORACLE
# include "sqlora.h"
#endif /* HAVE_ORACLE */
#ifdef HAVE_PGSQL
# include <libpq-fe.h>
#endif /* HAVE_PGSQL */
extern char *CONFIG_DBHOST;
extern char *CONFIG_DBNAME;
extern char *CONFIG_DBUSER;
extern char *CONFIG_DBPASSWORD;
extern char *CONFIG_DBSOCKET;
extern int CONFIG_DBPORT;
#define DB_FULL_DELETE 0
#define DB_PART_DELETE 1
#define DB_HOST struct host_type
#define DB_ITEM struct item_type
#define DB_TRIGGER struct trigger_type
#define DB_ACTION struct action_type
#define DB_CONDITION struct condition_type
#define DB_ALERT struct alert_type
#define DB_FUNCTION struct function_type
#define DB_MEDIA struct media_type
#define DB_MEDIATYPE struct mediatype_type
#define DB_GRAPH struct graph_type
#define DB_GRAPH_ITEM struct graph_item_type
#define DB_HOUSEKEEPER struct housekeeper_type
#ifdef HAVE_MYSQL
#define DB_RESULT MYSQL_RES *
#define DBfree_result mysql_free_result
#define DB_ROW MYSQL_ROW
#endif
#ifdef HAVE_PGSQL
#define DB_ROW char **
#define DB_RESULT ZBX_PG_DB_RESULT*
#define DBfree_result PG_DBfree_result
typedef struct zbx_pg_db_result_s
{
PGresult *pg_result;
int row_num;
int fld_num;
int cursor;
DB_ROW values;
} ZBX_PG_DB_RESULT;
void PG_DBfree_result(DB_RESULT result);
#endif
#ifdef HAVE_ORACLE
#define DB_RESULT sqlo_stmt_handle_t
#define DBfree_result sqlo_close
#define DB_ROW char **
#endif
#define MAX_HOST_HOST_LEN 64
#define MAX_ITEM_KEY_LEN 64
#define MAX_ITEM_IP_LEN 15
#define MAX_ITEM_SNMP_COMMUNITY_LEN 64
#define MAX_ITEM_SNMP_OID_LEN 255
/* Trigger related defines */
#define TRIGGER_DESCRIPTION_LEN 255
#define TRIGGER_DESCRIPTION_LEN_MAX TRIGGER_DESCRIPTION_LEN+1
#define TRIGGER_EXPRESSION_LEN 255
#define TRIGGER_EXPRESSION_LEN_MAX TRIGGER_EXPRESSION_LEN+1
#define TRIGGER_URL_LEN 255
#define TRIGGER_URL_LEN_MAX TRIGGER_URL_LEN+1
#define TRIGGER_COMMENTS_LEN 4096
#define TRIGGER_COMMENTS_LEN_MAX TRIGGER_URL_LEN+1
#define CONDITION_VALUE_LEN 255
#define CONDITION_VALUE_LEN_MAX CONDITION_VALUE_LEN+1
#define HOST_HOST_LEN 64
#define HOST_HOST_LEN_MAX HOST_HOST_LEN+1
#define HOST_IP_LEN 15
#define HOST_IP_LEN_MAX HOST_IP_LEN+1
#define HOST_ERROR_LEN 128
#define HOST_ERROR_LEN_MAX HOST_ERROR_LEN+1
#define HOST_ERROR_LEN 128
#define HOST_ERROR_LEN_MAX HOST_ERROR_LEN+1
#define ITEM_KEY_LEN 64
#define ITEM_KEY_LEN_MAX ITEM_KEY_LEN+1
#define GRAPH_NAME_LEN 128
#define GRAPH_NAME_LEN_MAX GRAPH_NAME_LEN+1
#define GRAPH_ITEM_COLOR_LEN 32
#define GRAPH_ITEM_COLOR_LEN_MAX GRAPH_ITEM_COLOR_LEN+1
#define ACTION_SUBJECT_LEN 255
#define ACTION_SUBJECT_LEN_MAX ACTION_SUBJECT_LEN+1
#define ZBX_SQL_ITEM_SELECT "i.itemid,i.key_,h.host,h.port,i.delay,i.description,i.nextcheck,i.type,i.snmp_community,i.snmp_oid,h.useip,h.ip,i.history,i.lastvalue,i.prevvalue,i.hostid,h.status,i.value_type,h.errors_from,i.snmp_port,i.delta,i.prevorgvalue,i.lastclock,i.units,i.multiplier,i.snmpv3_securityname,i.snmpv3_securitylevel,i.snmpv3_authpassphrase,i.snmpv3_privpassphrase,i.formula,h.available,i.status,i.trapper_hosts,i.logtimefmt,i.valuemapid,i.delay_flex from hosts h, items i"
#define ZBX_MAX_SQL_LEN 16384
DB_HOST
{
zbx_uint64_t hostid;
char host[HOST_HOST_LEN_MAX];
int useip;
char ip[HOST_IP_LEN_MAX];
int port;
int status;
int disable_until;
int errors_from;
char error[HOST_ERROR_LEN_MAX];
int available;
};
DB_GRAPH
{
zbx_uint64_t graphid;
char name[GRAPH_NAME_LEN_MAX];
int width;
int height;
int yaxistype;
double yaxismin;
double yaxismax;
};
DB_GRAPH_ITEM
{
zbx_uint64_t gitemid;
zbx_uint64_t graphid;
zbx_uint64_t itemid;
int drawtype;
int sortorder;
char color[GRAPH_ITEM_COLOR_LEN_MAX];
};
DB_ITEM
{
zbx_uint64_t itemid;
zbx_uint64_t hostid;
int type;
int status;
char *description;
char key[ITEM_KEY_LEN_MAX];
char *host;
int host_status;
int host_available;
int host_errors_from;
int useip;
char *ip;
char *shortname;
char *snmp_community;
char *snmp_oid;
int snmp_port;
char *trapper_hosts;
int port;
int delay;
int history;
int trends;
double prevorgvalue;
int prevorgvalue_null;
double lastvalue;
int lastclock;
char *lastvalue_str;
int lastvalue_null;
double prevvalue;
char *prevvalue_str;
int prevvalue_null;
time_t lastcheck;
time_t nextcheck;
int value_type;
int delta;
int multiplier;
char *units;
char *snmpv3_securityname;
int snmpv3_securitylevel;
char *snmpv3_authpassphrase;
char *snmpv3_privpassphrase;
char *formula;
int lastlogsize;
int timestamp;
int eventlog_severity;
char *eventlog_source;
char *logtimefmt;
int valuemapid;
char *delay_flex;
};
DB_FUNCTION
{
zbx_uint64_t functionid;
zbx_uint64_t itemid;
zbx_uint64_t triggerid;
double lastvalue;
int lastvalue_null;
char *function;
/* int parameter;*/
char *parameter;
};
DB_MEDIA
{
zbx_uint64_t mediaid;
/* char *type;*/
zbx_uint64_t mediatypeid;
char *sendto;
char *period;
int active;
int severity;
};
DB_MEDIATYPE
{
zbx_uint64_t mediatypeid;
int type;
char *description;
char *smtp_server;
char *smtp_helo;
char *smtp_email;
char *exec_path;
char *gsm_modem;
};
DB_TRIGGER
{
zbx_uint64_t triggerid;
char expression[TRIGGER_EXPRESSION_LEN_MAX];
char description[TRIGGER_DESCRIPTION_LEN_MAX];
char url[TRIGGER_URL_LEN_MAX];
char comments[TRIGGER_COMMENTS_LEN_MAX];
int status;
int value;
int prevvalue;
int priority;
};
DB_ACTION
{
zbx_uint64_t actionid;
int actiontype;
zbx_uint64_t userid;
/* int delay;*/
int lastcheck;
int recipient;
char subject[ACTION_SUBJECT_LEN_MAX]; /* don't use pointer, cose sizeof is used */
char message[MAX_STRING_LEN]; /* don't use pointer, cose sizeof is used */
int maxrepeats;
int repeatdelay;
char scripts[MAX_STRING_LEN];
};
DB_CONDITION
{
zbx_uint64_t conditionid;
zbx_uint64_t actionid;
int conditiontype;
int operator;
char *value;
};
DB_ALERT
{
zbx_uint64_t alertid;
zbx_uint64_t actionid;
int clock;
/* char *type;*/
zbx_uint64_t mediatypeid;
char *sendto;
char *subject;
char *message;
int status;
int retries;
int delay;
};
DB_HOUSEKEEPER
{
zbx_uint64_t housekeeperid;
char *tablename;
char *field;
zbx_uint64_t value;
};
void DBconnect(void);
void DBclose(void);
void DBvacuum(void);
/*int DBexecute( char *query );*/
int DBexecute(const char *fmt, ...);
/*long DBaffected_rows();*/
/*DB_RESULT DBselect(char *query);*/
DB_RESULT DBselect(const char *fmt, ...);
DB_RESULT DBselectN(char *query, int n);
DB_ROW DBfetch(DB_RESULT result);
zbx_uint64_t DBget_nextid(char *table, char *field);
/*char *DBget_field(DB_RESULT result, int rownum, int fieldnum);*/
/*int DBnum_rows(DB_RESULT result);*/
int DBinsert_id(int exec_result, const char *table, const char *field);
int DBis_null(char *field);
int DBget_function_result(double *result,char *functionid);
void DBupdate_host_availability(int hostid,int available,int clock,char *error);
int DBupdate_item_status_to_notsupported(int itemid, char *error);
int DBadd_trend(int itemid, double value, int clock);
int DBadd_history(int itemid, double value, int clock);
int DBadd_history_log(int itemid, char *value, int clock, int timestamp, char *source, int severity);
int DBadd_history_str(int itemid, char *value, int clock);
int DBadd_history_text(int itemid, char *value, int clock);
int DBadd_history_uint(int itemid, zbx_uint64_t value, int clock);
int DBadd_service_alarm(int serviceid,int status,int clock);
int DBadd_alert(int actionid, int triggerid, int userid, int mediatypeid, char *sendto, char *subject, char *message, int maxrepeats, int repeatdelay);
void DBupdate_triggers_status_after_restart(void);
int DBget_prev_trigger_value(int triggerid);
/*int DBupdate_trigger_value(int triggerid,int value,int clock);*/
int DBupdate_trigger_value(DB_TRIGGER *trigger, int new_value, int now, char *reason);
int DBget_items_count(void);
int DBget_items_unsupported_count(void);
int DBget_history_count(void);
int DBget_history_str_count(void);
int DBget_trends_count(void);
int DBget_triggers_count(void);
int DBget_queue_count(void);
void DBescape_string(char *from, char *to, int maxlen);
void DBget_item_from_db(DB_ITEM *item,DB_ROW row);
int DBadd_host(char *server, int port, int status, int useip, char *ip, int disable_until, int available);
int DBhost_exists(char *server);
int DBget_host_by_hostid(int hostid,DB_HOST *host);
int DBsync_host_with_templates(int hostid);
int DBsync_host_with_template(int hostid,int templateid,int items,int triggers,int graphs);
int DBadd_templates_to_host(int hostid,int host_templateid);
int DBadd_template_linkage(int hostid,int templateid,int items,int triggers,int graphs);
int DBget_item_by_itemid(int itemid,DB_ITEM *item);
int DBadd_item_to_linked_hosts(int itemid, int hostid);
int DBadd_item(char *description, char *key, int hostid, int delay, int history, int status, int type, char *snmp_community, char *snmp_oid,int value_type,char *trapper_hosts,int snmp_port,char *units,int multiplier,int delta, char *snmpv3_securityname,int snmpv3_securitylevel,char *snmpv3_authpassphrase,char *snmpv3_privpassphrase,char *formula,int trends,char *logtimefmt);
int DBadd_action_to_linked_hosts(int actionid,int hostid);
int DBget_trigger_by_triggerid(int triggerid,DB_TRIGGER *trigger);
int DBadd_trigger_to_linked_hosts(int triggerid,int hostid);
void DBdelete_triggers_by_itemid(int itemid);
void DBdelete_sysmaps_hosts_by_hostid(int hostid);
int DBadd_graph(char *name, int width, int height, int yaxistype, double yaxismin, double yaxismax);
int DBget_graph_item_by_gitemid(int gitemid, DB_GRAPH_ITEM *graph_item);
int DBget_graph_by_graphid(int graphid, DB_GRAPH *graph);
int DBadd_graph_item_to_linked_hosts(int gitemid,int hostid);
#endif
|