/*****************************************************************************
 *
 * BROKER.H - Event broker includes for Nagios
 *
 *
 * License:
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 *
 * 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 NAGIOS_BROKER_H_INCLUDED
#define NAGIOS_BROKER_H_INCLUDED

#include "nagios.h"

/*************** EVENT BROKER OPTIONS *****************/

#define BROKER_NOTHING                  0
#define BROKER_EVERYTHING	 	1048575

#define BROKER_PROGRAM_STATE            1	/* DONE */
#define BROKER_TIMED_EVENTS             2	/* DONE */
#define BROKER_SERVICE_CHECKS           4	/* DONE */
#define BROKER_HOST_CHECKS              8	/* DONE */
#define BROKER_EVENT_HANDLERS   	16	/* DONE */
#define BROKER_LOGGED_DATA              32	/* DONE */
#define BROKER_NOTIFICATIONS    	64      /* DONE */
#define BROKER_FLAPPING_DATA   	        128	/* DONE */
#define BROKER_COMMENT_DATA         	256	/* DONE */
#define BROKER_DOWNTIME_DATA		512     /* DONE */
#define BROKER_SYSTEM_COMMANDS          1024	/* DONE */
#define BROKER_OCP_DATA_UNUSED          2048	/* reusable */
#define BROKER_STATUS_DATA              4096    /* DONE */
#define BROKER_ADAPTIVE_DATA            8192    /* DONE */
#define BROKER_EXTERNALCOMMAND_DATA     16384   /* DONE */
#define BROKER_RETENTION_DATA           32768   /* DONE */
#define BROKER_ACKNOWLEDGEMENT_DATA     65536
#define BROKER_STATECHANGE_DATA         131072
#define BROKER_RESERVED18               262144
#define BROKER_RESERVED19               524288


/****** EVENT TYPES ************************/

#define NEBTYPE_NONE                          0

#define NEBTYPE_HELLO                            1
#define NEBTYPE_GOODBYE                          2
#define NEBTYPE_INFO                             3

#define NEBTYPE_PROCESS_START                    100
#define NEBTYPE_PROCESS_DAEMONIZE                101
#define NEBTYPE_PROCESS_RESTART                  102
#define NEBTYPE_PROCESS_SHUTDOWN                 103
#define NEBTYPE_PROCESS_PRELAUNCH                104   /* before objects are read or verified */
#define NEBTYPE_PROCESS_EVENTLOOPSTART           105
#define NEBTYPE_PROCESS_EVENTLOOPEND             106

#define NEBTYPE_TIMEDEVENT_ADD                   200
#define NEBTYPE_TIMEDEVENT_REMOVE                201
#define NEBTYPE_TIMEDEVENT_EXECUTE               202
#define NEBTYPE_TIMEDEVENT_DELAY                 203   /* NOT IMPLEMENTED */
#define NEBTYPE_TIMEDEVENT_SKIP                  204   /* NOT IMPLEMENTED */
#define NEBTYPE_TIMEDEVENT_SLEEP                 205
#define NEBTYPE_TIMEDEVENT_END                   206

#define NEBTYPE_LOG_DATA                         300
#define NEBTYPE_LOG_ROTATION                     301

#define NEBTYPE_SYSTEM_COMMAND_START             400
#define NEBTYPE_SYSTEM_COMMAND_END               401

#define NEBTYPE_EVENTHANDLER_START               500
#define NEBTYPE_EVENTHANDLER_END                 501

#define NEBTYPE_NOTIFICATION_START               600
#define NEBTYPE_NOTIFICATION_END                 601
#define NEBTYPE_CONTACTNOTIFICATION_START        602
#define NEBTYPE_CONTACTNOTIFICATION_END          603
#define NEBTYPE_CONTACTNOTIFICATIONMETHOD_START  604
#define NEBTYPE_CONTACTNOTIFICATIONMETHOD_END    605

#define NEBTYPE_SERVICECHECK_INITIATE            700
#define NEBTYPE_SERVICECHECK_PROCESSED           701
#define NEBTYPE_SERVICECHECK_RAW_START           702   /* NOT IMPLEMENTED */
#define NEBTYPE_SERVICECHECK_RAW_END             703   /* NOT IMPLEMENTED */
#define NEBTYPE_SERVICECHECK_ASYNC_PRECHECK      704

#define NEBTYPE_HOSTCHECK_INITIATE               800   /* a check of the route to the host has been initiated */
#define NEBTYPE_HOSTCHECK_PROCESSED              801   /* the processed/final result of a host check */
#define NEBTYPE_HOSTCHECK_RAW_START              802   /* the start of a "raw" host check */
#define NEBTYPE_HOSTCHECK_RAW_END                803   /* a finished "raw" host check */
#define NEBTYPE_HOSTCHECK_ASYNC_PRECHECK         804
#define NEBTYPE_HOSTCHECK_SYNC_PRECHECK          805

#define NEBTYPE_COMMENT_ADD                      900
#define NEBTYPE_COMMENT_DELETE                   901
#define NEBTYPE_COMMENT_LOAD                     902

#define NEBTYPE_FLAPPING_START                   1000
#define NEBTYPE_FLAPPING_STOP                    1001

#define NEBTYPE_DOWNTIME_ADD                     1100
#define NEBTYPE_DOWNTIME_DELETE                  1101
#define NEBTYPE_DOWNTIME_LOAD                    1102
#define NEBTYPE_DOWNTIME_START                   1103
#define NEBTYPE_DOWNTIME_STOP                    1104

