![]() |
Icinga-core 1.4.0
next gen monitoring
|
00001 /************************************************************************ 00002 * 00003 * IDO2DB.H - IDO2DB Include File 00004 * Copyright (c) 2005-2007 Ethan Galstad 00005 * Copyright (c) 2009-2011 Icinga Development Team (http://www.icinga.org) 00006 * 00007 ************************************************************************/ 00008 00009 #ifndef _IDO2DB_IDO2DB_H 00010 #define _IDO2DB_IDO2DB_H 00011 00012 #include "../../../include/config.h" 00013 #include "utils.h" 00014 00015 #define IDO2DB_NAME "IDO2DB" 00016 #define IDO2DB_DATE "05-11-2011" 00017 #define IDO2DB_VERSION "1.4.0" 00018 00019 #define IDO2DB_SCHEMA_VERSION "1.4.0" 00020 00021 /*************** RDBMS headers *************/ 00022 00023 /* oracle */ 00024 #ifdef USE_ORACLE 00025 00026 #ifdef HAVE_CONFIG_H 00027 #undef HAVE_CONFIG_H 00028 #include <ocilib.h> 00029 #define HAVE_CONFIG_H 00030 #else 00031 #include <ocilib.h> 00032 #endif 00033 00034 #endif 00035 00036 /* pgsql */ 00037 #ifdef HAVE_LIBPQ_FE_H 00038 #include <libpq-fe.h> 00039 #endif 00040 00041 /* libdbi */ 00042 #ifdef HAVE_DBI_DBI_H 00043 #include <dbi/dbi.h> 00044 #endif 00045 00046 00047 /*************** mbuf definitions *************/ 00048 #define IDO2DB_MBUF_CONTACTGROUP 0 00049 #define IDO2DB_MBUF_CONTACTGROUPMEMBER 1 00050 #define IDO2DB_MBUF_SERVICEGROUPMEMBER 2 00051 #define IDO2DB_MBUF_HOSTGROUPMEMBER 3 00052 #define IDO2DB_MBUF_SERVICENOTIFICATIONCOMMAND 4 00053 #define IDO2DB_MBUF_HOSTNOTIFICATIONCOMMAND 5 00054 #define IDO2DB_MBUF_CONTACTADDRESS 6 00055 #define IDO2DB_MBUF_TIMERANGE 7 00056 #define IDO2DB_MBUF_PARENTHOST 8 00057 #define IDO2DB_MBUF_CONFIGFILEVARIABLE 9 00058 #define IDO2DB_MBUF_CONFIGVARIABLE 10 00059 #define IDO2DB_MBUF_RUNTIMEVARIABLE 11 00060 #define IDO2DB_MBUF_CUSTOMVARIABLE 12 00061 #define IDO2DB_MBUF_CONTACT 13 00062 00063 #define IDO2DB_MAX_MBUF_ITEMS 14 00064 00065 #define IDO2DB_MAX_BUFLEN 16384 00066 00067 00068 /***************** structures *****************/ 00069 00070 typedef struct ido2db_mbuf_struct{ 00071 int used_lines; 00072 int allocated_lines; 00073 char **buffer; 00074 }ido2db_mbuf; 00075 00076 00077 typedef struct ido2db_dbobject_struct{ 00078 char *name1; 00079 char *name2; 00080 int object_type; 00081 unsigned long object_id; 00082 struct ido2db_dbobject_struct *nexthash; 00083 }ido2db_dbobject; 00084 00085 00086 typedef struct ido2db_dbconninfo_struct{ 00087 int server_type; 00088 int connected; 00089 int error; 00090 #ifdef USE_LIBDBI /* libdbi specific */ 00091 dbi_conn dbi_conn; 00092 dbi_result dbi_result; 00093 #endif 00094 00095 #ifdef USE_PGSQL /* pgsql specific */ 00096 PGconn *pg_conn; 00097 PGresult *pg_result; 00098 #endif 00099 00100 #ifdef USE_ORACLE /* Oracle ocilib specific */ 00101 OCI_Connection* oci_connection; 00102 OCI_Statement* oci_statement; 00103 OCI_Resultset* oci_resultset; 00104 /* for bind params keep prepared statements */ 00105 OCI_Statement* oci_statement_objects_insert; 00106 OCI_Statement* oci_statement_logentries_insert; 00107 OCI_Statement* oci_statement_startup_clean; 00108 OCI_Statement* oci_statement_timedevents; 00109 OCI_Statement* oci_statement_timedevents_queue; 00110 OCI_Statement* oci_statement_timedeventqueue; 00111 OCI_Statement* oci_statement_hostchecks; 00112 OCI_Statement* oci_statement_hoststatus; 00113 OCI_Statement* oci_statement_servicechecks; 00114 OCI_Statement* oci_statement_servicestatus; 00115 OCI_Statement* oci_statement_contact_notificationcommands; 00116 OCI_Statement* oci_statement_programstatus; 00117 OCI_Statement* oci_statement_systemcommanddata; 00118 OCI_Statement* oci_statement_eventhandlerdata; 00119 OCI_Statement* oci_statement_notificationdata; 00120 OCI_Statement* oci_statement_contactnotificationdata; 00121 OCI_Statement* oci_statement_contactnotificationmethoddata; 00122 OCI_Statement* oci_statement_commentdata; 00123 OCI_Statement* oci_statement_commentdata_history; 00124 OCI_Statement* oci_statement_downtimedata_scheduled_downtime; 00125 OCI_Statement* oci_statement_downtimedata_downtime_history; 00126 OCI_Statement* oci_statement_contactstatusdata; 00127 OCI_Statement* oci_statement_configfilevariables; 00128 OCI_Statement* oci_statement_configfilevariables_insert; 00129 OCI_Statement* oci_statement_runtimevariables; 00130 OCI_Statement* oci_statement_hostdefinition_definition; 00131 OCI_Statement* oci_statement_hostdefinition_parenthosts; 00132 OCI_Statement* oci_statement_hostdefinition_contactgroups; 00133 OCI_Statement* oci_statement_hostdefinition_contacts; 00134 OCI_Statement* oci_statement_hostgroupdefinition_definition; 00135 OCI_Statement* oci_statement_hostgroupdefinition_hostgroupmembers; 00136 OCI_Statement* oci_statement_servicedefinition_definition; 00137 OCI_Statement* oci_statement_servicedefinition_contactgroups; 00138 OCI_Statement* oci_statement_servicedefinition_contacts; 00139 OCI_Statement* oci_statement_servicegroupdefinition_definition; 00140 OCI_Statement* oci_statement_servicegroupdefinition_members; 00141 OCI_Statement* oci_statement_hostdependencydefinition_definition; 00142 OCI_Statement* oci_statement_servicedependencydefinition_definition; 00143 OCI_Statement* oci_statement_hostescalationdefinition_definition; 00144 OCI_Statement* oci_statement_hostescalationdefinition_contactgroups; 00145 OCI_Statement* oci_statement_hostescalationdefinition_contacts; 00146 OCI_Statement* oci_statement_serviceescalationdefinition_definition; 00147 OCI_Statement* oci_statement_serviceescalationdefinition_contactgroups; 00148 OCI_Statement* oci_statement_serviceescalationdefinition_contacts; 00149 OCI_Statement* oci_statement_commanddefinition_definition; 00150 OCI_Statement* oci_statement_timeperiodefinition_definition; 00151 OCI_Statement* oci_statement_timeperiodefinition_timeranges; 00152 OCI_Statement* oci_statement_contactdefinition_definition; 00153 OCI_Statement* oci_statement_contactdefinition_addresses; 00154 OCI_Statement* oci_statement_contactdefinition_servicenotificationcommands; 00155 OCI_Statement* oci_statement_save_custom_variables_customvariables; 00156 OCI_Statement* oci_statement_save_custom_variables_customvariablestatus; 00157 OCI_Statement* oci_statement_contactgroupdefinition_definition; 00158 OCI_Statement* oci_statement_contactgroupdefinition_contactgroupmembers; 00159 OCI_Statement* oci_statement_process_events; 00160 OCI_Statement* oci_statement_flappinghistory; 00161 OCI_Statement* oci_statement_external_commands; 00162 OCI_Statement* oci_statement_acknowledgements; 00163 OCI_Statement* oci_statement_statehistory; 00164 OCI_Statement* oci_statement_instances; 00165 OCI_Statement* oci_statement_conninfo; 00166 /* well oh well */ 00167 OCI_Statement* oci_statement_objects_select_name1_name2; 00168 OCI_Statement* oci_statement_objects_select_name1_null_name2; 00169 OCI_Statement* oci_statement_objects_select_name1_name2_null; 00170 OCI_Statement* oci_statement_objects_select_name1_null_name2_null; 00171 OCI_Statement* oci_statement_objects_select_cached; 00172 /* update */ 00173 OCI_Statement* oci_statement_objects_update_inactive; 00174 OCI_Statement* oci_statement_objects_update_active; 00175 OCI_Statement* oci_statement_programstatus_update; 00176 OCI_Statement* oci_statement_timedevents_update; 00177 OCI_Statement* oci_statement_comment_history_update; 00178 OCI_Statement* oci_statement_downtimehistory_update_start; 00179 OCI_Statement* oci_statement_downtimehistory_update_stop; 00180 OCI_Statement* oci_statement_conninfo_update; 00181 OCI_Statement* oci_statement_conninfo_update_checkin; 00182 /* select */ 00183 OCI_Statement* oci_statement_logentries_select; 00184 OCI_Statement* oci_statement_instances_select; 00185 00186 /* delete */ 00187 OCI_Statement* oci_statement_timedeventqueue_delete; 00188 OCI_Statement* oci_statement_timedeventqueue_delete_more; 00189 OCI_Statement* oci_statement_comments_delete; 00190 OCI_Statement* oci_statement_downtime_delete; 00191 OCI_Statement* oci_statement_instances_delete; 00192 OCI_Statement* oci_statement_instances_delete_time; 00193 00194 /* dbversion */ 00195 OCI_Statement* oci_statement_dbversion_select; 00196 00197 #endif /* Oracle ocilib specific */ 00198 unsigned long instance_id; 00199 unsigned long conninfo_id; 00200 time_t latest_program_status_time; 00201 time_t latest_host_status_time; 00202 time_t latest_service_status_time; 00203 time_t latest_contact_status_time; 00204 time_t latest_queued_event_time; 00205 time_t latest_realtime_data_time; 00206 time_t latest_comment_time; 00207 int clean_event_queue; 00208 unsigned long last_notification_id; 00209 unsigned long last_contact_notification_id; 00210 unsigned long max_timedevents_age; 00211 unsigned long max_systemcommands_age; 00212 unsigned long max_servicechecks_age; 00213 unsigned long max_hostchecks_age; 00214 unsigned long max_eventhandlers_age; 00215 unsigned long max_externalcommands_age; 00216 unsigned long max_logentries_age; 00217 unsigned long max_acknowledgements_age; 00218 unsigned long trim_db_interval; 00219 unsigned long housekeeping_thread_startup_delay; 00220 unsigned long clean_realtime_tables_on_core_startup; 00221 unsigned long clean_config_tables_on_core_startup; 00222 unsigned long oci_errors_to_syslog; 00223 time_t last_table_trim_time; 00224 time_t last_logentry_time; 00225 char *last_logentry_data; 00226 char *dbversion; 00227 ido2db_dbobject **object_hashlist; 00228 }ido2db_dbconninfo; 00229 00230 00231 typedef struct ido2db_input_data_info_struct{ 00232 int protocol_version; 00233 int disconnect_client; 00234 int ignore_client_data; 00235 char *instance_name; 00236 char *agent_name; 00237 char *agent_version; 00238 char *disposition; 00239 char *connect_source; 00240 char *connect_type; 00241 int current_input_section; 00242 int current_input_data; 00243 unsigned long bytes_processed; 00244 unsigned long lines_processed; 00245 unsigned long entries_processed; 00246 unsigned long data_start_time; 00247 unsigned long data_end_time; 00248 int current_object_config_type; 00249 char **buffered_input; 00250 ido2db_mbuf mbuf[IDO2DB_MAX_MBUF_ITEMS]; 00251 ido2db_dbconninfo dbinfo; 00252 }ido2db_idi; 00253 00254 00255 00256 /*************** DB server types ***************/ 00257 #define IDO2DB_DBSERVER_NONE 0 00258 #define IDO2DB_DBSERVER_MYSQL 1 00259 #define IDO2DB_DBSERVER_PGSQL 2 00260 #define IDO2DB_DBSERVER_DB2 3 00261 #define IDO2DB_DBSERVER_FIREBIRD 4 00262 #define IDO2DB_DBSERVER_FREETDS 5 00263 #define IDO2DB_DBSERVER_INGRES 6 00264 #define IDO2DB_DBSERVER_MSQL 7 00265 #define IDO2DB_DBSERVER_ORACLE 8 00266 #define IDO2DB_DBSERVER_SQLITE 9 00267 #define IDO2DB_DBSERVER_SQLITE3 10 00268 00269 /*************** DBI Driver names **************/ 00270 #define IDO2DB_DBI_DRIVER_MYSQL "mysql" 00271 #define IDO2DB_DBI_DRIVER_PGSQL "pgsql" 00272 #define IDO2DB_DBI_DRIVER_DB2 "db2l" 00273 #define IDO2DB_DBI_DRIVER_FIREBIRD "firebird" 00274 #define IDO2DB_DBI_DRIVER_FREETDS "freetds" 00275 #define IDO2DB_DBI_DRIVER_INGRES "ingres" 00276 #define IDO2DB_DBI_DRIVER_MSQL "msql" 00277 #define IDO2DB_DBI_DRIVER_ORACLE "Oracle" 00278 #define IDO2DB_DBI_DRIVER_SQLITE "sqlite" 00279 #define IDO2DB_DBI_DRIVER_SQLITE3 "sqlite3" 00280 00281 /*************** misc definitions **************/ 00282 #define IDO2DB_INPUT_BUFFER 1024 00283 /* #define IDO2DB_OBJECT_HASHSLOTS 1024 */ 00284 #define IDO2DB_OBJECT_HASHSLOTS 50240 /* Altinity patch: Spread the list of linked lists thinner */ 00285 00286 00287 /*********** types of input sections ***********/ 00288 #define IDO2DB_INPUT_SECTION_NONE 0 00289 #define IDO2DB_INPUT_SECTION_HEADER 1 00290 #define IDO2DB_INPUT_SECTION_FOOTER 2 00291 #define IDO2DB_INPUT_SECTION_DATA 3 00292 00293 00294 /************* types of input data *************/ 00295 #define IDO2DB_INPUT_DATA_NONE 0 00296 00297 #define IDO2DB_INPUT_DATA_CONFIGDUMPSTART 1 00298 #define IDO2DB_INPUT_DATA_CONFIGDUMPEND 2 00299 00300 #define IDO2DB_INPUT_DATA_LOGENTRY 10 00301 00302 #define IDO2DB_INPUT_DATA_PROCESSDATA 20 00303 #define IDO2DB_INPUT_DATA_TIMEDEVENTDATA 21 00304 #define IDO2DB_INPUT_DATA_LOGDATA 22 00305 #define IDO2DB_INPUT_DATA_SYSTEMCOMMANDDATA 23 00306 #define IDO2DB_INPUT_DATA_EVENTHANDLERDATA 24 00307 #define IDO2DB_INPUT_DATA_NOTIFICATIONDATA 25 00308 #define IDO2DB_INPUT_DATA_SERVICECHECKDATA 26 00309 #define IDO2DB_INPUT_DATA_HOSTCHECKDATA 27 00310 #define IDO2DB_INPUT_DATA_COMMENTDATA 28 00311 #define IDO2DB_INPUT_DATA_DOWNTIMEDATA 29 00312 #define IDO2DB_INPUT_DATA_FLAPPINGDATA 30 00313 #define IDO2DB_INPUT_DATA_PROGRAMSTATUSDATA 31 00314 #define IDO2DB_INPUT_DATA_HOSTSTATUSDATA 32 00315 #define IDO2DB_INPUT_DATA_SERVICESTATUSDATA 33 00316 #define IDO2DB_INPUT_DATA_ADAPTIVEPROGRAMDATA 34 00317 #define IDO2DB_INPUT_DATA_ADAPTIVEHOSTDATA 35 00318 #define IDO2DB_INPUT_DATA_ADAPTIVESERVICEDATA 36 00319 #define IDO2DB_INPUT_DATA_EXTERNALCOMMANDDATA 37 00320 #define IDO2DB_INPUT_DATA_AGGREGATEDSTATUSDATA 38 00321 #define IDO2DB_INPUT_DATA_RETENTIONDATA 39 00322 #define IDO2DB_INPUT_DATA_CONTACTNOTIFICATIONDATA 40 00323 #define IDO2DB_INPUT_DATA_CONTACTNOTIFICATIONMETHODDATA 41 00324 #define IDO2DB_INPUT_DATA_ACKNOWLEDGEMENTDATA 42 00325 #define IDO2DB_INPUT_DATA_STATECHANGEDATA 43 00326 #define IDO2DB_INPUT_DATA_CONTACTSTATUSDATA 44 00327 #define IDO2DB_INPUT_DATA_ADAPTIVECONTACTDATA 45 00328 00329 #define IDO2DB_INPUT_DATA_MAINCONFIGFILEVARIABLES 50 00330 #define IDO2DB_INPUT_DATA_RESOURCECONFIGFILEVARIABLES 51 00331 #define IDO2DB_INPUT_DATA_CONFIGVARIABLES 52 00332 #define IDO2DB_INPUT_DATA_RUNTIMEVARIABLES 53 00333 00334 #define IDO2DB_INPUT_DATA_HOSTDEFINITION 61 00335 #define IDO2DB_INPUT_DATA_HOSTGROUPDEFINITION 62 00336 #define IDO2DB_INPUT_DATA_SERVICEDEFINITION 63 00337 #define IDO2DB_INPUT_DATA_SERVICEGROUPDEFINITION 64 00338 #define IDO2DB_INPUT_DATA_HOSTDEPENDENCYDEFINITION 65 00339 #define IDO2DB_INPUT_DATA_SERVICEDEPENDENCYDEFINITION 66 00340 #define IDO2DB_INPUT_DATA_HOSTESCALATIONDEFINITION 67 00341 #define IDO2DB_INPUT_DATA_SERVICEESCALATIONDEFINITION 68 00342 #define IDO2DB_INPUT_DATA_COMMANDDEFINITION 69 00343 #define IDO2DB_INPUT_DATA_TIMEPERIODDEFINITION 70 00344 #define IDO2DB_INPUT_DATA_CONTACTDEFINITION 71 00345 #define IDO2DB_INPUT_DATA_CONTACTGROUPDEFINITION 72 00346 #define IDO2DB_INPUT_DATA_HOSTEXTINFODEFINITION 73 00347 #define IDO2DB_INPUT_DATA_SERVICEEXTINFODEFINITION 74 00348 00349 00350 /************* types of config data ************/ 00351 #define IDO2DB_CONFIGTYPE_ORIGINAL 0 00352 #define IDO2DB_CONFIGTYPE_RETAINED 1 00353 00354 00355 00356 /************* debugging levels ****************/ 00357 00358 #define IDO2DB_DEBUGL_ALL -1 00359 #define IDO2DB_DEBUGL_NONE 0 00360 #define IDO2DB_DEBUGL_PROCESSINFO 1 00361 #define IDO2DB_DEBUGL_SQL 2 00362 00363 #define IDO2DB_DEBUGV_BASIC 0 00364 #define IDO2DB_DEBUGV_MORE 1 00365 #define IDO2DB_DEBUGV_MOST 2 00366 00367 /************* default trim db interval ********/ 00368 00369 #define DEFAULT_TRIM_DB_INTERVAL 3600 00370 00371 /* default housekeeping thread startup delay **/ 00372 00373 #define DEFAULT_HOUSEKEEPING_THREAD_STARTUP_DELAY 300 00374 00375 /************* oci errors to syslog ************/ 00376 00377 #define DEFAULT_OCI_ERRORS_TO_SYSLOG 1 00378 00379 00380 /************* n worker threads ****************/ 00381 00382 #define IDO2DB_CLEANER_THREADS 1 00383 #define IDO2DB_WORKER_THREADS 1 00384 #define IDO2DB_NR_OF_THREADS (IDO2DB_CLEANER_THREADS+IDO2DB_WORKER_THREADS) 00385 00386 #define IDO2DB_THREAD_POOL_CLEANER 0 00387 #define IDO2DB_THREAD_POOL_WORKER 1 00388 00389 #define IDO2DB_DEFAULT_THREAD_STACK_SIZE 65536 00390 00391 /***************** functions *******************/ 00392 00393 /* config */ 00394 int ido2db_process_arguments(int,char **); 00395 int ido2db_process_config_var(char *); 00396 int ido2db_process_config_file(char *); 00397 00398 /* init */ 00399 int ido2db_initialize_variables(void); 00400 int ido2db_check_init_reqs(void); 00401 00402 /* daemonize */ 00403 int ido2db_drop_privileges(char *,char *); 00404 int ido2db_daemonize(void); 00405 int ido2db_cleanup_socket(void); 00406 void ido2db_parent_sighandler(int); 00407 void ido2db_child_sighandler(int); 00408 00409 /* cleanup */ 00410 int ido2db_free_program_memory(void); 00411 int ido2db_free_input_memory(ido2db_idi *); 00412 int ido2db_free_connection_memory(ido2db_idi *); 00413 00414 /* client connection */ 00415 int ido2db_wait_for_connections(void); 00416 int ido2db_handle_client_connection(int); 00417 int ido2db_idi_init(ido2db_idi *); 00418 int ido2db_check_for_client_input(ido2db_idi *); 00419 int ido2db_handle_client_input(ido2db_idi *,char *); 00420 00421 /* data handling */ 00422 int ido2db_start_input_data(ido2db_idi *); 00423 int ido2db_end_input_data(ido2db_idi *); 00424 int ido2db_add_input_data_item(ido2db_idi *,int,char *); 00425 int ido2db_add_input_data_mbuf(ido2db_idi *,int,int,char *); 00426 00427 /* conversion */ 00428 int ido2db_convert_standard_data_elements(ido2db_idi *,int *,int *,int *,struct timeval *); 00429 int ido2db_convert_string_to_int(char *,int *); 00430 int ido2db_convert_string_to_float(char *,float *); 00431 int ido2db_convert_string_to_double(char *,double *); 00432 int ido2db_convert_string_to_long(char *,long *); 00433 int ido2db_convert_string_to_unsignedlong(char *,unsigned long *); 00434 int ido2db_convert_string_to_timeval(char *,struct timeval *); 00435 00436 /* logging */ 00437 int ido2db_log_debug_info(int , int , const char *, ...); 00438 00439 /* threads */ 00440 void *ido2db_thread_cleanup(void *); 00441 void *ido2db_thread_worker(void *); 00442 int ido2db_terminate_threads(void); 00443 int terminate_worker_thread(void); 00444 int terminate_cleanup_thread(void); 00445 00446 #endif