00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef _MACROS_H
00026 #define _MACROS_H
00027
00028 #include "config.h"
00029 #include "common.h"
00030 #include "objects.h"
00031
00032
00033
00034
00035
00036 #define MAX_COMMAND_ARGUMENTS 32
00037
00038
00039
00040
00041 #define MACRO_ENV_VAR_PREFIX "ICINGA_"
00042
00043 #define MAX_USER_MACROS 256
00044
00045 #define MACRO_X_COUNT 154
00046
00047 struct icinga_macros {
00048 char *x[MACRO_X_COUNT];
00049 char *argv[MAX_COMMAND_ARGUMENTS];
00050 char *contactaddress[MAX_CONTACT_ADDRESSES];
00051 char *ondemand;
00052 host *host_ptr;
00053 hostgroup *hostgroup_ptr;
00054 service *service_ptr;
00055 servicegroup *servicegroup_ptr;
00056 contact *contact_ptr;
00057 contactgroup *contactgroup_ptr;
00058 customvariablesmember *custom_host_vars;
00059 customvariablesmember *custom_service_vars;
00060 customvariablesmember *custom_contact_vars;
00061 };
00062 typedef struct icinga_macros icinga_macros;
00063
00064
00065 struct nagios_macros {
00066 char *x[MACRO_X_COUNT];
00067 char *argv[MAX_COMMAND_ARGUMENTS];
00068 char *contactaddress[MAX_CONTACT_ADDRESSES];
00069 char *ondemand;
00070 host *host_ptr;
00071 hostgroup *hostgroup_ptr;
00072 service *service_ptr;
00073 servicegroup *servicegroup_ptr;
00074 contact *contact_ptr;
00075 contactgroup *contactgroup_ptr;
00076 customvariablesmember *custom_host_vars;
00077 customvariablesmember *custom_service_vars;
00078 customvariablesmember *custom_contact_vars;
00079 };
00080 typedef struct nagios_macros nagios_macros;
00081
00082 #define MACRO_HOSTNAME 0
00083 #define MACRO_HOSTALIAS 1
00084 #define MACRO_HOSTADDRESS 2
00085 #define MACRO_SERVICEDESC 3
00086 #define MACRO_SERVICESTATE 4
00087 #define MACRO_SERVICESTATEID 5
00088 #define MACRO_SERVICEATTEMPT 6
00089 #define MACRO_LONGDATETIME 7
00090 #define MACRO_SHORTDATETIME 8
00091 #define MACRO_DATE 9
00092 #define MACRO_TIME 10
00093 #define MACRO_TIMET 11
00094 #define MACRO_LASTHOSTCHECK 12
00095 #define MACRO_LASTSERVICECHECK 13
00096 #define MACRO_LASTHOSTSTATECHANGE 14
00097 #define MACRO_LASTSERVICESTATECHANGE 15
00098 #define MACRO_HOSTOUTPUT 16
00099 #define MACRO_SERVICEOUTPUT 17
00100 #define MACRO_HOSTPERFDATA 18
00101 #define MACRO_SERVICEPERFDATA 19
00102 #define MACRO_CONTACTNAME 20
00103 #define MACRO_CONTACTALIAS 21
00104 #define MACRO_CONTACTEMAIL 22
00105 #define MACRO_CONTACTPAGER 23
00106 #define MACRO_ADMINEMAIL 24
00107 #define MACRO_ADMINPAGER 25
00108 #define MACRO_HOSTSTATE 26
00109 #define MACRO_HOSTSTATEID 27
00110 #define MACRO_HOSTATTEMPT 28
00111 #define MACRO_NOTIFICATIONTYPE 29
00112 #define MACRO_NOTIFICATIONNUMBER 30
00113 #define MACRO_HOSTEXECUTIONTIME 31
00114 #define MACRO_SERVICEEXECUTIONTIME 32
00115 #define MACRO_HOSTLATENCY 33
00116 #define MACRO_SERVICELATENCY 34
00117 #define MACRO_HOSTDURATION 35
00118 #define MACRO_SERVICEDURATION 36
00119 #define MACRO_HOSTDURATIONSEC 37
00120 #define MACRO_SERVICEDURATIONSEC 38
00121 #define MACRO_HOSTDOWNTIME 39
00122 #define MACRO_SERVICEDOWNTIME 40
00123 #define MACRO_HOSTSTATETYPE 41
00124 #define MACRO_SERVICESTATETYPE 42
00125 #define MACRO_HOSTPERCENTCHANGE 43
00126 #define MACRO_SERVICEPERCENTCHANGE 44
00127 #define MACRO_HOSTGROUPNAME 45
00128 #define MACRO_HOSTGROUPALIAS 46
00129 #define MACRO_SERVICEGROUPNAME 47
00130 #define MACRO_SERVICEGROUPALIAS 48
00131 #define MACRO_HOSTACKAUTHOR 49
00132 #define MACRO_HOSTACKCOMMENT 50
00133 #define MACRO_SERVICEACKAUTHOR 51
00134 #define MACRO_SERVICEACKCOMMENT 52
00135 #define MACRO_LASTSERVICEOK 53
00136 #define MACRO_LASTSERVICEWARNING 54
00137 #define MACRO_LASTSERVICEUNKNOWN 55
00138 #define MACRO_LASTSERVICECRITICAL 56
00139 #define MACRO_LASTHOSTUP 57
00140 #define MACRO_LASTHOSTDOWN 58
00141 #define MACRO_LASTHOSTUNREACHABLE 59
00142 #define MACRO_SERVICECHECKCOMMAND 60
00143 #define MACRO_HOSTCHECKCOMMAND 61
00144 #define MACRO_MAINCONFIGFILE 62
00145 #define MACRO_STATUSDATAFILE 63
00146 #define MACRO_HOSTDISPLAYNAME 64
00147 #define MACRO_SERVICEDISPLAYNAME 65
00148 #define MACRO_RETENTIONDATAFILE 66
00149 #define MACRO_OBJECTCACHEFILE 67
00150 #define MACRO_TEMPFILE 68
00151 #define MACRO_LOGFILE 69
00152 #define MACRO_RESOURCEFILE 70
00153 #define MACRO_COMMANDFILE 71
00154 #define MACRO_HOSTPERFDATAFILE 72
00155 #define MACRO_SERVICEPERFDATAFILE 73
00156 #define MACRO_HOSTACTIONURL 74
00157 #define MACRO_HOSTNOTESURL 75
00158 #define MACRO_HOSTNOTES 76
00159 #define MACRO_SERVICEACTIONURL 77
00160 #define MACRO_SERVICENOTESURL 78
00161 #define MACRO_SERVICENOTES 79
00162 #define MACRO_TOTALHOSTSUP 80
00163 #define MACRO_TOTALHOSTSDOWN 81
00164 #define MACRO_TOTALHOSTSUNREACHABLE 82
00165 #define MACRO_TOTALHOSTSDOWNUNHANDLED 83
00166 #define MACRO_TOTALHOSTSUNREACHABLEUNHANDLED 84
00167 #define MACRO_TOTALHOSTPROBLEMS 85
00168 #define MACRO_TOTALHOSTPROBLEMSUNHANDLED 86
00169 #define MACRO_TOTALSERVICESOK 87
00170 #define MACRO_TOTALSERVICESWARNING 88
00171 #define MACRO_TOTALSERVICESCRITICAL 89
00172 #define MACRO_TOTALSERVICESUNKNOWN 90
00173 #define MACRO_TOTALSERVICESWARNINGUNHANDLED 91
00174 #define MACRO_TOTALSERVICESCRITICALUNHANDLED 92
00175 #define MACRO_TOTALSERVICESUNKNOWNUNHANDLED 93
00176 #define MACRO_TOTALSERVICEPROBLEMS 94
00177 #define MACRO_TOTALSERVICEPROBLEMSUNHANDLED 95
00178 #define MACRO_PROCESSSTARTTIME 96
00179 #define MACRO_HOSTCHECKTYPE 97
00180 #define MACRO_SERVICECHECKTYPE 98
00181 #define MACRO_LONGHOSTOUTPUT 99
00182 #define MACRO_LONGSERVICEOUTPUT 100
00183 #define MACRO_TEMPPATH 101
00184 #define MACRO_HOSTNOTIFICATIONNUMBER 102
00185 #define MACRO_SERVICENOTIFICATIONNUMBER 103
00186 #define MACRO_HOSTNOTIFICATIONID 104
00187 #define MACRO_SERVICENOTIFICATIONID 105
00188 #define MACRO_HOSTEVENTID 106
00189 #define MACRO_LASTHOSTEVENTID 107
00190 #define MACRO_SERVICEEVENTID 108
00191 #define MACRO_LASTSERVICEEVENTID 109
00192 #define MACRO_HOSTGROUPNAMES 110
00193 #define MACRO_SERVICEGROUPNAMES 111
00194 #define MACRO_HOSTACKAUTHORNAME 112
00195 #define MACRO_HOSTACKAUTHORALIAS 113
00196 #define MACRO_SERVICEACKAUTHORNAME 114
00197 #define MACRO_SERVICEACKAUTHORALIAS 115
00198 #define MACRO_MAXHOSTATTEMPTS 116
00199 #define MACRO_MAXSERVICEATTEMPTS 117
00200 #define MACRO_SERVICEISVOLATILE 118
00201 #define MACRO_TOTALHOSTSERVICES 119
00202 #define MACRO_TOTALHOSTSERVICESOK 120
00203 #define MACRO_TOTALHOSTSERVICESWARNING 121
00204 #define MACRO_TOTALHOSTSERVICESUNKNOWN 122
00205 #define MACRO_TOTALHOSTSERVICESCRITICAL 123
00206 #define MACRO_HOSTGROUPNOTES 124
00207 #define MACRO_HOSTGROUPNOTESURL 125
00208 #define MACRO_HOSTGROUPACTIONURL 126
00209 #define MACRO_SERVICEGROUPNOTES 127
00210 #define MACRO_SERVICEGROUPNOTESURL 128
00211 #define MACRO_SERVICEGROUPACTIONURL 129
00212 #define MACRO_HOSTGROUPMEMBERS 130
00213 #define MACRO_SERVICEGROUPMEMBERS 131
00214 #define MACRO_CONTACTGROUPNAME 132
00215 #define MACRO_CONTACTGROUPALIAS 133
00216 #define MACRO_CONTACTGROUPMEMBERS 134
00217 #define MACRO_CONTACTGROUPNAMES 135
00218 #define MACRO_NOTIFICATIONRECIPIENTS 136
00219 #define MACRO_NOTIFICATIONISESCALATED 137
00220 #define MACRO_NOTIFICATIONAUTHOR 138
00221 #define MACRO_NOTIFICATIONAUTHORNAME 139
00222 #define MACRO_NOTIFICATIONAUTHORALIAS 140
00223 #define MACRO_NOTIFICATIONCOMMENT 141
00224 #define MACRO_EVENTSTARTTIME 142
00225 #define MACRO_HOSTPROBLEMID 143
00226 #define MACRO_LASTHOSTPROBLEMID 144
00227 #define MACRO_SERVICEPROBLEMID 145
00228 #define MACRO_LASTSERVICEPROBLEMID 146
00229 #define MACRO_ISVALIDTIME 147
00230 #define MACRO_NEXTVALIDTIME 148
00231 #define MACRO_LASTHOSTSTATE 149
00232 #define MACRO_LASTHOSTSTATEID 150
00233 #define MACRO_LASTSERVICESTATE 151
00234 #define MACRO_LASTSERVICESTATEID 152
00235 #define MACRO_HOSTADDRESS6 153
00236
00237
00238
00239
00240 #define STRIP_ILLEGAL_MACRO_CHARS 1
00241 #define ESCAPE_MACRO_CHARS 2
00242 #define URL_ENCODE_MACRO_CHARS 4
00243
00244
00245
00246
00247
00248 icinga_macros *get_global_macros(void);
00249
00250
00251
00252
00253
00254
00255 int process_macros(char *, char **, int);
00256
00257
00258 int process_macros_r(icinga_macros *mac, char *,char **,int);
00259
00260
00261 char *clean_macro_chars(char *,int);
00262
00263
00264
00265
00266
00267
00268 int grab_service_macros(service *);
00269 int grab_host_macros(host *);
00270 int grab_servicegroup_macros(servicegroup *);
00271 int grab_hostgroup_macros(hostgroup *);
00272 int grab_contact_macros(contact *);
00273 int grab_contactgroup_macros(contactgroup *);
00274
00275 int grab_macro_value(char *,char **,int *,int *);
00276 int grab_macrox_value(int,char *,char *,char **,int *);
00277 int grab_custom_macro_value(char *,char *,char *,char **);
00278 int grab_datetime_macro(int,char *,char *,char **);
00279 int grab_standard_host_macro(int,host *,char **,int *);
00280 int grab_standard_hostgroup_macro(int,hostgroup *,char **);
00281 int grab_standard_service_macro(int,service *,char **,int *);
00282 int grab_standard_servicegroup_macro(int,servicegroup *,char **);
00283 int grab_standard_contact_macro(int,contact *,char **);
00284 int grab_contact_address_macro(int,contact *,char **);
00285 int grab_standard_contactgroup_macro(int,contactgroup *,char **);
00286 int grab_custom_object_macro(char *,customvariablesmember *,char **);
00287
00288
00289
00290 int grab_service_macros_r(icinga_macros *mac, service *);
00291 int grab_host_macros_r(icinga_macros *mac, host *);
00292 int grab_servicegroup_macros_r(icinga_macros *mac, servicegroup *);
00293 int grab_hostgroup_macros_r(icinga_macros *mac, hostgroup *);
00294 int grab_contact_macros_r(icinga_macros *mac, contact *);
00295 int grab_contactgroup_macros_r(icinga_macros *mac, contactgroup *);
00296
00297 int grab_macro_value_r(icinga_macros *mac, char *,char **,int *,int *);
00298 int grab_macrox_value_r(icinga_macros *mac, int,char *,char *,char **,int *);
00299 int grab_custom_macro_value_r(icinga_macros *mac, char *,char *,char *,char **);
00300 int grab_datetime_macro_r(icinga_macros *mac, int,char *,char *,char **);
00301 int grab_standard_host_macro_r(icinga_macros *mac, int,host *,char **,int *);
00302 int grab_standard_hostgroup_macro_r(icinga_macros *mac, int,hostgroup *,char **);
00303 int grab_standard_service_macro_r(icinga_macros *mac, int,service *,char **,int *);
00304 int grab_standard_servicegroup_macro_r(icinga_macros *mac, int,servicegroup *,char **);
00305 int grab_standard_contact_macro_r(icinga_macros *mac, int,contact *,char **);
00306 int grab_contact_address_macro_r(icinga_macros *mac, int,contact *,char **);
00307 int grab_standard_contactgroup_macro_r(icinga_macros *mac, int,contactgroup *,char **);
00308 int grab_custom_object_macro_r(icinga_macros *mac, char *,customvariablesmember *,char **);
00309
00310
00311 char *get_url_encoded_string(char *);
00312
00313 int init_macros(void);
00314 int init_macrox_names(void);
00315 int free_macrox_names(void);
00316
00317
00318 extern void copy_constant_macros(char **dest);
00319
00320
00321 int clear_argv_macros(void);
00322 int clear_volatile_macros(void);
00323 int clear_host_macros(void);
00324 int clear_service_macros(void);
00325 int clear_hostgroup_macros(void);
00326 int clear_servicegroup_macros(void);
00327 int clear_contact_macros(void);
00328 int clear_contactgroup_macros(void);
00329 int clear_summary_macros(void);
00330
00331
00332 int clear_argv_macros_r(icinga_macros *mac);
00333 int clear_volatile_macros_r(icinga_macros *mac);
00334 int clear_host_macros_r(icinga_macros *mac);
00335 int clear_service_macros_r(icinga_macros *mac);
00336 int clear_hostgroup_macros_r(icinga_macros *mac);
00337 int clear_servicegroup_macros_r(icinga_macros *mac);
00338 int clear_contact_macros_r(icinga_macros *mac);
00339 int clear_contactgroup_macros_r(icinga_macros *mac);
00340 int clear_summary_macros_r(icinga_macros *mac);
00341
00342 #ifdef NSCORE
00343 int set_all_macro_environment_vars(int);
00344 int set_macrox_environment_vars(int);
00345 int set_argv_macro_environment_vars(int);
00346 int set_custom_macro_environment_vars(int);
00347 int set_contact_address_environment_vars(int);
00348
00349 int set_all_macro_environment_vars_r(icinga_macros *mac, int);
00350 int set_macrox_environment_vars_r(icinga_macros *mac, int);
00351 int set_argv_macro_environment_vars_r(icinga_macros *mac, int);
00352 int set_custom_macro_environment_vars_r(icinga_macros *mac, int);
00353 int set_contact_address_environment_vars_r(icinga_macros *mac, int);
00354
00355 int set_macro_environment_var(char *,char *,int);
00356 #endif
00357
00358 #endif