#define NEBTYPE_PROGRAMSTATUS_UPDATE             1200
#define NEBTYPE_HOSTSTATUS_UPDATE                1201
#define NEBTYPE_SERVICESTATUS_UPDATE             1202
#define NEBTYPE_CONTACTSTATUS_UPDATE             1203

#define NEBTYPE_ADAPTIVEPROGRAM_UPDATE           1300
#define NEBTYPE_ADAPTIVEHOST_UPDATE              1301
#define NEBTYPE_ADAPTIVESERVICE_UPDATE           1302
#define NEBTYPE_ADAPTIVECONTACT_UPDATE           1303

#define NEBTYPE_EXTERNALCOMMAND_START            1400
#define NEBTYPE_EXTERNALCOMMAND_END              1401

#define NEBTYPE_AGGREGATEDSTATUS_STARTDUMP       1500
#define NEBTYPE_AGGREGATEDSTATUS_ENDDUMP         1501

#define NEBTYPE_RETENTIONDATA_STARTLOAD          1600
#define NEBTYPE_RETENTIONDATA_ENDLOAD            1601
#define NEBTYPE_RETENTIONDATA_STARTSAVE          1602
#define NEBTYPE_RETENTIONDATA_ENDSAVE            1603

#define NEBTYPE_ACKNOWLEDGEMENT_ADD              1700
#define NEBTYPE_ACKNOWLEDGEMENT_REMOVE           1701   /* NOT IMPLEMENTED */
#define NEBTYPE_ACKNOWLEDGEMENT_LOAD             1702   /* NOT IMPLEMENTED */

#define NEBTYPE_STATECHANGE_START                1800   /* NOT IMPLEMENTED */
#define NEBTYPE_STATECHANGE_END                  1801



/****** EVENT FLAGS ************************/

#define NEBFLAG_NONE                          0
#define NEBFLAG_PROCESS_INITIATED             1         /* event was initiated by Nagios process */
#define NEBFLAG_USER_INITIATED                2         /* event was initiated by a user request */
#define NEBFLAG_MODULE_INITIATED              3         /* event was initiated by an event broker module */




/****** EVENT ATTRIBUTES *******************/

#define NEBATTR_NONE                          0

#define NEBATTR_SHUTDOWN_NORMAL               1
#define NEBATTR_SHUTDOWN_ABNORMAL             2
#define NEBATTR_RESTART_NORMAL                4
#define NEBATTR_RESTART_ABNORMAL              8

#define NEBATTR_FLAPPING_STOP_NORMAL          1
#define NEBATTR_FLAPPING_STOP_DISABLED        2         /* flapping stopped because flap detection was disabled */

#define NEBATTR_DOWNTIME_STOP_NORMAL          1
#define NEBATTR_DOWNTIME_STOP_CANCELLED       2



/****** EVENT BROKER FUNCTIONS *************/

#ifdef USE_EVENT_BROKER
NAGIOS_BEGIN_DECL

struct timeval get_broker_timestamp(struct timeval *);
void broker_program_state(int, int, int, struct timeval *);
void broker_timed_event(int, int, int, timed_event *, struct timeval *);
void broker_log_data(int, int, int, char *, unsigned long, time_t, struct timeval *);
int broker_event_handler(int, int, int, int, void *, int, int, struct timeval, struct timeval, double, int, int, int, char *, char *, char *, struct timeval *);
void broker_system_command(int, int, int, struct timeval, struct timeval, double, int, int, int, char *, char *, struct timeval *);
int broker_host_check(int, int, int, host *, int, int, int, struct timeval, struct timeval, char *, double, double, int, int, int, char *, char *, char *, char *, struct timeval *, check_result *);
int broker_service_check(int, int, int, service *, int, struct timeval, struct timeval, char *, double, double, int, int, int, char *, struct timeval *, check_result *);
void broker_comment_data(int, int, int, int, int, char *, char *, time_t, char *, char *, int, int, int, time_t, unsigned long, struct timeval *);
void broker_downtime_data(int, int, int, int, char *, char *, time_t, char *, char *, time_t, time_t, int, unsigned long, unsigned long, unsigned long, struct timeval *);
void broker_flapping_data(int, int, int, int, void *, double, double, double, struct timeval *);
void broker_program_status(int, int, int, struct timeval *);
void broker_host_status(int, int, int, host *, struct timeval *);
void broker_service_status(int, int, int, service *, struct timeval *);
void broker_contact_status(int, int, int, contact *, struct timeval *);
int broker_notification_data(int, int, int, int, int, struct timeval, struct timeval, void *, char *, char *, int, int, struct timeval *);
int broker_contact_notification_data(int, int, int, int, int, struct timeval, struct timeval, void *, contact *, char *, char *, int, struct timeval *);
int broker_contact_notification_method_data(int, int, int, int, int, struct timeval, struct timeval, void *, contact *, char *, char *, char *, int, struct timeval *);
void broker_adaptive_program_data(int, int, int, int, unsigned long, unsigned long, unsigned long, unsigned long, struct timeval *);
void broker_adaptive_host_data(int, int, int, host *, int, unsigned long, unsigned long, struct timeval *);
void broker_adaptive_service_data(int, int, int, service *, int, unsigned long, unsigned long, struct timeval *);
void broker_adaptive_contact_data(int, int, int, contact *, int, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, struct timeval *);
void broker_external_command(int, int, int, int, time_t, char *, char *, struct timeval *);
void broker_aggregated_status_data(int, int, int, struct timeval *);
void broker_retention_data(int, int, int, struct timeval *);
void broker_acknowledgement_data(int, int, int, int, void *, char *, char *, int, int, int, struct timeval *);
void broker_statechange_data(int, int, int, int, void *, int, int, int, int, struct timeval *);

NAGIOS_END_DECL
#endif

#endif
