![]() |
Icinga-core 1.4.0
next gen monitoring
|
00001 /*********************************************************************** 00002 * 00003 * CONFIG.C - Icinga Configuration CGI (View Only) 00004 * 00005 * Copyright (c) 1999-2009 Ethan Galstad (egalstad@nagios.org) 00006 * Copyright (c) 2009-2011 Icinga Development Team (http://www.icinga.org) 00007 * 00008 * This CGI program will display various configuration information. 00009 * 00010 * 00011 * This program is free software; you can redistribute it and/or modify 00012 * it under the terms of the GNU General Public License version 2 as 00013 * published by the Free Software Foundation. 00014 * 00015 * This program is distributed in the hope that it will be useful, 00016 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00017 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00018 * GNU General Public License for more details. 00019 * 00020 * You should have received a copy of the GNU General Public License 00021 * along with this program; if not, write to the Free Software 00022 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 00023 ***********************************************************************/ 00024 00025 #include "../include/config.h" 00026 #include "../include/common.h" 00027 #include "../include/objects.h" 00028 #include "../include/macros.h" 00029 #include "../include/cgiutils.h" 00030 #include "../include/cgiauth.h" 00031 #include "../include/getcgi.h" 00032 00033 static icinga_macros *mac; 00034 00035 extern char main_config_file[MAX_FILENAME_LENGTH]; 00036 extern char url_html_path[MAX_FILENAME_LENGTH]; 00037 extern char url_docs_path[MAX_FILENAME_LENGTH]; 00038 extern char url_images_path[MAX_FILENAME_LENGTH]; 00039 extern char url_logo_images_path[MAX_FILENAME_LENGTH]; 00040 extern char url_stylesheets_path[MAX_FILENAME_LENGTH]; 00041 extern char url_js_path[MAX_FILENAME_LENGTH]; 00042 00043 extern host *host_list; 00044 extern service *service_list; 00045 extern hostgroup *hostgroup_list; 00046 extern servicegroup *servicegroup_list; 00047 extern contactgroup *contactgroup_list; 00048 extern command *command_list; 00049 extern timeperiod *timeperiod_list; 00050 extern contact *contact_list; 00051 extern servicedependency *servicedependency_list; 00052 extern serviceescalation *serviceescalation_list; 00053 extern hostdependency *hostdependency_list; 00054 extern hostescalation *hostescalation_list; 00055 extern module *module_list; 00056 00057 extern int display_header; 00058 extern int content_type; 00059 00060 extern char *csv_delimiter; 00061 extern char *csv_data_enclosure; 00062 00063 int process_cgivars(void); 00064 00065 void display_options(void); 00066 00067 void display_hosts(void); 00068 void display_hostgroups(void); 00069 void display_servicegroups(void); 00070 void display_contacts(void); 00071 void display_contactgroups(void); 00072 void display_services(void); 00073 void display_timeperiods(void); 00074 void display_commands(void); 00075 void display_servicedependencies(void); 00076 void display_serviceescalations(void); 00077 void display_hostdependencies(void); 00078 void display_hostescalations(void); 00079 void display_command_expansion(void); 00080 void display_modules(void); 00081 00082 void print_export_link(void); 00083 00084 authdata current_authdata; 00085 00086 int display_type=DISPLAY_NONE; 00087 int show_all_hosts=TRUE; 00088 int show_all_hostgroups=TRUE; 00089 int show_all_servicegroups=TRUE; 00090 char *host_name=NULL; 00091 char *host_filter=NULL; 00092 char *hostgroup_name=NULL; 00093 char *servicegroup_name=NULL; 00094 char *service_desc=NULL; 00095 char *service_filter=NULL; 00096 char to_expand[MAX_COMMAND_BUFFER]; 00097 char hashed_color[8]; 00098 00099 extern int embedded; 00100 extern int daemon_check; 00101 00102 int CGI_ID=CONFIG_CGI_ID; 00103 00104 void print_expand_input(int type){ 00105 char *seldesc=""; 00106 00107 if (type==DISPLAY_COMMAND_EXPANSION) return; /* Has its own form, w/ larger <input> */ 00108 else if (type==DISPLAY_SERVICES){ seldesc=" Services Named or on Host"; } 00109 else if (type==DISPLAY_SERVICEDEPENDENCIES){ seldesc=" Dependencies with Host"; } 00110 else if (type==DISPLAY_SERVICEESCALATIONS){ seldesc=" Escalations on Host"; } 00111 else if (type==DISPLAY_HOSTDEPENDENCIES){ seldesc=" Dependencies on/of Host"; } 00112 else if (type==DISPLAY_HOSTESCALATIONS){ seldesc=" Escalations for Host"; } 00113 printf("<tr><td align=left class='reportSelectSubTitle'>Show Only%s:</td></tr>\n",seldesc); 00114 printf("<tr><td align=left class='reportSelectItem'><input type='text' name='expand'\n"); 00115 printf("value='%s'>",html_encode(to_expand,FALSE)); 00116 } 00117 00118 int main(void){ 00119 int result=OK; 00120 mac = get_global_macros(); 00121 00122 /* get the arguments passed in the URL */ 00123 process_cgivars(); 00124 00125 /* reset internal variables */ 00126 reset_cgi_vars(); 00127 00128 /* read the CGI configuration file */ 00129 result=read_cgi_config_file(get_cgi_config_location()); 00130 if(result==ERROR){ 00131 document_header(CGI_ID,FALSE); 00132 print_error(get_cgi_config_location(), ERROR_CGI_CFG_FILE); 00133 document_footer(CGI_ID); 00134 return ERROR; 00135 } 00136 00137 /* read the main configuration file */ 00138 result=read_main_config_file(main_config_file); 00139 if(result==ERROR){ 00140 document_header(CGI_ID,FALSE); 00141 print_error(main_config_file, ERROR_CGI_MAIN_CFG); 00142 document_footer(CGI_ID); 00143 return ERROR; 00144 } 00145 00146 /* read all object configuration data */ 00147 result=read_all_object_configuration_data(main_config_file,READ_ALL_OBJECT_DATA); 00148 if(result==ERROR){ 00149 document_header(CGI_ID,FALSE); 00150 print_error(NULL, ERROR_CGI_OBJECT_DATA); 00151 document_footer(CGI_ID); 00152 return ERROR; 00153 } 00154 00155 /* initialize macros */ 00156 init_macros(); 00157 00158 document_header(CGI_ID,TRUE); 00159 00160 /* get authentication information */ 00161 get_authentication_information(¤t_authdata); 00162 00163 /* see if user is authorized to view contact information... */ 00164 if(is_authorized_for_configuration_information(¤t_authdata)==FALSE){ 00165 print_generic_error_message("It appears as though you do not have permission to view the configuration information you requested...","If you believe this is an error, check the HTTP server authentication requirements for accessing this CGI and check the authorization options in your CGI configuration file.",0); 00166 document_footer(CGI_ID); 00167 return OK; 00168 } 00169 00170 if(content_type!=CSV_CONTENT && content_type!=JSON_CONTENT){ 00171 /* begin top table */ 00172 printf("<table border=0 width=100%%>\n"); 00173 printf("<tr>\n"); 00174 00175 /* left column of the first row */ 00176 printf("<td align=left valign=top width=50%%>\n"); 00177 display_info_table("Configuration",FALSE,¤t_authdata, daemon_check); 00178 printf("</td>\n"); 00179 00180 /* right hand column of top row */ 00181 printf("<td align=right valign=bottom width=50%%>\n"); 00182 00183 if(display_type!=DISPLAY_NONE){ 00184 00185 printf("<table border=0>\n"); 00186 printf("<form method=\"get\" action=\"%s\">\n",CONFIG_CGI); 00187 00188 printf("<tr><td align=left class='reportSelectSubTitle'>Object Type:</td></tr>\n"); 00189 printf("<tr><td align=left class='reportSelectItem'>"); 00190 printf("<select name='type'>\n"); 00191 printf("<option value='hosts' %s>Hosts\n",(display_type==DISPLAY_HOSTS)?"SELECTED":""); 00192 printf("<option value='hostdependencies' %s>Host Dependencies\n",(display_type==DISPLAY_HOSTDEPENDENCIES)?"SELECTED":""); 00193 printf("<option value='hostescalations' %s>Host Escalations\n",(display_type==DISPLAY_HOSTESCALATIONS)?"SELECTED":""); 00194 printf("<option value='hostgroups' %s>Host Groups\n",(display_type==DISPLAY_HOSTGROUPS)?"SELECTED":""); 00195 printf("<option value='services' %s>Services\n",(display_type==DISPLAY_SERVICES)?"SELECTED":""); 00196 printf("<option value='servicegroups' %s>Service Groups\n",(display_type==DISPLAY_SERVICEGROUPS)?"SELECTED":""); 00197 printf("<option value='servicedependencies' %s>Service Dependencies\n",(display_type==DISPLAY_SERVICEDEPENDENCIES)?"SELECTED":""); 00198 printf("<option value='serviceescalations' %s>Service Escalations\n",(display_type==DISPLAY_SERVICEESCALATIONS)?"SELECTED":""); 00199 printf("<option value='contacts' %s>Contacts\n",(display_type==DISPLAY_CONTACTS)?"SELECTED":""); 00200 printf("<option value='contactgroups' %s>Contact Groups\n",(display_type==DISPLAY_CONTACTGROUPS)?"SELECTED":""); 00201 printf("<option value='timeperiods' %s>Timeperiods\n",(display_type==DISPLAY_TIMEPERIODS)?"SELECTED":""); 00202 printf("<option value='modules' %s>Modules\n",(display_type==DISPLAY_MODULES)?"SELECTED":""); 00203 printf("<option value='commands' %s>Commands\n",(display_type==DISPLAY_COMMANDS)?"SELECTED":""); 00204 printf("<option value='command' %s>Command Expansion\n",(display_type==DISPLAY_COMMAND_EXPANSION)?"SELECTED":""); 00205 printf("</select>\n"); 00206 printf("</td></tr>\n"); 00207 00208 print_expand_input(display_type); 00209 00210 printf("<tr><td class='reportSelectItem'><input type='submit' value='Update'></td></tr>\n"); 00211 printf("</form>\n"); 00212 printf("</table>\n"); 00213 } 00214 } 00215 00216 /* display context-sensitive help */ 00217 switch(display_type){ 00218 case DISPLAY_HOSTS: 00219 display_context_help(CONTEXTHELP_CONFIG_HOSTS); 00220 break; 00221 case DISPLAY_HOSTGROUPS: 00222 display_context_help(CONTEXTHELP_CONFIG_HOSTGROUPS); 00223 break; 00224 case DISPLAY_SERVICEGROUPS: 00225 display_context_help(CONTEXTHELP_CONFIG_SERVICEGROUPS); 00226 break; 00227 case DISPLAY_CONTACTS: 00228 display_context_help(CONTEXTHELP_CONFIG_CONTACTS); 00229 break; 00230 case DISPLAY_CONTACTGROUPS: 00231 display_context_help(CONTEXTHELP_CONFIG_CONTACTGROUPS); 00232 break; 00233 case DISPLAY_SERVICES: 00234 display_context_help(CONTEXTHELP_CONFIG_SERVICES); 00235 break; 00236 case DISPLAY_TIMEPERIODS: 00237 display_context_help(CONTEXTHELP_CONFIG_TIMEPERIODS); 00238 break; 00239 case DISPLAY_COMMANDS: 00240 display_context_help(CONTEXTHELP_CONFIG_COMMANDS); 00241 break; 00242 case DISPLAY_SERVICEDEPENDENCIES: 00243 display_context_help(CONTEXTHELP_CONFIG_SERVICEDEPENDENCIES); 00244 break; 00245 case DISPLAY_SERVICEESCALATIONS: 00246 display_context_help(CONTEXTHELP_CONFIG_HOSTESCALATIONS); 00247 break; 00248 case DISPLAY_HOSTDEPENDENCIES: 00249 display_context_help(CONTEXTHELP_CONFIG_HOSTDEPENDENCIES); 00250 break; 00251 case DISPLAY_HOSTESCALATIONS: 00252 display_context_help(CONTEXTHELP_CONFIG_HOSTESCALATIONS); 00253 break; 00254 case DISPLAY_COMMAND_EXPANSION: 00255 /* Reusing DISPLAY_COMMANDS help until further notice */ 00256 display_context_help(CONTEXTHELP_CONFIG_COMMANDS); 00257 break; 00258 case DISPLAY_MODULES: 00259 /* reuse commands context help */ 00260 display_context_help(CONTEXTHELP_CONFIG_COMMANDS); 00261 break; 00262 case DISPLAY_ALL: 00263 break; 00264 default: 00265 display_context_help(CONTEXTHELP_CONFIG_MENU); 00266 break; 00267 } 00268 00269 if(content_type!=CSV_CONTENT && content_type!=JSON_CONTENT){ 00270 printf("</td>\n"); 00271 00272 /* end of top table */ 00273 printf("</tr>\n"); 00274 printf("</table>\n"); 00275 } 00276 00277 00278 switch(display_type){ 00279 case DISPLAY_HOSTS: 00280 display_hosts(); 00281 break; 00282 case DISPLAY_HOSTGROUPS: 00283 display_hostgroups(); 00284 break; 00285 case DISPLAY_SERVICEGROUPS: 00286 display_servicegroups(); 00287 break; 00288 case DISPLAY_CONTACTS: 00289 display_contacts(); 00290 break; 00291 case DISPLAY_CONTACTGROUPS: 00292 display_contactgroups(); 00293 break; 00294 case DISPLAY_SERVICES: 00295 display_services(); 00296 break; 00297 case DISPLAY_TIMEPERIODS: 00298 display_timeperiods(); 00299 break; 00300 case DISPLAY_COMMANDS: 00301 display_commands(); 00302 break; 00303 case DISPLAY_SERVICEDEPENDENCIES: 00304 display_servicedependencies(); 00305 break; 00306 case DISPLAY_SERVICEESCALATIONS: 00307 display_serviceescalations(); 00308 break; 00309 case DISPLAY_HOSTDEPENDENCIES: 00310 display_hostdependencies(); 00311 break; 00312 case DISPLAY_HOSTESCALATIONS: 00313 display_hostescalations(); 00314 break; 00315 case DISPLAY_COMMAND_EXPANSION: 00316 display_command_expansion(); 00317 break; 00318 case DISPLAY_MODULES: 00319 display_modules(); 00320 break; 00321 case DISPLAY_ALL: 00322 if (content_type==JSON_CONTENT) { 00323 display_hosts(); 00324 printf(",\n"); 00325 display_hostgroups(); 00326 printf(",\n"); 00327 display_servicegroups(); 00328 printf(",\n"); 00329 display_contacts(); 00330 printf(",\n"); 00331 display_contactgroups(); 00332 printf(",\n"); 00333 display_services(); 00334 printf(",\n"); 00335 display_timeperiods(); 00336 printf(",\n"); 00337 display_commands(); 00338 printf(",\n"); 00339 display_servicedependencies(); 00340 printf(",\n"); 00341 display_serviceescalations(); 00342 printf(",\n"); 00343 display_hostdependencies(); 00344 printf(",\n"); 00345 display_hostescalations(); 00346 printf(",\n"); 00347 display_modules(); 00348 break; 00349 } 00350 default: 00351 display_options(); 00352 break; 00353 } 00354 00355 document_footer(CGI_ID); 00356 00357 return OK; 00358 } 00359 00360 int process_cgivars(void){ 00361 char **variables; 00362 int error=FALSE; 00363 int x; 00364 00365 variables=getcgivars(); 00366 to_expand[0]='\0'; 00367 00368 for(x=0;variables[x]!=NULL;x++){ 00369 00370 /* do some basic length checking on the variable identifier to prevent buffer overflows */ 00371 if(strlen(variables[x])>=MAX_INPUT_BUFFER-1){ 00372 x++; 00373 continue; 00374 } 00375 00376 /* we found the configuration type argument */ 00377 else if(!strcmp(variables[x],"type")){ 00378 x++; 00379 if(variables[x]==NULL){ 00380 error=TRUE; 00381 break; 00382 } 00383 00384 /* what information should we display? */ 00385 if(!strcmp(variables[x],"hosts")) 00386 display_type=DISPLAY_HOSTS; 00387 else if(!strcmp(variables[x],"hostgroups")) 00388 display_type=DISPLAY_HOSTGROUPS; 00389 else if(!strcmp(variables[x],"servicegroups")) 00390 display_type=DISPLAY_SERVICEGROUPS; 00391 else if(!strcmp(variables[x],"contacts")) 00392 display_type=DISPLAY_CONTACTS; 00393 else if(!strcmp(variables[x],"contactgroups")) 00394 display_type=DISPLAY_CONTACTGROUPS; 00395 else if(!strcmp(variables[x],"services")) 00396 display_type=DISPLAY_SERVICES; 00397 else if(!strcmp(variables[x],"timeperiods")) 00398 display_type=DISPLAY_TIMEPERIODS; 00399 else if(!strcmp(variables[x],"commands")) 00400 display_type=DISPLAY_COMMANDS; 00401 else if(!strcmp(variables[x],"servicedependencies")) 00402 display_type=DISPLAY_SERVICEDEPENDENCIES; 00403 else if(!strcmp(variables[x],"serviceescalations")) 00404 display_type=DISPLAY_SERVICEESCALATIONS; 00405 else if(!strcmp(variables[x],"hostdependencies")) 00406 display_type=DISPLAY_HOSTDEPENDENCIES; 00407 else if(!strcmp(variables[x],"hostescalations")) 00408 display_type=DISPLAY_HOSTESCALATIONS; 00409 else if(!strcmp(variables[x],"command")) 00410 display_type=DISPLAY_COMMAND_EXPANSION; 00411 else if(!strcmp(variables[x],"modules")) 00412 display_type=DISPLAY_MODULES; 00413 else if(!strcmp(variables[x],"all")) 00414 display_type=DISPLAY_ALL; 00415 00416 /* we found the embed option */ 00417 else if(!strcmp(variables[x],"embedded")) 00418 embedded=TRUE; 00419 00420 /* we found the nodaemoncheck option */ 00421 else if(!strcmp(variables[x],"nodaemoncheck")) 00422 daemon_check=FALSE; 00423 } 00424 00425 /* we found the string-to-expand argument */ 00426 else if(!strcmp(variables[x],"expand")){ 00427 x++; 00428 if(variables[x]==NULL){ 00429 error=TRUE; 00430 break; 00431 } 00432 strncpy(to_expand,variables[x],MAX_COMMAND_BUFFER); 00433 to_expand[MAX_COMMAND_BUFFER-1]='\0'; 00434 } 00435 00436 /* we found the CSV output option */ 00437 else if(!strcmp(variables[x],"csvoutput")){ 00438 display_header=FALSE; 00439 content_type=CSV_CONTENT; 00440 } 00441 00442 /* we found the JSON output option */ 00443 else if(!strcmp(variables[x],"jsonoutput")){ 00444 display_header=FALSE; 00445 content_type=JSON_CONTENT; 00446 } 00447 00448 /* we received an invalid argument */ 00449 else 00450 error=TRUE; 00451 00452 } 00453 00454 /* free memory allocated to the CGI variables */ 00455 free_cgivars(variables); 00456 00457 return error; 00458 } 00459 00460 void display_hosts(void){ 00461 host *temp_host=NULL; 00462 hostsmember *temp_hostsmember=NULL; 00463 contactsmember *temp_contactsmember=NULL; 00464 contactgroupsmember *temp_contactgroupsmember=NULL; 00465 char *processed_string=NULL; 00466 int options=0; 00467 int odd=0; 00468 char time_string[2][16]; 00469 char *bg_class=""; 00470 int contact=0; 00471 int json_start=TRUE; 00472 00473 if(content_type==JSON_CONTENT) { 00474 printf("\"hosts\": [\n"); 00475 }else if(content_type==CSV_CONTENT) { 00476 printf("%sHost Name%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00477 printf("%sAlias/Description%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00478 printf("%sAddress%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00479 printf("%sAddress6%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00480 printf("%sParent Hosts%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00481 printf("%sMax. Check Attempts%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00482 printf("%sCheck Interval%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00483 printf("%sRetry Interval%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00484 printf("%sHost Check Command%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00485 printf("%sCheck Period%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00486 printf("%sObsess Over%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00487 printf("%sEnable Active Checks%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00488 printf("%sEnable Passive Checks%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00489 printf("%sCheck Freshness%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00490 printf("%sFreshness Threshold%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00491 printf("%sDefault Contacts/Groups%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00492 printf("%sNotification Interval%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00493 printf("%sFirst Notification Delay%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00494 printf("%sNotification Options%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00495 printf("%sNotification Period%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00496 printf("%sEvent Handler%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00497 printf("%sEnable Event Handler%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00498 printf("%sStalking Options%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00499 printf("%sEnable Flap Detection%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00500 printf("%sLow Flap Threshold%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00501 printf("%sHigh Flap Threshold%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00502 printf("%sFlap Detection Options%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00503 printf("%sProcess Performance Data%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00504 printf("%sEnable Failure Prediction%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00505 printf("%sFailure Prediction Options%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00506 printf("%sNotes%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00507 printf("%sNotes URL%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00508 printf("%sAction URL%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00509 printf("%s2-D Coords%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00510 printf("%s3-D Coords%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00511 printf("%sStatusmap Image%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00512 printf("%sVRML Image%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00513 printf("%sLogo Image%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00514 printf("%sImage Alt%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00515 printf("%sRetention Options%s",csv_data_enclosure,csv_data_enclosure); 00516 printf("\n"); 00517 } else { 00518 printf("<P><DIV ALIGN=CENTER CLASS='dataTitle'>Host%s%s</DIV></P>\n", 00519 (*to_expand=='\0'?"s":" "),(*to_expand=='\0'?"":html_encode(to_expand,FALSE))); 00520 00521 printf("<P><DIV ALIGN=CENTER>\n"); 00522 printf("<TABLE BORDER=0 CLASS='data'>\n"); 00523 00524 print_export_link(); 00525 00526 printf("<TR>\n"); 00527 printf("<TH CLASS='data'>Host Name</TH>"); 00528 printf("<TH CLASS='data'>Alias/Description</TH>"); 00529 printf("<TH CLASS='data'>Address</TH>"); 00530 printf("<TH CLASS='data'>Address6</TH>"); 00531 printf("<TH CLASS='data'>Parent Hosts</TH>"); 00532 printf("<TH CLASS='data'>Max. Check Attempts</TH>"); 00533 printf("<TH CLASS='data'>Check Interval</TH>\n"); 00534 printf("<TH CLASS='data'>Retry Interval</TH>\n"); 00535 printf("<TH CLASS='data'>Host Check Command</TH>"); 00536 printf("<TH CLASS='data'>Check Period</TH>"); 00537 printf("<TH CLASS='data'>Obsess Over</TH>\n"); 00538 printf("<TH CLASS='data'>Enable Active Checks</TH>\n"); 00539 printf("<TH CLASS='data'>Enable Passive Checks</TH>\n"); 00540 printf("<TH CLASS='data'>Check Freshness</TH>\n"); 00541 printf("<TH CLASS='data'>Freshness Threshold</TH>\n"); 00542 printf("<TH CLASS='data'>Default Contacts/Groups</TH>\n"); 00543 printf("<TH CLASS='data'>Notification Interval</TH>"); 00544 printf("<TH CLASS='data'>First Notification Delay</TH>"); 00545 printf("<TH CLASS='data'>Notification Options</TH>"); 00546 printf("<TH CLASS='data'>Notification Period</TH>"); 00547 printf("<TH CLASS='data'>Event Handler</TH>"); 00548 printf("<TH CLASS='data'>Enable Event Handler</TH>"); 00549 printf("<TH CLASS='data'>Stalking Options</TH>\n"); 00550 printf("<TH CLASS='data'>Enable Flap Detection</TH>"); 00551 printf("<TH CLASS='data'>Low Flap Threshold</TH>"); 00552 printf("<TH CLASS='data'>High Flap Threshold</TH>"); 00553 printf("<TH CLASS='data'>Flap Detection Options</TH>\n"); 00554 printf("<TH CLASS='data'>Process Performance Data</TH>"); 00555 printf("<TH CLASS='data'>Enable Failure Prediction</TH>"); 00556 printf("<TH CLASS='data'>Failure Prediction Options</TH>"); 00557 printf("<TH CLASS='data'>Notes</TH>"); 00558 printf("<TH CLASS='data'>Notes URL</TH>"); 00559 printf("<TH CLASS='data'>Action URL</TH>"); 00560 printf("<TH CLASS='data'>2-D Coords</TH>"); 00561 printf("<TH CLASS='data'>3-D Coords</TH>"); 00562 printf("<TH CLASS='data'>Statusmap Image</TH>"); 00563 printf("<TH CLASS='data'>VRML Image</TH>"); 00564 printf("<TH CLASS='data'>Logo Image</TH>"); 00565 printf("<TH CLASS='data'>Image Alt</TH>"); 00566 printf("<TH CLASS='data'>Retention Options</TH>"); 00567 printf("</TR>\n"); 00568 } 00569 00570 /* check all the hosts... */ 00571 for(temp_host=host_list;temp_host!=NULL;temp_host=temp_host->next) if (((*to_expand)=='\0')||!strcmp(to_expand,temp_host->name)){ 00572 00573 /* grab macros */ 00574 grab_host_macros_r(mac, temp_host); 00575 00576 if(odd){ 00577 odd=0; 00578 bg_class="dataOdd"; 00579 }else{ 00580 odd=1; 00581 bg_class="dataEven"; 00582 } 00583 00584 /* print list in json format */ 00585 if(content_type==JSON_CONTENT) { 00586 // always add a comma, except for the first line 00587 if (json_start==FALSE) 00588 printf(",\n"); 00589 json_start=FALSE; 00590 printf("{ \"host_name\": \"%s\", ",json_encode(temp_host->name)); 00591 printf("\"alias\": \"%s\", ",json_encode(temp_host->alias)); 00592 printf("\"address\": \"%s\", ",temp_host->address); 00593 printf("\"address6\": \"%s\", ",temp_host->address6); 00594 printf("\"parent_hosts\": [ "); 00595 00596 /* print list in csv format */ 00597 }else if(content_type==CSV_CONTENT) { 00598 printf("%s%s%s%s",csv_data_enclosure,temp_host->name,csv_data_enclosure,csv_delimiter); 00599 printf("%s%s%s%s",csv_data_enclosure,temp_host->alias,csv_data_enclosure,csv_delimiter); 00600 printf("%s%s%s%s",csv_data_enclosure,temp_host->address,csv_data_enclosure,csv_delimiter); 00601 printf("%s%s%s%s",csv_data_enclosure,temp_host->address6,csv_data_enclosure,csv_delimiter); 00602 printf("%s",csv_data_enclosure); 00603 } else { 00604 printf("<TR CLASS='%s'>\n",bg_class); 00605 00606 /* find a solution to print display_name if once set in host definition */ 00607 /* printf("<TD CLASS='%s'><a name='%s'>%s</a></TD>\n",bg_class,url_encode(temp_host->name),(temp_host->display_name!=NULL)?temp_host->display_name:temp_host->name); */ 00608 printf("<TD CLASS='%s'><a name='%s'><a href='%s?type=services&expand=%s'>%s</a></a></TD>\n",bg_class, 00609 url_encode(temp_host->name),CONFIG_CGI,url_encode(temp_host->name),html_encode(temp_host->name,FALSE)); 00610 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,html_encode(temp_host->alias,FALSE)); 00611 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,html_encode(temp_host->address,FALSE)); 00612 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,html_encode(temp_host->address6,FALSE)); 00613 printf("<TD CLASS='%s'>",bg_class); 00614 } 00615 00616 for(temp_hostsmember=temp_host->parent_hosts;temp_hostsmember!=NULL;temp_hostsmember=temp_hostsmember->next){ 00617 00618 if(temp_hostsmember!=temp_host->parent_hosts) 00619 printf(", "); 00620 00621 if(content_type==JSON_CONTENT) 00622 printf("{ \"host_name\": \"%s\" } ",json_encode(temp_hostsmember->host_name)); 00623 else if(content_type==CSV_CONTENT) 00624 printf("%s",temp_hostsmember->host_name); 00625 else 00626 printf("<a href='%s?type=hosts&expand=%s'>%s</a>",CONFIG_CGI,url_encode(temp_hostsmember->host_name),html_encode(temp_hostsmember->host_name,FALSE)); 00627 } 00628 00629 if(temp_host->parent_hosts==NULL) 00630 printf("%s",(content_type==CSV_CONTENT || content_type==JSON_CONTENT)?"":" "); 00631 00632 get_interval_time_string(temp_host->check_interval,time_string[0],sizeof(time_string[0])); 00633 get_interval_time_string(temp_host->retry_interval,time_string[1],sizeof(time_string[1])); 00634 00635 if(content_type==JSON_CONTENT) { 00636 printf("], "); 00637 printf("\"max_check_attempts\": %d, ",temp_host->max_attempts); 00638 printf("\"check_interval\": \"%s\", ",time_string[0]); 00639 printf("\"retry_interval\": \"%s\", ",time_string[1]); 00640 00641 if (temp_host->host_check_command==NULL) 00642 printf("\"host_check_command\": null, "); 00643 else 00644 printf("\"host_check_command\": \"%s\", ",json_encode(temp_host->host_check_command)); 00645 00646 if (temp_host->check_period==NULL) 00647 printf("\"check_period\": null, "); 00648 else 00649 printf("\"check_period\": \"%s\", ",json_encode(temp_host->check_period)); 00650 00651 printf("\"obsess_over\": %s, ",(temp_host->obsess_over_host==TRUE)?"true":"false"); 00652 printf("\"enable_active_checks\": %s, ",(temp_host->checks_enabled==TRUE)?"true":"false"); 00653 printf("\"enable_passive_checks\": %s, ",(temp_host->accept_passive_host_checks==TRUE)?"true":"false"); 00654 printf("\"check_freshness\": %s, ",(temp_host->check_freshness==TRUE)?"true":"false"); 00655 if(temp_host->freshness_threshold==0) 00656 printf("\"freshness_threshold\": \"auto-determined value\", "); 00657 else 00658 printf("\"freshness_threshold\": %d, ",temp_host->freshness_threshold); 00659 00660 printf("\"default_contacts_default_groups\": [ "); 00661 }else if(content_type==CSV_CONTENT){ 00662 printf("%s%s",csv_data_enclosure,csv_delimiter); 00663 printf("%s%d%s%s",csv_data_enclosure,temp_host->max_attempts,csv_data_enclosure,csv_delimiter); 00664 printf("%s%s%s%s",csv_data_enclosure,time_string[0],csv_data_enclosure,csv_delimiter); 00665 printf("%s%s%s%s",csv_data_enclosure,time_string[1],csv_data_enclosure,csv_delimiter); 00666 printf("%s%s%s%s",csv_data_enclosure,(temp_host->host_check_command==NULL)?"":temp_host->host_check_command,csv_data_enclosure,csv_delimiter); 00667 printf("%s%s%s%s",csv_data_enclosure,(temp_host->check_period==NULL)?"":temp_host->check_period,csv_data_enclosure,csv_delimiter); 00668 printf("%s%s%s%s",csv_data_enclosure,(temp_host->obsess_over_host==TRUE)?"Yes":"No",csv_data_enclosure,csv_delimiter); 00669 printf("%s%s%s%s",csv_data_enclosure,(temp_host->checks_enabled==TRUE)?"Yes":"No",csv_data_enclosure,csv_delimiter); 00670 printf("%s%s%s%s",csv_data_enclosure,(temp_host->accept_passive_host_checks==TRUE)?"Yes":"No",csv_data_enclosure,csv_delimiter); 00671 printf("%s%s%s%s",csv_data_enclosure,(temp_host->check_freshness==TRUE)?"Yes":"No",csv_data_enclosure,csv_delimiter); 00672 printf("%s",csv_data_enclosure); 00673 if(temp_host->freshness_threshold==0) 00674 printf("Auto-determined value"); 00675 else 00676 printf("%d",temp_host->freshness_threshold); 00677 printf("%s%s",csv_data_enclosure,csv_delimiter); 00678 printf("%s",csv_data_enclosure); 00679 }else{ 00680 printf("</TD>\n"); 00681 00682 printf("<TD CLASS='%s'>%d</TD>\n",bg_class,temp_host->max_attempts); 00683 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,time_string[0]); 00684 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,time_string[1]); 00685 00686 printf("<TD CLASS='%s'>",bg_class); 00687 if(temp_host->host_check_command==NULL) 00688 printf(" "); 00689 else 00690 printf("<a href='%s?type=command&expand=%s'>%s</a>",CONFIG_CGI,url_encode(temp_host->host_check_command),html_encode(temp_host->host_check_command,FALSE)); 00691 printf("</TD>\n"); 00692 00693 printf("<TD CLASS='%s'>",bg_class); 00694 if(temp_host->check_period==NULL) 00695 printf(" "); 00696 else 00697 printf("<A HREF='%s?type=timeperiods&expand=%s'>%s</A>",CONFIG_CGI,url_encode(temp_host->check_period),html_encode(temp_host->check_period,FALSE)); 00698 printf("</TD>\n"); 00699 00700 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_host->obsess_over_host==TRUE)?"Yes":"No"); 00701 00702 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_host->checks_enabled==TRUE)?"Yes":"No"); 00703 00704 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_host->accept_passive_host_checks==TRUE)?"Yes":"No"); 00705 00706 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_host->check_freshness==TRUE)?"Yes":"No"); 00707 00708 printf("<TD CLASS='%s'>",bg_class); 00709 if(temp_host->freshness_threshold==0) 00710 printf("Auto-determined value"); 00711 else 00712 printf("%d seconds",temp_host->freshness_threshold); 00713 printf("</TD>\n"); 00714 00715 printf("<TD CLASS='%s'>",bg_class); 00716 } 00717 00718 /* find all the contacts for this host... */ 00719 contact=0; 00720 for(temp_contactsmember=temp_host->contacts;temp_contactsmember!=NULL;temp_contactsmember=temp_contactsmember->next){ 00721 contact++; 00722 if(contact>1) 00723 printf(", "); 00724 00725 if(content_type==JSON_CONTENT) 00726 printf("{ \"contact_name\": \"%s\" } ",json_encode(temp_contactsmember->contact_name)); 00727 else if(content_type==CSV_CONTENT) 00728 printf("%s",temp_contactsmember->contact_name); 00729 else 00730 printf("<A HREF='%s?type=contacts&expand=%s'>%s</A>",CONFIG_CGI,url_encode(temp_contactsmember->contact_name),html_encode(temp_contactsmember->contact_name,FALSE)); 00731 } 00732 for(temp_contactgroupsmember=temp_host->contact_groups;temp_contactgroupsmember!=NULL;temp_contactgroupsmember=temp_contactgroupsmember->next){ 00733 contact++; 00734 if(contact>1) 00735 printf(", "); 00736 00737 if(content_type==JSON_CONTENT) 00738 printf("{ \"contactgroup_name\": \"%s\" } ",json_encode(temp_contactgroupsmember->group_name)); 00739 else if(content_type==CSV_CONTENT) 00740 printf("%s",temp_contactgroupsmember->group_name); 00741 else 00742 printf("<A HREF='%s?type=contactgroups&expand=%s'>%s</A>",CONFIG_CGI,url_encode(temp_contactgroupsmember->group_name),html_encode(temp_contactgroupsmember->group_name,FALSE)); 00743 } 00744 if(contact==0) 00745 printf("%s",(content_type==CSV_CONTENT || content_type==JSON_CONTENT)?"":" "); 00746 00747 get_interval_time_string(temp_host->notification_interval,time_string[0],sizeof(time_string[0])); 00748 get_interval_time_string(temp_host->first_notification_delay,time_string[1],sizeof(time_string[1])); 00749 00750 if(content_type==JSON_CONTENT) { 00751 printf("], "); 00752 printf("\"notification_interval\": \"%s\", ",time_string[0]); 00753 printf("\"first_notification_delay\": \"%s\", ",time_string[1]); 00754 printf("\"notification_options\": [ "); 00755 }else if(content_type==CSV_CONTENT){ 00756 printf("%s%s",csv_data_enclosure,csv_delimiter); 00757 printf("%s%s%s%s",csv_data_enclosure,time_string[0],csv_data_enclosure,csv_delimiter); 00758 printf("%s%s%s%s",csv_data_enclosure,time_string[1],csv_data_enclosure,csv_delimiter); 00759 printf("%s",csv_data_enclosure); 00760 }else{ 00761 printf("</TD>\n"); 00762 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_host->notification_interval==0)?"<i>No Re-notification</I>":html_encode(time_string[0],FALSE)); 00763 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,time_string[1]); 00764 printf("<TD CLASS='%s'>",bg_class); 00765 } 00766 00767 options=0; 00768 if(temp_host->notify_on_down==TRUE){ 00769 options=1; 00770 printf("%sDown%s",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 00771 } 00772 if(temp_host->notify_on_unreachable==TRUE){ 00773 printf("%s%sUnreachable%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 00774 options=1; 00775 } 00776 if(temp_host->notify_on_recovery==TRUE){ 00777 printf("%s%sRecovery%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 00778 options=1; 00779 } 00780 if(temp_host->notify_on_flapping==TRUE){ 00781 printf("%s%sFlapping%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 00782 options=1; 00783 } 00784 if(temp_host->notify_on_downtime==TRUE){ 00785 printf("%s%sDowntime%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 00786 options=1; 00787 } 00788 if(options==0 && content_type!=JSON_CONTENT) 00789 printf("None"); 00790 00791 if(content_type==JSON_CONTENT) { 00792 printf(" ], "); 00793 if (temp_host->notification_period==NULL) 00794 printf("\"notification_period\": null, "); 00795 else 00796 printf("\"notification_period\": \"%s\", ",json_encode(temp_host->notification_period)); 00797 00798 if (temp_host->event_handler==NULL) 00799 printf("\"event_handler\": null, "); 00800 else 00801 printf("\"event_handler\": \"%s\", ",json_encode(temp_host->event_handler)); 00802 00803 printf("\"enable_event_handler\": %s, ",(temp_host->event_handler_enabled==TRUE)?"true":"false"); 00804 printf("\"stalking_options\": [ "); 00805 }else if(content_type==CSV_CONTENT) { 00806 printf("%s%s",csv_data_enclosure,csv_delimiter); 00807 printf("%s%s%s%s",csv_data_enclosure,(temp_host->notification_period==NULL)?"":temp_host->notification_period,csv_data_enclosure,csv_delimiter); 00808 printf("%s%s%s%s",csv_data_enclosure,(temp_host->event_handler==NULL)?"":temp_host->event_handler,csv_data_enclosure,csv_delimiter); 00809 printf("%s%s%s%s",csv_data_enclosure,(temp_host->event_handler_enabled==TRUE)?"Yes":"No",csv_data_enclosure,csv_delimiter); 00810 printf("%s",csv_data_enclosure); 00811 }else{ 00812 printf("</TD>\n"); 00813 00814 printf("<TD CLASS='%s'>",bg_class); 00815 00816 if(temp_host->notification_period==NULL) 00817 printf(" "); 00818 else 00819 printf("<a href='%s?type=timeperiods&expand=%s'>%s</a>",CONFIG_CGI,url_encode(temp_host->notification_period),html_encode(temp_host->notification_period,FALSE)); 00820 printf("</TD>\n"); 00821 00822 printf("<TD CLASS='%s'>",bg_class); 00823 if(temp_host->event_handler==NULL) 00824 printf(" "); 00825 else 00826 /* printf("<a href='%s?type=commands&expand=%s'>%s</a></TD>\n",CONFIG_CGI,url_encode(strtok(temp_host->event_handler,"!")),html_encode(temp_host->event_handler,FALSE)); */ 00827 printf("<a href='%s?type=command&expand=%s'>%s</a>",CONFIG_CGI,url_encode(temp_host->event_handler),html_encode(temp_host->event_handler,FALSE)); 00828 00829 printf("</TD>\n"); 00830 00831 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_host->event_handler_enabled==TRUE)?"Yes":"No"); 00832 00833 printf("<TD CLASS='%s'>",bg_class); 00834 } 00835 00836 options=0; 00837 if(temp_host->stalk_on_up==TRUE){ 00838 options=1; 00839 printf("%sUp%s",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 00840 } 00841 if(temp_host->stalk_on_down==TRUE){ 00842 printf("%s%sDown%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 00843 options=1; 00844 } 00845 if(temp_host->stalk_on_unreachable==TRUE){ 00846 printf("%s%sUnreachable%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 00847 options=1; 00848 } 00849 if(options==0 && content_type!=JSON_CONTENT) 00850 printf("None"); 00851 00852 if(content_type==JSON_CONTENT) { 00853 printf(" ], "); 00854 printf("\"enable_flap_detection\": %s, ",(temp_host->flap_detection_enabled==TRUE)?"true":"false"); 00855 if(temp_host->low_flap_threshold==0.0) 00856 printf("\"low_flap_threshold\": \"Program-wide value\", "); 00857 else 00858 printf("\"low_flap_threshold\": %3.1f%%, ",temp_host->low_flap_threshold); 00859 00860 if(temp_host->high_flap_threshold==0.0) 00861 printf("\"high_flap_threshold\": \"Program-wide value\", "); 00862 else 00863 printf("\"high_flap_threshold\": %3.1f%%, ",temp_host->high_flap_threshold); 00864 00865 printf("\"flap_detection_options\": [ "); 00866 }else if(content_type==CSV_CONTENT) { 00867 printf("%s%s",csv_data_enclosure,csv_delimiter); 00868 printf("%s%s%s%s",csv_data_enclosure,(temp_host->flap_detection_enabled==TRUE)?"Yes":"No",csv_data_enclosure,csv_delimiter); 00869 if(temp_host->low_flap_threshold==0.0) 00870 printf("%sProgram-wide value%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00871 else 00872 printf("%s%3.1f%%%s%s",csv_data_enclosure,temp_host->low_flap_threshold,csv_data_enclosure,csv_delimiter); 00873 if(temp_host->high_flap_threshold==0.0) 00874 printf("%sProgram-wide value%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00875 else 00876 printf("%s%3.1f%%%s%s",csv_data_enclosure,temp_host->high_flap_threshold,csv_data_enclosure,csv_delimiter); 00877 printf("%s",csv_data_enclosure); 00878 }else{ 00879 printf("</TD>\n"); 00880 00881 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_host->flap_detection_enabled==TRUE)?"Yes":"No"); 00882 00883 printf("<TD CLASS='%s'>",bg_class); 00884 if(temp_host->low_flap_threshold==0.0) 00885 printf("Program-wide value"); 00886 else 00887 printf("%3.1f%%",temp_host->low_flap_threshold); 00888 printf("</TD>\n"); 00889 00890 printf("<TD CLASS='%s'>",bg_class); 00891 if(temp_host->high_flap_threshold==0.0) 00892 printf("Program-wide value"); 00893 else 00894 printf("%3.1f%%",temp_host->high_flap_threshold); 00895 printf("</TD>\n"); 00896 00897 printf("<TD CLASS='%s'>",bg_class); 00898 } 00899 00900 options=0; 00901 if(temp_host->flap_detection_on_up==TRUE){ 00902 options=1; 00903 printf("%sUp%s",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 00904 } 00905 if(temp_host->flap_detection_on_down==TRUE){ 00906 printf("%s%sDown%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 00907 options=1; 00908 } 00909 if(temp_host->flap_detection_on_unreachable==TRUE){ 00910 printf("%s%sUnreachable%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 00911 options=1; 00912 } 00913 if(options==0 && content_type!=JSON_CONTENT) 00914 printf("None"); 00915 00916 if(content_type==JSON_CONTENT) { 00917 printf(" ], "); 00918 printf("\"process_performance_data\": %s, ",(temp_host->process_performance_data==TRUE)?"true":"false"); 00919 printf("\"enable_failure_prediction\": %s, ",(temp_host->failure_prediction_enabled==TRUE)?"true":"false"); 00920 if (temp_host->failure_prediction_options==NULL) 00921 printf("\"failure_prediction_options\": null, "); 00922 else 00923 printf("\"failure_prediction_options\": \"%s\", ",temp_host->failure_prediction_options); 00924 if (temp_host->notes==NULL) 00925 printf("\"notes\": null, "); 00926 else 00927 printf("\"notes\": \"%s\", ",json_encode(temp_host->notes)); 00928 if (temp_host->notes_url==NULL) 00929 printf("\"notes_url\": null, "); 00930 else 00931 printf("\"notes_url\": \"%s\", ",json_encode(temp_host->notes_url)); 00932 if (temp_host->action_url==NULL) 00933 printf("\"action_url\": null, "); 00934 else 00935 printf("\"action_url\": \"%s\", ",json_encode(temp_host->action_url)); 00936 if (temp_host->have_2d_coords==FALSE) 00937 printf("\"2d_coords\": null, "); 00938 else 00939 printf("\"2d_coords\": \"%d,%d\", ",temp_host->x_2d,temp_host->y_2d); 00940 if (temp_host->have_3d_coords==FALSE) 00941 printf("\"3d_coords\": null, "); 00942 else 00943 printf("\"3d_coords\": \"%.2f,%.2f,%.2f\", ",temp_host->x_3d,temp_host->y_3d,temp_host->z_3d); 00944 if (temp_host->statusmap_image==NULL) 00945 printf("\"statusmap_image\": null, "); 00946 else 00947 printf("\"statusmap_image\": \"%s\", ",temp_host->statusmap_image); 00948 if (temp_host->vrml_image==NULL) 00949 printf("\"vrml_image\": null, "); 00950 else 00951 printf("\"vrml_image\": \"%s\", ",json_encode(temp_host->vrml_image)); 00952 if (temp_host->icon_image==NULL) 00953 printf("\"icon_image\": null, "); 00954 else 00955 printf("\"icon_image\": \"%s\", ",json_encode(temp_host->icon_image)); 00956 if (temp_host->icon_image_alt==NULL) 00957 printf("\"icon_image_alt\": null, "); 00958 else 00959 printf("\"icon_image_alt\": \"%s\", ",json_encode(temp_host->icon_image_alt)); 00960 printf("\"retention_options\": [ "); 00961 }else if(content_type==CSV_CONTENT) { 00962 printf("%s%s",csv_data_enclosure,csv_delimiter); 00963 printf("%s%s%s%s",csv_data_enclosure,(temp_host->process_performance_data==TRUE)?"Yes":"No",csv_data_enclosure,csv_delimiter); 00964 printf("%s%s%s%s",csv_data_enclosure,(temp_host->failure_prediction_enabled==TRUE)?"Yes":"No",csv_data_enclosure,csv_delimiter); 00965 printf("%s%s%s%s",csv_data_enclosure,(temp_host->failure_prediction_options==NULL)?"":temp_host->failure_prediction_options,csv_data_enclosure,csv_delimiter); 00966 printf("%s%s%s%s",csv_data_enclosure,(temp_host->notes==NULL)?"":temp_host->notes,csv_data_enclosure,csv_delimiter); 00967 printf("%s%s%s%s",csv_data_enclosure,(temp_host->notes_url==NULL)?"":temp_host->notes_url,csv_data_enclosure,csv_delimiter); 00968 printf("%s%s%s%s",csv_data_enclosure,(temp_host->action_url==NULL)?"":temp_host->action_url,csv_data_enclosure,csv_delimiter); 00969 if(temp_host->have_2d_coords==FALSE) 00970 printf("%s%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00971 else 00972 printf("%s%d,%d%s%s",csv_data_enclosure,temp_host->x_2d,temp_host->y_2d,csv_data_enclosure,csv_delimiter); 00973 if(temp_host->have_3d_coords==FALSE) 00974 printf("%s%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 00975 else 00976 printf("%s%.2f,%.2f,%.2f%s%s",csv_data_enclosure,temp_host->x_3d,temp_host->y_3d,temp_host->z_3d,csv_data_enclosure,csv_delimiter); 00977 printf("%s%s%s%s",csv_data_enclosure,(temp_host->statusmap_image==NULL)?"":temp_host->statusmap_image,csv_data_enclosure,csv_delimiter); 00978 printf("%s%s%s%s",csv_data_enclosure,(temp_host->vrml_image==NULL)?"":temp_host->vrml_image,csv_data_enclosure,csv_delimiter); 00979 printf("%s%s%s%s",csv_data_enclosure,(temp_host->icon_image==NULL)?"":temp_host->icon_image,csv_data_enclosure,csv_delimiter); 00980 printf("%s%s%s%s",csv_data_enclosure,(temp_host->icon_image_alt==NULL)?"":temp_host->icon_image_alt,csv_data_enclosure,csv_delimiter); 00981 printf("%s",csv_data_enclosure); 00982 }else{ 00983 printf("</TD>\n"); 00984 00985 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_host->process_performance_data==TRUE)?"Yes":"No"); 00986 00987 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_host->failure_prediction_enabled==TRUE)?"Yes":"No"); 00988 00989 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_host->failure_prediction_options==NULL)?" ":html_encode(temp_host->failure_prediction_options,FALSE)); 00990 00991 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_host->notes==NULL)?" ":html_encode(temp_host->notes,FALSE)); 00992 00993 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_host->notes_url==NULL)?" ":html_encode(temp_host->notes_url,FALSE)); 00994 00995 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_host->action_url==NULL)?" ":html_encode(temp_host->action_url,FALSE)); 00996 00997 if(temp_host->have_2d_coords==FALSE) 00998 printf("<TD CLASS='%s'> </TD>\n",bg_class); 00999 else 01000 printf("<TD CLASS='%s'>%d,%d</TD>\n",bg_class,temp_host->x_2d,temp_host->y_2d); 01001 01002 if(temp_host->have_3d_coords==FALSE) 01003 printf("<TD CLASS='%s'> </TD>\n",bg_class); 01004 else 01005 printf("<TD CLASS='%s'>%.2f,%.2f,%.2f</TD>\n",bg_class,temp_host->x_3d,temp_host->y_3d,temp_host->z_3d); 01006 01007 if(temp_host->statusmap_image==NULL) 01008 printf("<TD CLASS='%s'> </TD>\n",bg_class); 01009 else 01010 printf("<TD CLASS='%s' valign='center'><img src='%s%s' border='0' width='20' height='20'> %s</TD>\n",bg_class,url_logo_images_path,temp_host->statusmap_image,html_encode(temp_host->statusmap_image,FALSE)); 01011 01012 if(temp_host->vrml_image==NULL) 01013 printf("<TD CLASS='%s'> </TD>\n",bg_class); 01014 else 01015 printf("<TD CLASS='%s' valign='center'><img src='%s%s' border='0' width='20' height='20'> %s</TD>\n",bg_class,url_logo_images_path,temp_host->vrml_image,html_encode(temp_host->vrml_image,FALSE)); 01016 01017 if(temp_host->icon_image==NULL) 01018 printf("<TD CLASS='%s'> </TD>\n",bg_class); 01019 else{ 01020 process_macros_r(mac, temp_host->icon_image,&processed_string,0); 01021 printf("<TD CLASS='%s' valign='center'><img src='%s%s' border='0' width='20' height='20'>%s</TD>\n",bg_class,url_logo_images_path,processed_string,html_encode(temp_host->icon_image,FALSE)); 01022 free(processed_string); 01023 } 01024 01025 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_host->icon_image_alt==NULL)?" ":html_encode(temp_host->icon_image_alt,FALSE)); 01026 01027 printf("<TD CLASS='%s'>",bg_class); 01028 } 01029 01030 options=0; 01031 if(temp_host->retain_status_information==TRUE){ 01032 options=1; 01033 printf("%sStatus Information%s",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 01034 } 01035 if(temp_host->retain_nonstatus_information==TRUE){ 01036 printf("%s%sNon-Status Information%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 01037 options=1; 01038 } 01039 if(options==0 && content_type!=JSON_CONTENT) 01040 printf("None"); 01041 01042 if(content_type==JSON_CONTENT) 01043 printf(" ] }"); 01044 else if(content_type==CSV_CONTENT) 01045 printf("%s\n",csv_data_enclosure); 01046 else 01047 printf("</TD>\n</TR>\n"); 01048 01049 } 01050 01051 if(content_type!=CSV_CONTENT && content_type!=JSON_CONTENT){ 01052 printf("</TABLE>\n"); 01053 printf("</DIV>\n"); 01054 printf("</P>\n"); 01055 }else if(content_type==JSON_CONTENT) 01056 printf("\n]\n"); 01057 01058 return; 01059 } 01060 01061 void display_hostgroups(void){ 01062 hostgroup *temp_hostgroup; 01063 hostsmember *temp_hostsmember; 01064 int odd=0; 01065 int json_start=TRUE; 01066 char *bg_class=""; 01067 01068 if(content_type==JSON_CONTENT) { 01069 printf("\"hostgroups\": [\n"); 01070 }else if(content_type==CSV_CONTENT) { 01071 printf("%sGroup Name%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01072 printf("%sDescription%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01073 printf("%sHost Members%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01074 printf("%sNotes%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01075 printf("%sNotes URL%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01076 printf("%sAction URL%s\n",csv_data_enclosure,csv_data_enclosure); 01077 } else { 01078 printf("<P><DIV ALIGN=CENTER CLASS='dataTitle'>Host Group%s%s</DIV></P>\n", 01079 (*to_expand=='\0'?"s":" "),(*to_expand=='\0'?"":html_encode(to_expand,FALSE))); 01080 01081 printf("<P>\n"); 01082 printf("<DIV ALIGN=CENTER>\n"); 01083 01084 printf("<TABLE BORDER=0 CLASS='data'>\n"); 01085 01086 print_export_link(); 01087 01088 printf("<TR>\n"); 01089 printf("<TH CLASS='data'>Group Name</TH>"); 01090 printf("<TH CLASS='data'>Description</TH>"); 01091 printf("<TH CLASS='data'>Host Members</TH>"); 01092 printf("<TH CLASS='data'>Notes</TH>"); 01093 printf("<TH CLASS='data'>Notes URL</TH>"); 01094 printf("<TH CLASS='data'>Action URL</TH>"); 01095 printf("</TR>\n"); 01096 } 01097 01098 /* check all the hostgroups... */ 01099 for(temp_hostgroup=hostgroup_list;temp_hostgroup!=NULL;temp_hostgroup=temp_hostgroup->next) if (((*to_expand)=='\0')||(!strcmp(to_expand,temp_hostgroup->group_name))){ 01100 01101 if(odd){ 01102 odd=0; 01103 bg_class="dataOdd"; 01104 }else{ 01105 odd=1; 01106 bg_class="dataEven"; 01107 } 01108 01109 /* print list in json format */ 01110 if(content_type==JSON_CONTENT) { 01111 // always add a comma, except for the first line 01112 if (json_start==FALSE) 01113 printf(",\n"); 01114 json_start=FALSE; 01115 printf("{ \"group_name\": \"%s\", ",json_encode(temp_hostgroup->group_name)); 01116 printf("\"description\": \"%s\", ",json_encode(temp_hostgroup->alias)); 01117 printf("\"hostgroup_members\": ["); 01118 01119 /* find all the services that are members of this servicegroup... */ 01120 for(temp_hostsmember=temp_hostgroup->members;temp_hostsmember!=NULL;temp_hostsmember=temp_hostsmember->next){ 01121 if(temp_hostsmember!=temp_hostgroup->members) 01122 printf(","); 01123 printf(" \"%s\"",json_encode(temp_hostsmember->host_name)); 01124 } 01125 printf(" ], "); 01126 if (temp_hostgroup->notes==NULL) 01127 printf("\"notes\": null, "); 01128 else 01129 printf("\"notes\": \"%s\", ",json_encode(temp_hostgroup->notes)); 01130 if (temp_hostgroup->notes_url==NULL) 01131 printf("\"notes_url\": null, "); 01132 else 01133 printf("\"notes_url\": \"%s\", ",json_encode(temp_hostgroup->notes_url)); 01134 if (temp_hostgroup->action_url==NULL) 01135 printf("\"action_url\": null }"); 01136 else 01137 printf("\"action_url\": \"%s\" }",json_encode(temp_hostgroup->action_url)); 01138 /* print list in csv format */ 01139 }else if(content_type==CSV_CONTENT) { 01140 printf("%s%s%s%s",csv_data_enclosure,temp_hostgroup->group_name,csv_data_enclosure,csv_delimiter); 01141 printf("%s%s%s%s",csv_data_enclosure,temp_hostgroup->alias,csv_data_enclosure,csv_delimiter); 01142 printf("%s",csv_data_enclosure); 01143 01144 /* find all the services that are members of this servicegroup... */ 01145 for(temp_hostsmember=temp_hostgroup->members;temp_hostsmember!=NULL;temp_hostsmember=temp_hostsmember->next){ 01146 if(temp_hostsmember!=temp_hostgroup->members) 01147 printf(", "); 01148 printf("%s",temp_hostsmember->host_name); 01149 } 01150 01151 printf("%s%s",csv_data_enclosure,csv_delimiter); 01152 printf("%s%s%s%s",csv_data_enclosure,(temp_hostgroup->notes==NULL)?"":temp_hostgroup->notes,csv_data_enclosure,csv_delimiter); 01153 printf("%s%s%s%s",csv_data_enclosure,(temp_hostgroup->notes_url==NULL)?"":temp_hostgroup->notes_url,csv_data_enclosure,csv_delimiter); 01154 printf("%s%s%s\n",csv_data_enclosure,(temp_hostgroup->action_url==NULL)?"":temp_hostgroup->action_url,csv_data_enclosure); 01155 } else { 01156 printf("<TR CLASS='%s'>\n",bg_class); 01157 01158 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,html_encode(temp_hostgroup->group_name,FALSE)); 01159 01160 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,html_encode(temp_hostgroup->alias,FALSE)); 01161 01162 printf("<TD CLASS='%s'>",bg_class); 01163 01164 /* find all the hosts that are members of this hostgroup... */ 01165 for(temp_hostsmember=temp_hostgroup->members;temp_hostsmember!=NULL;temp_hostsmember=temp_hostsmember->next){ 01166 01167 if(temp_hostsmember!=temp_hostgroup->members) 01168 printf(", "); 01169 printf("<A HREF='%s?type=hosts&expand=%s'>%s</A>",CONFIG_CGI,url_encode(temp_hostsmember->host_name),html_encode(temp_hostsmember->host_name,FALSE)); 01170 } 01171 printf("</TD>\n"); 01172 01173 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_hostgroup->notes==NULL)?" ":html_encode(temp_hostgroup->notes,FALSE)); 01174 01175 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_hostgroup->notes_url==NULL)?" ":html_encode(temp_hostgroup->notes_url,FALSE)); 01176 01177 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_hostgroup->action_url==NULL)?" ":html_encode(temp_hostgroup->action_url,FALSE)); 01178 01179 printf("</TR>\n"); 01180 } 01181 } 01182 01183 if(content_type!=CSV_CONTENT && content_type!=JSON_CONTENT){ 01184 printf("</TABLE>\n"); 01185 printf("</DIV>\n"); 01186 printf("</P>\n"); 01187 }else if(content_type==JSON_CONTENT) 01188 printf("\n]\n"); 01189 01190 return; 01191 } 01192 01193 void display_servicegroups(void){ 01194 servicegroup *temp_servicegroup; 01195 servicesmember *temp_servicesmember; 01196 int odd=0; 01197 char *bg_class=""; 01198 int json_start=TRUE; 01199 01200 if(content_type==JSON_CONTENT) { 01201 printf("\"servicegroups\": [\n"); 01202 }else if(content_type==CSV_CONTENT) { 01203 printf("%sGroup Name%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01204 printf("%sDescription%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01205 printf("%sService Members%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01206 printf("%sNotes%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01207 printf("%sNotes URL%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01208 printf("%sAction URL%s",csv_data_enclosure,csv_data_enclosure); 01209 printf("\n"); 01210 } else { 01211 printf("<P><DIV ALIGN=CENTER CLASS='dataTitle'>Service Group%s%s</DIV></P>\n", 01212 (*to_expand=='\0'?"s":" "),(*to_expand=='\0'?"":html_encode(to_expand,FALSE))); 01213 01214 printf("<P>\n"); 01215 printf("<DIV ALIGN=CENTER>\n"); 01216 01217 printf("<TABLE BORDER=0 CLASS='data'>\n"); 01218 01219 print_export_link(); 01220 01221 printf("<TR>\n"); 01222 printf("<TH CLASS='data'>Group Name</TH>"); 01223 printf("<TH CLASS='data'>Description</TH>"); 01224 printf("<TH CLASS='data'>Service Members</TH>"); 01225 printf("<TH CLASS='data'>Notes</TH>"); 01226 printf("<TH CLASS='data'>Notes URL</TH>"); 01227 printf("<TH CLASS='data'>Action URL</TH>"); 01228 printf("</TR>\n"); 01229 } 01230 01231 /* check all the servicegroups... */ 01232 for(temp_servicegroup=servicegroup_list;temp_servicegroup!=NULL;temp_servicegroup=temp_servicegroup->next) if (((*to_expand)=='\0')||(!strcmp(to_expand,temp_servicegroup->group_name))){ 01233 01234 if(odd){ 01235 odd=0; 01236 bg_class="dataOdd"; 01237 }else{ 01238 odd=1; 01239 bg_class="dataEven"; 01240 } 01241 01242 /* print list in json format */ 01243 if(content_type==JSON_CONTENT) { 01244 // always add a comma, except for the first line 01245 if (json_start==FALSE) 01246 printf(",\n"); 01247 json_start=FALSE; 01248 printf("{ \"group_name\": \"%s\", ",json_encode(temp_servicegroup->group_name)); 01249 printf("\"description\": \"%s\", ",json_encode(temp_servicegroup->alias)); 01250 printf("\"servicegroup_members\": ["); 01251 01252 /* find all the services that are members of this servicegroup... */ 01253 for(temp_servicesmember=temp_servicegroup->members;temp_servicesmember!=NULL;temp_servicesmember=temp_servicesmember->next){ 01254 if(temp_servicesmember!=temp_servicegroup->members) 01255 printf(","); 01256 printf(" { \"host_name\": \"%s\", \"service_description\": \"%s\" }",json_encode(temp_servicesmember->host_name),json_encode(temp_servicesmember->service_description)); 01257 } 01258 printf(" ], "); 01259 if (temp_servicegroup->notes==NULL) 01260 printf("\"notes\": null, "); 01261 else 01262 printf("\"notes\": \"%s\", ",json_encode(temp_servicegroup->notes)); 01263 if (temp_servicegroup->notes_url==NULL) 01264 printf("\"notes_url\": null, "); 01265 else 01266 printf("\"notes_url\": \"%s\", ",json_encode(temp_servicegroup->notes_url)); 01267 if (temp_servicegroup->action_url==NULL) 01268 printf("\"action_url\": null }"); 01269 else 01270 printf("\"action_url\": \"%s\" }",json_encode(temp_servicegroup->action_url)); 01271 /* print list in csv format */ 01272 }else if(content_type==CSV_CONTENT) { 01273 printf("%s%s%s%s",csv_data_enclosure,temp_servicegroup->group_name,csv_data_enclosure,csv_delimiter); 01274 printf("%s%s%s%s",csv_data_enclosure,temp_servicegroup->alias,csv_data_enclosure,csv_delimiter); 01275 printf("%s",csv_data_enclosure); 01276 01277 /* find all the services that are members of this servicegroup... */ 01278 for(temp_servicesmember=temp_servicegroup->members;temp_servicesmember!=NULL;temp_servicesmember=temp_servicesmember->next) 01279 printf("%s%s / %s",(temp_servicesmember==temp_servicegroup->members)?"":", ",temp_servicesmember->host_name,temp_servicesmember->service_description); 01280 01281 printf("%s%s",csv_data_enclosure,csv_delimiter); 01282 printf("%s%s%s%s",csv_data_enclosure,(temp_servicegroup->notes==NULL)?"":temp_servicegroup->notes,csv_data_enclosure,csv_delimiter); 01283 printf("%s%s%s%s",csv_data_enclosure,(temp_servicegroup->notes_url==NULL)?"":temp_servicegroup->notes_url,csv_data_enclosure,csv_delimiter); 01284 printf("%s%s%s\n",csv_data_enclosure,(temp_servicegroup->action_url==NULL)?"":temp_servicegroup->action_url,csv_data_enclosure); 01285 } else { 01286 printf("<TR CLASS='%s'>\n",bg_class); 01287 01288 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,html_encode(temp_servicegroup->group_name,FALSE)); 01289 01290 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,html_encode(temp_servicegroup->alias,FALSE)); 01291 01292 printf("<TD CLASS='%s'>",bg_class); 01293 01294 /* find all the services that are members of this servicegroup... */ 01295 for(temp_servicesmember=temp_servicegroup->members;temp_servicesmember!=NULL;temp_servicesmember=temp_servicesmember->next){ 01296 01297 printf("%s<A HREF='%s?type=hosts&expand=%s'>%s</A> / ",(temp_servicesmember==temp_servicegroup->members)?"":", ",CONFIG_CGI,url_encode(temp_servicesmember->host_name),html_encode(temp_servicesmember->host_name,FALSE)); 01298 01299 printf("<A HREF='%s?type=services&expand=%s#%s;",CONFIG_CGI,url_encode(temp_servicesmember->host_name),url_encode(temp_servicesmember->host_name)); 01300 printf("%s'>%s</A>",url_encode(temp_servicesmember->service_description),html_encode(temp_servicesmember->service_description,FALSE)); 01301 } 01302 01303 printf("</TD>\n"); 01304 01305 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_servicegroup->notes==NULL)?" ":html_encode(temp_servicegroup->notes,FALSE)); 01306 01307 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_servicegroup->notes_url==NULL)?" ":html_encode(temp_servicegroup->notes_url,FALSE)); 01308 01309 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_servicegroup->action_url==NULL)?" ":html_encode(temp_servicegroup->action_url,FALSE)); 01310 01311 printf("</TR>\n"); 01312 } 01313 } 01314 01315 if(content_type!=CSV_CONTENT && content_type!=JSON_CONTENT){ 01316 printf("</TABLE>\n"); 01317 printf("</DIV>\n"); 01318 printf("</P>\n"); 01319 }else if(content_type==JSON_CONTENT) 01320 printf("\n]\n"); 01321 01322 return; 01323 } 01324 01325 void display_contacts(void){ 01326 contact *temp_contact; 01327 commandsmember *temp_commandsmember; 01328 int odd=0; 01329 int options; 01330 int found; 01331 char *bg_class=""; 01332 int json_start=TRUE; 01333 01334 if(content_type==JSON_CONTENT) { 01335 printf("\"contacts\": [\n"); 01336 }else if(content_type==CSV_CONTENT) { 01337 printf("%sContact Name%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01338 printf("%sAlias%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01339 printf("%sEmail Address%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01340 printf("%sPager Address/Number%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01341 printf("%sService Notification Options%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01342 printf("%sHost Notification Options%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01343 printf("%sService Notification Period%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01344 printf("%sHost Notification Period%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01345 printf("%sService Notification Commands%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01346 printf("%sHost Notification Commands%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01347 printf("%sRetention Options%s",csv_data_enclosure,csv_data_enclosure); 01348 printf("\n"); 01349 } else { 01350 printf("<P><DIV ALIGN=CENTER CLASS='dataTitle'>Contact%s%s</DIV></P>\n", 01351 (*to_expand=='\0'?"s":" "),(*to_expand=='\0'?"":html_encode(to_expand,FALSE))); 01352 01353 printf("<P>\n"); 01354 printf("<DIV ALIGN=CENTER>\n"); 01355 01356 printf("<TABLE CLASS='data'>\n"); 01357 01358 print_export_link(); 01359 01360 printf("<TR>\n"); 01361 printf("<TH CLASS='data'>Contact Name</TH>"); 01362 printf("<TH CLASS='data'>Alias</TH>"); 01363 printf("<TH CLASS='data'>Email Address</TH>"); 01364 printf("<TH CLASS='data'>Pager Address/Number</TH>"); 01365 printf("<TH CLASS='data'>Service Notification Options</TH>"); 01366 printf("<TH CLASS='data'>Host Notification Options</TH>"); 01367 printf("<TH CLASS='data'>Service Notification Period</TH>"); 01368 printf("<TH CLASS='data'>Host Notification Period</TH>"); 01369 printf("<TH CLASS='data'>Service Notification Commands</TH>"); 01370 printf("<TH CLASS='data'>Host Notification Commands</TH>"); 01371 printf("<TH CLASS='data'>Retention Options</TH>"); 01372 printf("</TR>\n"); 01373 } 01374 01375 /* check all contacts... */ 01376 for(temp_contact=contact_list;temp_contact!=NULL;temp_contact=temp_contact->next) if (((*to_expand)=='\0')||(!strcmp(to_expand,temp_contact->name))){ 01377 01378 if(odd){ 01379 odd=0; 01380 bg_class="dataOdd"; 01381 }else{ 01382 odd=1; 01383 bg_class="dataEven"; 01384 } 01385 01386 /* print list in json format */ 01387 if(content_type==JSON_CONTENT) { 01388 // always add a comma, except for the first line 01389 if (json_start==FALSE) 01390 printf(",\n"); 01391 json_start=FALSE; 01392 01393 printf("{ \"contact_name\": \"%s\", ",json_encode(temp_contact->name)); 01394 printf("\"alias\": \"%s\", ",json_encode(temp_contact->alias)); 01395 if (temp_contact->email==NULL) 01396 printf("\"email_address\": null, "); 01397 else 01398 printf("\"email_address\": \"%s\", ",json_encode(temp_contact->email)); 01399 if (temp_contact->pager==NULL) 01400 printf("\"pager_number\": null, "); 01401 else 01402 printf("\"pager_number\": \"%s\", ",json_encode(temp_contact->pager)); 01403 printf("\"service_notification_options\": ["); 01404 /* print list in csv format */ 01405 }else if(content_type==CSV_CONTENT) { 01406 printf("%s%s%s%s",csv_data_enclosure,temp_contact->name,csv_data_enclosure,csv_delimiter); 01407 printf("%s%s%s%s",csv_data_enclosure,temp_contact->alias,csv_data_enclosure,csv_delimiter); 01408 printf("%s%s%s%s",csv_data_enclosure,(temp_contact->email==NULL)?"":temp_contact->email,csv_data_enclosure,csv_delimiter); 01409 printf("%s%s%s%s",csv_data_enclosure,(temp_contact->pager==NULL)?"":temp_contact->pager,csv_data_enclosure,csv_delimiter); 01410 printf("%s",csv_data_enclosure); 01411 } else { 01412 printf("<TR CLASS='%s'>\n",bg_class); 01413 01414 printf("<TD CLASS='%s'><A NAME='%s'>%s</a></TD>\n",bg_class,url_encode(temp_contact->name),html_encode(temp_contact->name,FALSE)); 01415 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,html_encode(temp_contact->alias,FALSE)); 01416 printf("<TD CLASS='%s'><A HREF='mailto:%s'>%s</A></TD>\n",bg_class,(temp_contact->email==NULL)?" ":url_encode(temp_contact->email),(temp_contact->email==NULL)?" ":html_encode(temp_contact->email,FALSE)); 01417 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_contact->pager==NULL)?" ":html_encode(temp_contact->pager,FALSE)); 01418 01419 printf("<TD CLASS='%s'>",bg_class); 01420 } 01421 01422 options=0; 01423 if(temp_contact->notify_on_service_unknown==TRUE){ 01424 options=1; 01425 printf("%sUnknown%s",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 01426 } 01427 if(temp_contact->notify_on_service_warning==TRUE){ 01428 printf("%s%sWarning%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 01429 options=1; 01430 } 01431 if(temp_contact->notify_on_service_critical==TRUE){ 01432 printf("%s%sCritical%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 01433 options=1; 01434 } 01435 if(temp_contact->notify_on_service_recovery==TRUE){ 01436 printf("%s%sRecovery%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 01437 options=1; 01438 } 01439 if(temp_contact->notify_on_service_flapping==TRUE){ 01440 printf("%s%sFlapping%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 01441 options=1; 01442 } 01443 if(temp_contact->notify_on_service_downtime==TRUE){ 01444 printf("%s%sDowntime%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 01445 options=1; 01446 } 01447 if(options==0 && content_type!=JSON_CONTENT) 01448 printf("None"); 01449 01450 if(content_type==JSON_CONTENT) { 01451 printf(" ], "); 01452 printf("\"host_notification_options\": ["); 01453 }else if(content_type==CSV_CONTENT) { 01454 printf("%s%s",csv_data_enclosure,csv_delimiter); 01455 printf("%s",csv_data_enclosure); 01456 } else { 01457 printf("</TD>\n"); 01458 printf("<TD CLASS='%s'>",bg_class); 01459 } 01460 01461 options=0; 01462 if(temp_contact->notify_on_host_down==TRUE){ 01463 options=1; 01464 printf("%sDown%s",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 01465 } 01466 if(temp_contact->notify_on_host_unreachable==TRUE){ 01467 printf("%s%sUnreachable%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 01468 options=1; 01469 } 01470 if(temp_contact->notify_on_host_recovery==TRUE){ 01471 printf("%s%sRecovery%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 01472 options=1; 01473 } 01474 if(temp_contact->notify_on_host_flapping==TRUE){ 01475 printf("%s%sFlapping%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 01476 options=1; 01477 } 01478 if(temp_contact->notify_on_host_downtime==TRUE){ 01479 printf("%s%sDowntime%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 01480 options=1; 01481 } 01482 if(options==0 && content_type!=JSON_CONTENT) 01483 printf("None"); 01484 01485 if(content_type==JSON_CONTENT) { 01486 printf(" ], "); 01487 if (temp_contact->service_notification_period==NULL) 01488 printf("\"service_notification_period\": null, "); 01489 else 01490 printf("\"service_notification_period\": \"%s\", ",json_encode(temp_contact->service_notification_period)); 01491 if (temp_contact->host_notification_period==NULL) 01492 printf("\"host_notification_period\": null, "); 01493 else 01494 printf("\"host_notification_period\": \"%s\", ",json_encode(temp_contact->host_notification_period)); 01495 printf("\"service_notification_commands\": [ "); 01496 }else if(content_type==CSV_CONTENT) { 01497 printf("%s%s",csv_data_enclosure,csv_delimiter); 01498 01499 printf("%s%s%s%s",csv_data_enclosure,(temp_contact->service_notification_period==NULL)?"":temp_contact->service_notification_period,csv_data_enclosure,csv_delimiter); 01500 printf("%s%s%s%s",csv_data_enclosure,(temp_contact->host_notification_period==NULL)?"":temp_contact->host_notification_period,csv_data_enclosure,csv_delimiter); 01501 01502 printf("%s",csv_data_enclosure); 01503 } else { 01504 printf("</TD>\n"); 01505 printf("<TD CLASS='%s'>",bg_class); 01506 01507 if(temp_contact->service_notification_period==NULL) 01508 printf(" "); 01509 else 01510 printf("<A HREF='%s?type=timeperiods&expand=%s'>%s</A>",CONFIG_CGI,url_encode(temp_contact->service_notification_period),html_encode(temp_contact->service_notification_period,FALSE)); 01511 printf("</TD>\n"); 01512 01513 printf("<TD CLASS='%s'>\n",bg_class); 01514 if(temp_contact->host_notification_period==NULL) 01515 printf(" "); 01516 else 01517 printf("<A HREF='%s?type=timeperiods&expand=%s'>%s</A>",CONFIG_CGI,url_encode(temp_contact->host_notification_period),html_encode(temp_contact->host_notification_period,FALSE)); 01518 printf("</TD>\n"); 01519 01520 printf("<TD CLASS='%s'>",bg_class); 01521 } 01522 01523 found=FALSE; 01524 for(temp_commandsmember=temp_contact->service_notification_commands;temp_commandsmember!=NULL;temp_commandsmember=temp_commandsmember->next){ 01525 01526 if(temp_commandsmember!=temp_contact->service_notification_commands) 01527 printf(", "); 01528 01529 if(content_type==JSON_CONTENT) { 01530 printf("\"%s\"",json_encode(temp_commandsmember->command)); 01531 } else if(content_type==CSV_CONTENT){ 01532 printf("%s",temp_commandsmember->command); 01533 } else { 01534 /* printf("<A HREF='%s?type=commands&expand=%s'>%s</A>",CONFIG_CGI,url_encode(strtok(temp_commandsmember->command,"!")),html_encode(temp_commandsmember->command,FALSE)); */ 01535 printf("<A HREF='%s?type=command&expand=%s'>%s</A>",CONFIG_CGI,url_encode(temp_commandsmember->command),html_encode(temp_commandsmember->command,FALSE)); 01536 } 01537 01538 found=TRUE; 01539 } 01540 01541 if(found==FALSE && content_type!=JSON_CONTENT) 01542 printf("None"); 01543 01544 if(content_type==JSON_CONTENT) { 01545 printf(" ], "); 01546 printf("\"host_notification_commands\": [ "); 01547 }else if(content_type==CSV_CONTENT){ 01548 printf("%s%s",csv_data_enclosure,csv_delimiter); 01549 printf("%s",csv_data_enclosure); 01550 } else { 01551 printf("</TD>\n"); 01552 printf("<TD CLASS='%s'>",bg_class); 01553 } 01554 01555 found=FALSE; 01556 for(temp_commandsmember=temp_contact->host_notification_commands;temp_commandsmember!=NULL;temp_commandsmember=temp_commandsmember->next){ 01557 01558 if(temp_commandsmember!=temp_contact->host_notification_commands) 01559 printf(", "); 01560 01561 if(content_type==JSON_CONTENT) { 01562 printf("\"%s\"",json_encode(temp_commandsmember->command)); 01563 } else if(content_type==CSV_CONTENT){ 01564 printf("%s",temp_commandsmember->command); 01565 } else { 01566 /* printf("<A HREF='%s?type=commands&expand=%s'>%s</A>",CONFIG_CGI,url_encode(strtok(temp_commandsmember->command,"!")),html_encode(temp_commandsmember->command,FALSE)); */ 01567 printf("<A HREF='%s?type=command&expand=%s'>%s</A>",CONFIG_CGI,url_encode(temp_commandsmember->command),html_encode(temp_commandsmember->command,FALSE)); 01568 } 01569 01570 found=TRUE; 01571 } 01572 if(found==FALSE && content_type!=JSON_CONTENT) 01573 printf("None"); 01574 01575 if(content_type==JSON_CONTENT) { 01576 printf(" ], "); 01577 printf("\"retention_options\": [ "); 01578 }else if(content_type==CSV_CONTENT){ 01579 printf("%s%s",csv_data_enclosure,csv_delimiter); 01580 printf("%s",csv_data_enclosure); 01581 } else { 01582 printf("</TD>\n"); 01583 printf("<TD CLASS='%s'>",bg_class); 01584 } 01585 01586 options=0; 01587 if(temp_contact->retain_status_information==TRUE){ 01588 options=1; 01589 printf("%sStatus Information%s",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 01590 } 01591 if(temp_contact->retain_nonstatus_information==TRUE){ 01592 printf("%s%sNon-Status Information%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 01593 options=1; 01594 } 01595 if(options==0 && content_type!=JSON_CONTENT) 01596 printf("None"); 01597 01598 if(content_type==JSON_CONTENT) 01599 printf(" ] }"); 01600 else if(content_type==CSV_CONTENT) 01601 printf("%s\n",csv_data_enclosure); 01602 else 01603 printf("</TD>\n</TR>\n"); 01604 } 01605 01606 if(content_type!=CSV_CONTENT && content_type!=JSON_CONTENT){ 01607 printf("</TABLE>\n"); 01608 printf("</DIV>\n"); 01609 printf("</P>\n"); 01610 }else if(content_type==JSON_CONTENT) 01611 printf("\n]\n"); 01612 01613 return; 01614 } 01615 01616 void display_contactgroups(void){ 01617 contactgroup *temp_contactgroup; 01618 contactsmember *temp_contactsmember; 01619 int odd=0; 01620 char *bg_class; 01621 int json_start=TRUE; 01622 01623 if(content_type==JSON_CONTENT) { 01624 printf("\"contactgroups\": [\n"); 01625 }else if(content_type==CSV_CONTENT) { 01626 printf("%sGroup Name%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01627 printf("%sDescription%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01628 printf("%sContact Members%s",csv_data_enclosure,csv_data_enclosure); 01629 printf("\n"); 01630 } else { 01631 printf("<P><DIV ALIGN=CENTER CLASS='dataTitle'>Contact Group%s%s</DIV></P>\n", 01632 (*to_expand=='\0'?"s":" "),(*to_expand=='\0'?"":html_encode(to_expand,FALSE))); 01633 01634 printf("<P>\n"); 01635 printf("<DIV ALIGN=CENTER>\n"); 01636 01637 printf("<TABLE BORDER=0 CELLSPACING=3 CELLPADDING=0>\n"); 01638 01639 print_export_link(); 01640 01641 printf("<TR>\n"); 01642 printf("<TH CLASS='data'>Group Name</TH>\n"); 01643 printf("<TH CLASS='data'>Description</TH>\n"); 01644 printf("<TH CLASS='data'>Contact Members</TH>\n"); 01645 printf("</TR>\n"); 01646 } 01647 01648 /* check all the contact groups... */ 01649 for(temp_contactgroup=contactgroup_list;temp_contactgroup!=NULL;temp_contactgroup=temp_contactgroup->next) if (((*to_expand)=='\0')||(!strcmp(to_expand,temp_contactgroup->group_name))){ 01650 01651 if(odd){ 01652 odd=0; 01653 bg_class="dataOdd"; 01654 }else{ 01655 odd=1; 01656 bg_class="dataEven"; 01657 } 01658 01659 /* print list in json format */ 01660 if(content_type==JSON_CONTENT) { 01661 // always add a comma, except for the first line 01662 if (json_start==FALSE) 01663 printf(",\n"); 01664 json_start=FALSE; 01665 01666 printf("{ \"contactgroup_name\": \"%s\", ",json_encode(temp_contactgroup->group_name)); 01667 printf("\"alias\": \"%s\", ",json_encode(temp_contactgroup->alias)); 01668 printf("\"contactgroup_members\": ["); 01669 for(temp_contactsmember=temp_contactgroup->members;temp_contactsmember!=NULL;temp_contactsmember=temp_contactsmember->next){ 01670 if(temp_contactsmember!=temp_contactgroup->members) 01671 printf(","); 01672 01673 printf(" \"%s\"",json_encode(temp_contactsmember->contact_name)); 01674 } 01675 printf(" ] }"); 01676 /* print list in csv format */ 01677 }else if(content_type==CSV_CONTENT) { 01678 printf("%s%s%s%s",csv_data_enclosure,temp_contactgroup->group_name,csv_data_enclosure,csv_delimiter); 01679 printf("%s%s%s%s",csv_data_enclosure,temp_contactgroup->alias,csv_data_enclosure,csv_delimiter); 01680 printf("%s",csv_data_enclosure); 01681 for(temp_contactsmember=temp_contactgroup->members;temp_contactsmember!=NULL;temp_contactsmember=temp_contactsmember->next){ 01682 if(temp_contactsmember!=temp_contactgroup->members) 01683 printf(", "); 01684 01685 printf("%s",temp_contactsmember->contact_name); 01686 } 01687 printf("%s\n",csv_data_enclosure); 01688 } else { 01689 01690 printf("<TR CLASS='%s'>\n",bg_class); 01691 01692 printf("<TD CLASS='%s'><A NAME='%s'></A>%s</TD>\n",bg_class,url_encode(temp_contactgroup->group_name),html_encode(temp_contactgroup->group_name,FALSE)); 01693 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,html_encode(temp_contactgroup->alias,FALSE)); 01694 01695 /* find all the contact who are members of this contact group... */ 01696 printf("<TD CLASS='%s'>",bg_class); 01697 for(temp_contactsmember=temp_contactgroup->members;temp_contactsmember!=NULL;temp_contactsmember=temp_contactsmember->next){ 01698 01699 if(temp_contactsmember!=temp_contactgroup->members) 01700 printf(", "); 01701 01702 printf("<A HREF='%s?type=contacts&expand=%s'>%s</A>",CONFIG_CGI,url_encode(temp_contactsmember->contact_name),html_encode(temp_contactsmember->contact_name,FALSE)); 01703 } 01704 printf("</TD>\n"); 01705 printf("</TR>\n"); 01706 } 01707 } 01708 01709 if(content_type!=CSV_CONTENT && content_type!=JSON_CONTENT){ 01710 printf("</TABLE>\n"); 01711 printf("</DIV>\n"); 01712 printf("</P>\n"); 01713 }else if(content_type==JSON_CONTENT) 01714 printf("\n]\n"); 01715 01716 return; 01717 } 01718 01719 void display_services(void){ 01720 service *temp_service=NULL; 01721 contactsmember *temp_contactsmember=NULL; 01722 contactgroupsmember *temp_contactgroupsmember=NULL; 01723 char *processed_string=NULL; 01724 char command_line[MAX_INPUT_BUFFER]; 01725 int options; 01726 int odd=0; 01727 char time_string[2][16]; 01728 char *bg_class; 01729 int contact=0; 01730 int json_start=TRUE; 01731 01732 if(content_type==JSON_CONTENT) { 01733 printf("\"services\": [\n"); 01734 }else if(content_type==CSV_CONTENT) { 01735 printf("%sHost%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01736 printf("%sDescription%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01737 printf("%sMax. Check Attempts%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01738 printf("%sNormal Check Interval%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01739 printf("%sRetry Check Interval%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01740 printf("%sCheck Command%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01741 printf("%sCheck Period%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01742 printf("%sParallelize%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01743 printf("%sVolatile%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01744 printf("%sObsess Over%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01745 printf("%sEnable Active Checks%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01746 printf("%sEnable Passive Checks%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01747 printf("%sCheck Freshness%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01748 printf("%sFreshness Threshold%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01749 printf("%sDefault Contacts/Groups%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01750 printf("%sEnable Notifications%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01751 printf("%sNotification Interval%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01752 printf("%sFirst Notification Delay%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01753 printf("%sNotification Options%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01754 printf("%sNotification Period%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01755 printf("%sEvent Handler%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01756 printf("%sEnable Event Handler%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01757 printf("%sStalking Options%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01758 printf("%sEnable Flap Detection%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01759 printf("%sLow Flap Threshold%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01760 printf("%sHigh Flap Threshold%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01761 printf("%sFlap Detection Options%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01762 printf("%sProcess Performance Data%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01763 printf("%sEnable Failure Prediction%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01764 printf("%sFailure Prediction Options%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01765 printf("%sNotes%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01766 printf("%sNotes URL%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01767 printf("%sAction URL%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01768 printf("%sLogo Image%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01769 printf("%sImage Alt%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 01770 printf("%sRetention Options%s",csv_data_enclosure,csv_data_enclosure); 01771 printf("\n"); 01772 } else { 01773 printf("<P><DIV ALIGN=CENTER CLASS='dataTitle'>Service%s%s</DIV></P>\n", 01774 (*to_expand=='\0'?"s":"s Named or on Host "),(*to_expand=='\0'?"":html_encode(to_expand,FALSE))); 01775 01776 printf("<P>\n"); 01777 printf("<DIV ALIGN=CENTER>\n"); 01778 01779 printf("<TABLE BORDER=0 CLASS='data'>\n"); 01780 01781 print_export_link(); 01782 01783 printf("<TR>\n"); 01784 printf("<TH CLASS='data'>Host</TH>\n"); 01785 printf("<TH CLASS='data'>Description</TH>\n"); 01786 printf("<TH CLASS='data'>Max. Check Attempts</TH>\n"); 01787 printf("<TH CLASS='data'>Normal Check Interval</TH>\n"); 01788 printf("<TH CLASS='data'>Retry Check Interval</TH>\n"); 01789 printf("<TH CLASS='data'>Check Command</TH>\n"); 01790 printf("<TH CLASS='data'>Check Period</TH>\n"); 01791 printf("<TH CLASS='data'>Parallelize</TH>\n"); 01792 printf("<TH CLASS='data'>Volatile</TH>\n"); 01793 printf("<TH CLASS='data'>Obsess Over</TH>\n"); 01794 printf("<TH CLASS='data'>Enable Active Checks</TH>\n"); 01795 printf("<TH CLASS='data'>Enable Passive Checks</TH>\n"); 01796 printf("<TH CLASS='data'>Check Freshness</TH>\n"); 01797 printf("<TH CLASS='data'>Freshness Threshold</TH>\n"); 01798 printf("<TH CLASS='data'>Default Contacts/Groups</TH>\n"); 01799 printf("<TH CLASS='data'>Enable Notifications</TH>\n"); 01800 printf("<TH CLASS='data'>Notification Interval</TH>\n"); 01801 printf("<TH CLASS='data'>First Notification Delay</TH>\n"); 01802 printf("<TH CLASS='data'>Notification Options</TH>\n"); 01803 printf("<TH CLASS='data'>Notification Period</TH>\n"); 01804 printf("<TH CLASS='data'>Event Handler</TH>"); 01805 printf("<TH CLASS='data'>Enable Event Handler</TH>"); 01806 printf("<TH CLASS='data'>Stalking Options</TH>\n"); 01807 printf("<TH CLASS='data'>Enable Flap Detection</TH>"); 01808 printf("<TH CLASS='data'>Low Flap Threshold</TH>"); 01809 printf("<TH CLASS='data'>High Flap Threshold</TH>"); 01810 printf("<TH CLASS='data'>Flap Detection Options</TH>"); 01811 printf("<TH CLASS='data'>Process Performance Data</TH>"); 01812 printf("<TH CLASS='data'>Enable Failure Prediction</TH>"); 01813 printf("<TH CLASS='data'>Failure Prediction Options</TH>"); 01814 printf("<TH CLASS='data'>Notes</TH>"); 01815 printf("<TH CLASS='data'>Notes URL</TH>"); 01816 printf("<TH CLASS='data'>Action URL</TH>"); 01817 printf("<TH CLASS='data'>Logo Image</TH>"); 01818 printf("<TH CLASS='data'>Image Alt</TH>"); 01819 printf("<TH CLASS='data'>Retention Options</TH>"); 01820 printf("</TR>\n"); 01821 } 01822 01823 /* check all the services... */ 01824 for(temp_service=service_list;temp_service!=NULL;temp_service=temp_service->next){ 01825 01826 if (((*to_expand)=='\0')||(!strcmp(to_expand,temp_service->host_name))||(!strcmp(to_expand,temp_service->description))){ 01827 01828 /* grab macros */ 01829 grab_service_macros_r(mac, temp_service); 01830 01831 if(odd){ 01832 odd=0; 01833 bg_class="dataOdd"; 01834 }else{ 01835 odd=1; 01836 bg_class="dataEven"; 01837 } 01838 01839 get_interval_time_string(temp_service->check_interval,time_string[0],sizeof(time_string[0])); 01840 get_interval_time_string(temp_service->retry_interval,time_string[1],sizeof(time_string[1])); 01841 strncpy(command_line,temp_service->service_check_command,sizeof(command_line)); 01842 command_line[sizeof(command_line)-1]='\x0'; 01843 01844 /* print list in json format */ 01845 if(content_type==JSON_CONTENT) { 01846 // always add a comma, except for the first line 01847 if (json_start==FALSE) 01848 printf(",\n"); 01849 json_start=FALSE; 01850 printf("{ \"host_name\": \"%s\", ",json_encode(temp_service->host_name)); 01851 printf("\"description\": \"%s\", ",json_encode(temp_service->description)); 01852 printf("\"max_check_attempts\": %d, ",temp_service->max_attempts); 01853 printf("\"normal_check_interval\": \"%s\", ",time_string[0]); 01854 printf("\"retry_check_interval\": \"%s\", ",time_string[1]); 01855 printf("\"check_command\": \"%s\", ",json_encode(command_line)); 01856 if (temp_service->check_period==NULL) 01857 printf("\"check_period\": null, "); 01858 else 01859 printf("\"check_period\": \"%s\", ",json_encode(temp_service->check_period)); 01860 01861 printf("\"parallelize\": %s, ",(temp_service->parallelize==TRUE)?"true":"false"); 01862 printf("\"volatile\": %s, ",(temp_service->is_volatile==TRUE)?"true":"false"); 01863 printf("\"obsess_over\": %s, ",(temp_service->obsess_over_service==TRUE)?"true":"false"); 01864 printf("\"enable_active_checks\": %s, ",(temp_service->checks_enabled==TRUE)?"true":"false"); 01865 printf("\"enable_passive_checks\": %s, ",(temp_service->accept_passive_service_checks==TRUE)?"true":"false"); 01866 printf("\"check_freshness\": %s, ",(temp_service->check_freshness==TRUE)?"true":"false"); 01867 if(temp_service->freshness_threshold==0) 01868 printf("\"freshness_threshold\": \"auto-determined value\", "); 01869 else 01870 printf("\"freshness_threshold\": %d, ",temp_service->freshness_threshold); 01871 01872 printf("\"default_contacts_default_groups\": [ "); 01873 01874 /* print list in csv format */ 01875 }else if(content_type==CSV_CONTENT) { 01876 printf("%s%s%s%s", csv_data_enclosure,temp_service->host_name,csv_data_enclosure,csv_delimiter); 01877 printf("%s%s%s%s", csv_data_enclosure,temp_service->description,csv_data_enclosure,csv_delimiter); 01878 printf("%s%d%s%s", csv_data_enclosure,temp_service->max_attempts,csv_data_enclosure,csv_delimiter); 01879 01880 printf("%s%s%s%s", csv_data_enclosure,time_string[0],csv_data_enclosure,csv_delimiter); 01881 01882 printf("%s%s%s%s", csv_data_enclosure,time_string[1],csv_data_enclosure,csv_delimiter); 01883 01884 printf("%s%s%s%s",csv_data_enclosure,command_line,csv_data_enclosure,csv_delimiter); 01885 01886 printf("%s%s%s%s", csv_data_enclosure,(temp_service->check_period==NULL)?"":temp_service->check_period,csv_data_enclosure,csv_delimiter); 01887 printf("%s%s%s%s", csv_data_enclosure,(temp_service->parallelize==TRUE)?"Yes":"No",csv_data_enclosure,csv_delimiter); 01888 printf("%s%s%s%s", csv_data_enclosure,(temp_service->is_volatile==TRUE)?"Yes":"No",csv_data_enclosure,csv_delimiter); 01889 printf("%s%s%s%s", csv_data_enclosure,(temp_service->obsess_over_service==TRUE)?"Yes":"No",csv_data_enclosure,csv_delimiter); 01890 printf("%s%s%s%s", csv_data_enclosure,(temp_service->checks_enabled==TRUE)?"Yes":"No",csv_data_enclosure,csv_delimiter); 01891 printf("%s%s%s%s", csv_data_enclosure,(temp_service->accept_passive_service_checks==TRUE)?"Yes":"No",csv_data_enclosure,csv_delimiter); 01892 printf("%s%s%s%s", csv_data_enclosure,(temp_service->check_freshness==TRUE)?"Yes":"No",csv_data_enclosure,csv_delimiter); 01893 01894 printf("%s", csv_data_enclosure); 01895 if(temp_service->freshness_threshold==0) 01896 printf("Auto-determined value"); 01897 else 01898 printf("%d",temp_service->freshness_threshold); 01899 01900 printf("%s%s",csv_data_enclosure,csv_delimiter); 01901 01902 printf("%s", csv_data_enclosure); 01903 01904 } else { 01905 01906 printf("<TR CLASS='%s'>\n",bg_class); 01907 01908 printf("<TD CLASS='%s'><A NAME='%s;",bg_class,url_encode(temp_service->host_name)); 01909 printf("%s'></A>",url_encode(temp_service->description)); 01910 printf("<A HREF='%s?type=hosts&expand=%s'>%s</A></TD>\n",CONFIG_CGI,url_encode(temp_service->host_name),html_encode(temp_service->host_name,FALSE)); 01911 01912 /* find a way to show display_name if set once */ 01913 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,html_encode(temp_service->description,FALSE)); 01914 01915 printf("<TD CLASS='%s'>%d</TD>\n",bg_class,temp_service->max_attempts); 01916 01917 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,time_string[0]); 01918 01919 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,time_string[1]); 01920 01921 printf("<TD CLASS='%s'><A HREF='%s?type=command&expand=%s'>%s</A></TD>\n",bg_class,CONFIG_CGI,url_encode(command_line),html_encode(command_line,FALSE)); 01922 01923 printf("<TD CLASS='%s'>",bg_class); 01924 if(temp_service->check_period==NULL) 01925 printf(" "); 01926 else 01927 printf("<A HREF='%s?type=timeperiods&expand=%s'>%s</A>",CONFIG_CGI,url_encode(temp_service->check_period),html_encode(temp_service->check_period,FALSE)); 01928 printf("</TD>\n"); 01929 01930 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_service->parallelize==TRUE)?"Yes":"No"); 01931 01932 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_service->is_volatile!=FALSE)?"Yes":"No"); 01933 01934 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_service->obsess_over_service==TRUE)?"Yes":"No"); 01935 01936 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_service->checks_enabled==TRUE)?"Yes":"No"); 01937 01938 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_service->accept_passive_service_checks==TRUE)?"Yes":"No"); 01939 01940 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_service->check_freshness==TRUE)?"Yes":"No"); 01941 01942 printf("<TD CLASS='%s'>",bg_class); 01943 if(temp_service->freshness_threshold==0) 01944 printf("Auto-determined value"); 01945 else 01946 printf("%d seconds",temp_service->freshness_threshold); 01947 printf("</TD>\n"); 01948 01949 printf("<TD CLASS='%s'>",bg_class); 01950 } 01951 01952 contact=0; 01953 for(temp_contactsmember=temp_service->contacts;temp_contactsmember!=NULL;temp_contactsmember=temp_contactsmember->next){ 01954 contact++; 01955 if(contact>1) 01956 printf(", "); 01957 01958 if(content_type==JSON_CONTENT) 01959 printf("{ \"contact_name\": \"%s\" } ",json_encode(temp_contactsmember->contact_name)); 01960 else if(content_type==CSV_CONTENT) 01961 printf("%s", temp_contactsmember->contact_name); 01962 else 01963 printf("<A HREF='%s?type=contacts&expand=%s'>%s</A>",CONFIG_CGI,url_encode(temp_contactsmember->contact_name),html_encode(temp_contactsmember->contact_name,FALSE)); 01964 } 01965 01966 for(temp_contactgroupsmember=temp_service->contact_groups;temp_contactgroupsmember!=NULL;temp_contactgroupsmember=temp_contactgroupsmember->next){ 01967 contact++; 01968 if(contact>1) 01969 printf(", "); 01970 01971 if(content_type==JSON_CONTENT) 01972 printf("{ \"contactgroup_name\": \"%s\" } ",json_encode(temp_contactgroupsmember->group_name)); 01973 else if(content_type==CSV_CONTENT) 01974 printf("%s", temp_contactgroupsmember->group_name); 01975 else 01976 printf("<A HREF='%s?type=contactgroups&expand=%s'>%s</A>",CONFIG_CGI,url_encode(temp_contactgroupsmember->group_name),html_encode(temp_contactgroupsmember->group_name,FALSE)); 01977 } 01978 if(contact==0) 01979 printf("%s",(content_type==CSV_CONTENT || content_type==JSON_CONTENT)?"":" "); 01980 01981 get_interval_time_string(temp_service->notification_interval,time_string[0],sizeof(time_string[0])); 01982 get_interval_time_string(temp_service->first_notification_delay,time_string[1],sizeof(time_string[1])); 01983 01984 if(content_type==JSON_CONTENT) { 01985 printf("], "); 01986 printf("\"enable_notifications\": %s, ",(temp_service->notifications_enabled==TRUE)?"true":"false"); 01987 printf("\"notification_interval\": \"%s\", ",time_string[0]); 01988 printf("\"first_notification_delay\": \"%s\", ",time_string[1]); 01989 printf("\"notification_options\": [ "); 01990 }else if(content_type==CSV_CONTENT){ 01991 printf("%s%s", csv_data_enclosure,csv_delimiter); 01992 printf("%s%s%s%s", csv_data_enclosure,(temp_service->notifications_enabled==TRUE)?"Yes":"No",csv_data_enclosure,csv_delimiter); 01993 printf("%s%s%s%s", csv_data_enclosure,(temp_service->notification_interval==0)?"No Re-notification":time_string[0],csv_data_enclosure,csv_delimiter); 01994 printf("%s%s%s%s", csv_data_enclosure,time_string[1],csv_data_enclosure,csv_delimiter); 01995 printf("%s", csv_data_enclosure); 01996 } else { 01997 printf("</TD>\n"); 01998 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_service->notifications_enabled==TRUE)?"Yes":"No"); 01999 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_service->notification_interval==0)?"<i>No Re-notification</i>":html_encode(time_string[0],FALSE)); 02000 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,time_string[1]); 02001 printf("<TD CLASS='%s'>",bg_class); 02002 } 02003 02004 options=0; 02005 if(temp_service->notify_on_unknown==TRUE){ 02006 options=1; 02007 printf("%sUnknown%s",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 02008 } 02009 if(temp_service->notify_on_warning==TRUE){ 02010 printf("%s%sWarning%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 02011 options=1; 02012 } 02013 if(temp_service->notify_on_critical==TRUE){ 02014 printf("%s%sCritical%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 02015 options=1; 02016 } 02017 if(temp_service->notify_on_recovery==TRUE){ 02018 printf("%s%sRecovery%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 02019 options=1; 02020 } 02021 if(temp_service->notify_on_flapping==TRUE){ 02022 printf("%s%sFlapping%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 02023 options=1; 02024 } 02025 if(temp_service->notify_on_downtime==TRUE){ 02026 printf("%s%sDowntime%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 02027 options=1; 02028 } 02029 if(options==0 && content_type!=JSON_CONTENT) 02030 printf("None"); 02031 02032 if(content_type==JSON_CONTENT) { 02033 printf(" ], "); 02034 if (temp_service->notification_period==NULL) 02035 printf("\"notification_period\": null, "); 02036 else 02037 printf("\"notification_period\": \"%s\", ",json_encode(temp_service->notification_period)); 02038 02039 if (temp_service->event_handler==NULL) 02040 printf("\"event_handler\": null, "); 02041 else 02042 printf("\"event_handler\": \"%s\", ",json_encode(temp_service->event_handler)); 02043 02044 printf("\"enable_event_handler\": %s, ",(temp_service->event_handler_enabled==TRUE)?"true":"false"); 02045 printf("\"stalking_options\": [ "); 02046 }else if(content_type==CSV_CONTENT) { 02047 printf("%s%s", csv_data_enclosure,csv_delimiter); 02048 printf("%s%s%s%s", csv_data_enclosure,(temp_service->notification_period==NULL)?"":temp_service->notification_period,csv_data_enclosure,csv_delimiter); 02049 printf("%s%s%s%s", csv_data_enclosure,(temp_service->event_handler==NULL)?"":temp_service->event_handler,csv_data_enclosure,csv_delimiter); 02050 printf("%s%s%s%s", csv_data_enclosure,(temp_service->event_handler_enabled==TRUE)?"Yes":"No",csv_data_enclosure,csv_delimiter); 02051 printf("%s", csv_data_enclosure); 02052 }else{ 02053 printf("</TD>\n"); 02054 printf("<TD CLASS='%s'>",bg_class); 02055 if(temp_service->notification_period==NULL) 02056 printf(" "); 02057 else 02058 printf("<A HREF='%s?type=timeperiods&expand=%s'>%s</A>",CONFIG_CGI,url_encode(temp_service->notification_period),html_encode(temp_service->notification_period,FALSE)); 02059 printf("</TD>\n"); 02060 printf("<TD CLASS='%s'>",bg_class); 02061 if(temp_service->event_handler==NULL) 02062 printf(" "); 02063 else 02064 printf("<A HREF='%s?type=command&expand=%s'>%s</A>",CONFIG_CGI,url_encode(temp_service->event_handler),html_encode(temp_service->event_handler,FALSE)); 02065 printf("</TD>\n"); 02066 02067 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_service->event_handler_enabled==TRUE)?"Yes":"No"); 02068 02069 printf("<TD CLASS='%s'>",bg_class); 02070 } 02071 02072 options=0; 02073 if(temp_service->stalk_on_ok==TRUE){ 02074 options=1; 02075 printf("%sOk%s",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 02076 printf("Ok"); 02077 } 02078 if(temp_service->stalk_on_warning==TRUE){ 02079 printf("%s%sWarning%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 02080 options=1; 02081 } 02082 if(temp_service->stalk_on_unknown==TRUE){ 02083 printf("%s%sUnknown%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 02084 options=1; 02085 } 02086 if(temp_service->stalk_on_critical==TRUE){ 02087 printf("%s%sCritical%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 02088 options=1; 02089 } 02090 if(options==0 && content_type!=JSON_CONTENT) 02091 printf("None"); 02092 02093 if(content_type==JSON_CONTENT) { 02094 printf(" ], "); 02095 printf("\"enable_flap_detection\": %s, ",(temp_service->flap_detection_enabled==TRUE)?"true":"false"); 02096 if(temp_service->low_flap_threshold==0.0) 02097 printf("\"low_flap_threshold\": \"Program-wide value\", "); 02098 else 02099 printf("\"low_flap_threshold\": %3.1f%%, ",temp_service->low_flap_threshold); 02100 02101 if(temp_service->high_flap_threshold==0.0) 02102 printf("\"high_flap_threshold\": \"Program-wide value\", "); 02103 else 02104 printf("\"high_flap_threshold\": %3.1f%%, ",temp_service->high_flap_threshold); 02105 02106 printf("\"flap_detection_options\": [ "); 02107 }else if(content_type==CSV_CONTENT) { 02108 printf("%s%s", csv_data_enclosure,csv_delimiter); 02109 02110 printf("%s%s%s%s", csv_data_enclosure,(temp_service->flap_detection_enabled==TRUE)?"Yes":"No",csv_data_enclosure,csv_delimiter); 02111 02112 printf("%s", csv_data_enclosure); 02113 if(temp_service->low_flap_threshold==0.0) 02114 printf("Program-wide value"); 02115 else 02116 printf("%3.1f%%",temp_service->low_flap_threshold); 02117 02118 printf("%s%s", csv_data_enclosure,csv_delimiter); 02119 02120 printf("%s", csv_data_enclosure); 02121 if(temp_service->high_flap_threshold==0.0) 02122 printf("Program-wide value"); 02123 else 02124 printf("%3.1f%%",temp_service->high_flap_threshold); 02125 02126 printf("%s%s", csv_data_enclosure,csv_delimiter); 02127 02128 printf("%s", csv_data_enclosure); 02129 }else{ 02130 printf("</TD>\n"); 02131 02132 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_service->flap_detection_enabled==TRUE)?"Yes":"No"); 02133 02134 printf("<TD CLASS='%s'>",bg_class); 02135 if(temp_service->low_flap_threshold==0.0) 02136 printf("Program-wide value"); 02137 else 02138 printf("%3.1f%%",temp_service->low_flap_threshold); 02139 printf("</TD>\n"); 02140 02141 printf("<TD CLASS='%s'>",bg_class); 02142 if(temp_service->high_flap_threshold==0.0) 02143 printf("Program-wide value"); 02144 else 02145 printf("%3.1f%%",temp_service->high_flap_threshold); 02146 printf("</TD>\n"); 02147 02148 printf("<TD CLASS='%s'>",bg_class); 02149 } 02150 02151 options=0; 02152 if(temp_service->flap_detection_on_ok==TRUE){ 02153 options=1; 02154 printf("%sOk%s",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 02155 } 02156 if(temp_service->flap_detection_on_warning==TRUE){ 02157 printf("%s%sWarning%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 02158 options=1; 02159 } 02160 if(temp_service->flap_detection_on_unknown==TRUE){ 02161 printf("%s%sUnknown%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 02162 options=1; 02163 } 02164 if(temp_service->flap_detection_on_critical==TRUE){ 02165 printf("%s%sCritical%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 02166 options=1; 02167 } 02168 if(options==0 && content_type!=JSON_CONTENT) 02169 printf("None"); 02170 02171 if(content_type==JSON_CONTENT) { 02172 printf(" ], "); 02173 printf("\"process_performance_data\": %s, ",(temp_service->process_performance_data==TRUE)?"true":"false"); 02174 printf("\"enable_failure_prediction\": %s, ",(temp_service->failure_prediction_enabled==TRUE)?"true":"false"); 02175 if (temp_service->failure_prediction_options==NULL) 02176 printf("\"failure_prediction_options\": null, "); 02177 else 02178 printf("\"failure_prediction_options\": \"%s\", ",temp_service->failure_prediction_options); 02179 if (temp_service->notes==NULL) 02180 printf("\"notes\": null, "); 02181 else 02182 printf("\"notes\": \"%s\", ",json_encode(temp_service->notes)); 02183 if (temp_service->notes_url==NULL) 02184 printf("\"notes_url\": null, "); 02185 else 02186 printf("\"notes_url\": \"%s\", ",json_encode(temp_service->notes_url)); 02187 if (temp_service->action_url==NULL) 02188 printf("\"action_url\": null, "); 02189 else 02190 printf("\"action_url\": \"%s\", ",json_encode(temp_service->action_url)); 02191 if (temp_service->icon_image==NULL) 02192 printf("\"icon_image\": null, "); 02193 else { 02194 process_macros(temp_service->icon_image,&processed_string,0); 02195 printf("\"icon_image\": \"%s\", ",json_encode(processed_string)); 02196 free(processed_string); 02197 } 02198 if (temp_service->icon_image_alt==NULL) 02199 printf("\"icon_image_alt\": null, "); 02200 else 02201 printf("\"icon_image_alt\": \"%s\", ",json_encode(temp_service->icon_image_alt)); 02202 printf("\"retention_options\": [ "); 02203 }else if(content_type==CSV_CONTENT) { 02204 printf("%s%s", csv_data_enclosure,csv_delimiter); 02205 02206 printf("%s%s%s%s", csv_data_enclosure,(temp_service->process_performance_data==TRUE)?"Yes":"No",csv_data_enclosure,csv_delimiter); 02207 02208 printf("%s%s%s%s", csv_data_enclosure,(temp_service->failure_prediction_enabled==TRUE)?"Yes":"No",csv_data_enclosure,csv_delimiter); 02209 02210 printf("%s%s%s%s", csv_data_enclosure,(temp_service->failure_prediction_options==NULL)?"":temp_service->failure_prediction_options,csv_data_enclosure,csv_delimiter); 02211 02212 printf("%s%s%s%s", csv_data_enclosure,(temp_service->notes==NULL)?"":temp_service->notes,csv_data_enclosure,csv_delimiter); 02213 printf("%s%s%s%s", csv_data_enclosure,(temp_service->notes_url==NULL)?"":temp_service->notes_url,csv_data_enclosure,csv_delimiter); 02214 printf("%s%s%s%s", csv_data_enclosure,(temp_service->action_url==NULL)?"":temp_service->action_url,csv_data_enclosure,csv_delimiter); 02215 02216 printf("%s", csv_data_enclosure); 02217 if(temp_service->icon_image!=NULL){ 02218 process_macros(temp_service->icon_image,&processed_string,0); 02219 printf("%s", processed_string); 02220 free(processed_string); 02221 } 02222 printf("%s%s", csv_data_enclosure,csv_delimiter); 02223 02224 printf("%s%s%s%s", csv_data_enclosure,(temp_service->icon_image_alt==NULL)?"":temp_service->icon_image_alt,csv_data_enclosure,csv_delimiter); 02225 02226 printf("%s", csv_data_enclosure); 02227 }else{ 02228 printf("</TD>\n"); 02229 02230 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_service->process_performance_data==TRUE)?"Yes":"No"); 02231 02232 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_service->failure_prediction_enabled==TRUE)?"Yes":"No"); 02233 02234 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_service->failure_prediction_options==NULL)?" ":html_encode(temp_service->failure_prediction_options,FALSE)); 02235 02236 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_service->notes==NULL)?" ":html_encode(temp_service->notes,FALSE)); 02237 02238 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_service->notes_url==NULL)?" ":html_encode(temp_service->notes_url,FALSE)); 02239 02240 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_service->action_url==NULL)?" ":html_encode(temp_service->action_url,FALSE)); 02241 02242 if(temp_service->icon_image==NULL) 02243 printf("<TD CLASS='%s'> </TD>\n",bg_class); 02244 else{ 02245 process_macros(temp_service->icon_image,&processed_string,0); 02246 printf("<TD CLASS='%s' valign='center'><img src='%s%s' border='0' width='20' height='20'> %s</TD>\n",bg_class,url_logo_images_path,processed_string,html_encode(temp_service->icon_image,FALSE)); 02247 free(processed_string); 02248 } 02249 02250 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_service->icon_image_alt==NULL)?" ":html_encode(temp_service->icon_image_alt,FALSE)); 02251 02252 printf("<TD CLASS='%s'>",bg_class); 02253 } 02254 02255 options=0; 02256 if(temp_service->retain_status_information==TRUE){ 02257 options=1; 02258 printf("%sStatus Information%s",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 02259 } 02260 if(temp_service->retain_nonstatus_information==TRUE){ 02261 printf("%s%sNon-Status Information%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 02262 options=1; 02263 } 02264 if(options==0 && content_type!=JSON_CONTENT) 02265 printf("None"); 02266 02267 if(content_type==JSON_CONTENT) { 02268 printf(" ] }"); 02269 }else if(content_type==CSV_CONTENT){ 02270 printf("%s\n",csv_data_enclosure); 02271 }else{ 02272 printf("</TD>\n"); 02273 printf("</TR>\n"); 02274 } 02275 } 02276 } 02277 02278 if(content_type!=CSV_CONTENT && content_type!=JSON_CONTENT){ 02279 printf("</TABLE>\n"); 02280 printf("</DIV>\n"); 02281 printf("</P>\n"); 02282 }else if(content_type==JSON_CONTENT) 02283 printf("\n]\n"); 02284 02285 return; 02286 } 02287 02288 void display_timeperiods(void){ 02289 timerange *temp_timerange=NULL; 02290 daterange *temp_daterange=NULL; 02291 timeperiod *temp_timeperiod=NULL; 02292 timeperiodexclusion *temp_timeperiodexclusion=NULL; 02293 char *months[12]={"january","february","march","april","may","june","july","august","september","october","november","december"}; 02294 char *days[7]={"sunday","monday","tuesday","wednesday","thursday","friday","saturday"}; 02295 int odd=0; 02296 int day=0; 02297 int x=0; 02298 char *bg_class=""; 02299 char timestring[10]; 02300 int hours=0; 02301 int minutes=0; 02302 int seconds=0; 02303 int line=0; 02304 int json_start=TRUE; 02305 02306 if(content_type==JSON_CONTENT) { 02307 printf("\"timeperiods\": [\n"); 02308 }else if(content_type==CSV_CONTENT) { 02309 printf("%sName%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 02310 printf("%sAlias/Description%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 02311 printf("%sExclusions%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 02312 printf("%sDays/Dates%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 02313 printf("%sTimes%s",csv_data_enclosure,csv_data_enclosure); 02314 printf("\n"); 02315 } else { 02316 printf("<P><DIV ALIGN=CENTER CLASS='dataTitle'>Time Period%s%s</DIV></P>\n", 02317 (*to_expand=='\0'?"s":" "),(*to_expand=='\0'?"":html_encode(to_expand,FALSE))); 02318 02319 printf("<P>\n"); 02320 printf("<DIV ALIGN=CENTER>\n"); 02321 02322 printf("<TABLE BORDER=0 CLASS='data'>\n"); 02323 02324 print_export_link(); 02325 02326 printf("<TR>\n"); 02327 printf("<TH CLASS='data'>Name</TH>\n"); 02328 printf("<TH CLASS='data'>Alias/Description</TH>\n"); 02329 printf("<TH CLASS='data'>Exclusions</TH>\n"); 02330 printf("<TH CLASS='data'>Days/Dates</TH>\n"); 02331 printf("<TH CLASS='data'>Times</TH>\n"); 02332 printf("</TR>\n"); 02333 } 02334 02335 /* check all the time periods... */ 02336 for(temp_timeperiod=timeperiod_list;temp_timeperiod!=NULL;temp_timeperiod=temp_timeperiod->next) if (((*to_expand)=='\0')||(!strcmp(to_expand,temp_timeperiod->name))){ 02337 02338 if(odd){ 02339 odd=0; 02340 bg_class="dataOdd"; 02341 }else{ 02342 odd=1; 02343 bg_class="dataEven"; 02344 } 02345 02346 /* print list in json format */ 02347 if(content_type==JSON_CONTENT) { 02348 // always add a comma, except for the first line 02349 if (json_start==FALSE) 02350 printf(",\n"); 02351 json_start=FALSE; 02352 02353 printf("{ \"timeperiod_name\": \"%s\", ",json_encode(temp_timeperiod->name)); 02354 printf("\"alias\": \"%s\", ",json_encode(temp_timeperiod->alias)); 02355 printf("\"exclusions\": [ "); 02356 /* print list in csv format */ 02357 }else if(content_type==CSV_CONTENT) { 02358 printf("%s%s%s%s",csv_data_enclosure,temp_timeperiod->name,csv_data_enclosure,csv_delimiter); 02359 printf("%s%s%s%s",csv_data_enclosure,temp_timeperiod->alias,csv_data_enclosure,csv_delimiter); 02360 printf("%s",csv_data_enclosure); 02361 }else{ 02362 printf("<TR CLASS='%s'>\n",bg_class); 02363 02364 printf("<TD CLASS='%s'><A NAME='%s'>%s</A></TD>\n",bg_class,url_encode(temp_timeperiod->name),html_encode(temp_timeperiod->name,FALSE)); 02365 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,html_encode(temp_timeperiod->alias,FALSE)); 02366 02367 printf("<TD CLASS='%s'>",bg_class); 02368 } 02369 02370 for(temp_timeperiodexclusion=temp_timeperiod->exclusions;temp_timeperiodexclusion!=NULL;temp_timeperiodexclusion=temp_timeperiodexclusion->next){ 02371 if (temp_timeperiodexclusion!=temp_timeperiod->exclusions) 02372 printf(", "); 02373 02374 if(content_type==JSON_CONTENT) 02375 printf("\"%s\"",temp_timeperiodexclusion->timeperiod_name); 02376 else if(content_type==CSV_CONTENT) 02377 printf("%s",temp_timeperiodexclusion->timeperiod_name); 02378 else 02379 printf("<A HREF='#%s'>%s</A>",url_encode(temp_timeperiodexclusion->timeperiod_name),html_encode(temp_timeperiodexclusion->timeperiod_name,FALSE)); 02380 } 02381 02382 if(content_type==JSON_CONTENT) { 02383 printf(" ], "); 02384 printf("\"days_times\": [ "); 02385 }else if(content_type==CSV_CONTENT){ 02386 printf("%s%s",csv_data_enclosure,csv_delimiter); 02387 printf("%s",csv_data_enclosure); 02388 }else{ 02389 printf("</TD>\n"); 02390 printf("<TD CLASS='%s'>",bg_class); 02391 } 02392 02393 line=0; 02394 for(x=0;x<DATERANGE_TYPES;x++){ 02395 for(temp_daterange=temp_timeperiod->exceptions[x];temp_daterange!=NULL;temp_daterange=temp_daterange->next){ 02396 02397 line++; 02398 02399 if(line>1) { 02400 if(content_type==JSON_CONTENT) { 02401 printf(", { \"days_date\": \""); 02402 }else if(content_type==CSV_CONTENT){ 02403 printf("%s%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 02404 printf("%s%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 02405 printf("%s%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 02406 printf("%s",csv_data_enclosure); 02407 } else 02408 printf("<TR><TD COLSPAN='3'></TD>\n<TD CLASS='%s'>",bg_class); 02409 } else { 02410 if(content_type==JSON_CONTENT) 02411 printf("{ \"days_date\": \""); 02412 } 02413 02414 switch(temp_daterange->type){ 02415 case DATERANGE_CALENDAR_DATE: 02416 printf("%d-%02d-%02d",temp_daterange->syear,temp_daterange->smon+1,temp_daterange->smday); 02417 if((temp_daterange->smday!=temp_daterange->emday) || (temp_daterange->smon!=temp_daterange->emon) || (temp_daterange->syear!=temp_daterange->eyear)) 02418 printf(" - %d-%02d-%02d",temp_daterange->eyear,temp_daterange->emon+1,temp_daterange->emday); 02419 if(temp_daterange->skip_interval>1) 02420 printf(" / %d",temp_daterange->skip_interval); 02421 break; 02422 case DATERANGE_MONTH_DATE: 02423 printf("%s %d",months[temp_daterange->smon],temp_daterange->smday); 02424 if((temp_daterange->smon!=temp_daterange->emon) || (temp_daterange->smday!=temp_daterange->emday)){ 02425 printf(" - %s %d",months[temp_daterange->emon],temp_daterange->emday); 02426 if(temp_daterange->skip_interval>1) 02427 printf(" / %d",temp_daterange->skip_interval); 02428 } 02429 break; 02430 case DATERANGE_MONTH_DAY: 02431 printf("day %d",temp_daterange->smday); 02432 if(temp_daterange->smday!=temp_daterange->emday){ 02433 printf(" - %d",temp_daterange->emday); 02434 if(temp_daterange->skip_interval>1) 02435 printf(" / %d",temp_daterange->skip_interval); 02436 } 02437 break; 02438 case DATERANGE_MONTH_WEEK_DAY: 02439 printf("%s %d %s",days[temp_daterange->swday],temp_daterange->swday_offset,months[temp_daterange->smon]); 02440 if((temp_daterange->smon!=temp_daterange->emon) || (temp_daterange->swday!=temp_daterange->ewday) || (temp_daterange->swday_offset!=temp_daterange->ewday_offset)){ 02441 printf(" - %s %d %s",days[temp_daterange->ewday],temp_daterange->ewday_offset,months[temp_daterange->emon]); 02442 if(temp_daterange->skip_interval>1) 02443 printf(" / %d",temp_daterange->skip_interval); 02444 } 02445 break; 02446 case DATERANGE_WEEK_DAY: 02447 printf("%s %d",days[temp_daterange->swday],temp_daterange->swday_offset); 02448 if((temp_daterange->swday!=temp_daterange->ewday) || (temp_daterange->swday_offset!=temp_daterange->ewday_offset)){ 02449 printf(" - %s %d",days[temp_daterange->ewday],temp_daterange->ewday_offset); 02450 if(temp_daterange->skip_interval>1) 02451 printf(" / %d",temp_daterange->skip_interval); 02452 } 02453 break; 02454 default: 02455 break; 02456 } 02457 02458 if(content_type==JSON_CONTENT) 02459 printf("\", \"time\": [ "); 02460 else if(content_type==CSV_CONTENT){ 02461 printf("%s%s",csv_data_enclosure,csv_delimiter); 02462 printf("%s",csv_data_enclosure); 02463 }else 02464 printf("</TD>\n<TD CLASS='%s'>",bg_class); 02465 02466 for(temp_timerange=temp_daterange->times;temp_timerange!=NULL;temp_timerange=temp_timerange->next){ 02467 02468 if(temp_timerange!=temp_daterange->times) 02469 printf(", "); 02470 02471 hours=temp_timerange->range_start/3600; 02472 minutes=(temp_timerange->range_start-(hours*3600))/60; 02473 seconds=temp_timerange->range_start-(hours*3600)-(minutes*60); 02474 snprintf(timestring,sizeof(timestring)-1,"%02d:%02d:%02d",hours,minutes,seconds); 02475 timestring[sizeof(timestring)-1]='\x0'; 02476 printf("%s%s - ",(content_type==JSON_CONTENT)?"\"":"",timestring); 02477 02478 hours=temp_timerange->range_end/3600; 02479 minutes=(temp_timerange->range_end-(hours*3600))/60; 02480 seconds=temp_timerange->range_end-(hours*3600)-(minutes*60); 02481 snprintf(timestring,sizeof(timestring)-1,"%02d:%02d:%02d",hours,minutes,seconds); 02482 timestring[sizeof(timestring)-1]='\x0'; 02483 printf("%s%s",timestring,(content_type==JSON_CONTENT)?"\"":""); 02484 } 02485 02486 if(content_type==JSON_CONTENT) 02487 printf(" ] }"); 02488 else if(content_type==CSV_CONTENT) 02489 printf("%s\n",csv_data_enclosure); 02490 else{ 02491 printf("</TD>\n"); 02492 printf("</TR>\n"); 02493 } 02494 } 02495 } 02496 for(day=0;day<7;day++){ 02497 02498 if(temp_timeperiod->days[day]==NULL) 02499 continue; 02500 02501 line++; 02502 02503 if(line>1) { 02504 if(content_type==JSON_CONTENT) 02505 printf(", { \"days_date\": \"%s\", \"time\": [ ",days[day]); 02506 else if(content_type==CSV_CONTENT){ 02507 printf("%s%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 02508 printf("%s%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 02509 printf("%s%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 02510 printf("%s%s%s%s",csv_data_enclosure,days[day],csv_data_enclosure,csv_delimiter); 02511 printf("%s",csv_data_enclosure); 02512 } else 02513 printf("<TR><TD COLSPAN='3'></TD>\n<TD CLASS='%s'>",bg_class); 02514 } else { 02515 if(content_type==JSON_CONTENT) 02516 printf("{ \"days_date\": \"%s\", \"time\": [ ",days[day]); 02517 else if(content_type==CSV_CONTENT){ 02518 printf("%s%s%s",days[day],csv_data_enclosure,csv_delimiter); 02519 printf("%s",csv_data_enclosure); 02520 }else 02521 printf("%s</TD>\n<TD CLASS='%s'>",days[day],bg_class); 02522 } 02523 02524 02525 for(temp_timerange=temp_timeperiod->days[day];temp_timerange!=NULL;temp_timerange=temp_timerange->next){ 02526 02527 if(temp_timerange!=temp_timeperiod->days[day]) 02528 printf(", "); 02529 02530 hours=temp_timerange->range_start/3600; 02531 minutes=(temp_timerange->range_start-(hours*3600))/60; 02532 seconds=temp_timerange->range_start-(hours*3600)-(minutes*60); 02533 snprintf(timestring,sizeof(timestring)-1,"%02d:%02d:%02d",hours,minutes,seconds); 02534 timestring[sizeof(timestring)-1]='\x0'; 02535 printf("%s%s - ",(content_type==JSON_CONTENT)?"\"":"",timestring); 02536 02537 hours=temp_timerange->range_end/3600; 02538 minutes=(temp_timerange->range_end-(hours*3600))/60; 02539 seconds=temp_timerange->range_end-(hours*3600)-(minutes*60); 02540 snprintf(timestring,sizeof(timestring)-1,"%02d:%02d:%02d",hours,minutes,seconds); 02541 timestring[sizeof(timestring)-1]='\x0'; 02542 printf("%s%s",timestring,(content_type==JSON_CONTENT)?"\"":""); 02543 } 02544 02545 if(content_type==JSON_CONTENT) 02546 printf(" ] }"); 02547 else if(content_type==CSV_CONTENT) 02548 printf("%s\n",csv_data_enclosure); 02549 else{ 02550 printf("</TD>\n"); 02551 printf("</TR>\n"); 02552 } 02553 } 02554 02555 if(content_type==JSON_CONTENT) 02556 printf(" ] }\n"); 02557 02558 if(line==0 && content_type!=JSON_CONTENT){ 02559 02560 if(content_type==CSV_CONTENT) { 02561 printf("%s%s",csv_data_enclosure,csv_delimiter); 02562 printf("%s%s\n",csv_data_enclosure,csv_data_enclosure); 02563 }else{ 02564 printf("</TD>\n<TD></TD>\n"); 02565 printf("</TR>\n"); 02566 } 02567 } 02568 } 02569 02570 if(content_type!=CSV_CONTENT && content_type!=JSON_CONTENT){ 02571 printf("</TABLE>\n"); 02572 printf("</DIV>\n"); 02573 printf("</P>\n"); 02574 }else if(content_type==JSON_CONTENT) 02575 printf("\n]\n"); 02576 02577 return; 02578 } 02579 02580 void display_commands(void){ 02581 command *temp_command; 02582 int odd=0; 02583 char *bg_class=""; 02584 int json_start=TRUE; 02585 02586 if(content_type==JSON_CONTENT) { 02587 printf("\"commands\": [\n"); 02588 }else if(content_type==CSV_CONTENT) { 02589 printf("%sCommand Name%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 02590 printf("%sCommand Line%s",csv_data_enclosure,csv_data_enclosure); 02591 printf("\n"); 02592 } else { 02593 printf("<P><DIV ALIGN=CENTER CLASS='dataTitle'>Command%s%s</DIV></P>\n", 02594 (*to_expand=='\0'?"s":" "),(*to_expand=='\0'?"":html_encode(to_expand,FALSE))); 02595 02596 printf("<P><DIV ALIGN=CENTER>\n"); 02597 printf("<TABLE BORDER=0 CLASS='data'>\n"); 02598 02599 print_export_link(); 02600 02601 printf("<TR><TH CLASS='data'>Command Name</TH><TH CLASS='data'>Command Line</TH></TR>\n"); 02602 } 02603 02604 /* check all commands */ 02605 for(temp_command=command_list;temp_command!=NULL;temp_command=temp_command->next) if (((*to_expand)=='\0')||(!strcmp(to_expand,temp_command->name))){ 02606 02607 if(odd){ 02608 odd=0; 02609 bg_class="dataEven"; 02610 }else{ 02611 odd=1; 02612 bg_class="dataOdd"; 02613 } 02614 02615 /* print list in json format */ 02616 if(content_type==JSON_CONTENT) { 02617 // always add a comma, except for the first line 02618 if (json_start==FALSE) 02619 printf(",\n"); 02620 json_start=FALSE; 02621 02622 printf("{ \"command_name\": \"%s\", ",json_encode(temp_command->name)); 02623 printf("\"command_line\": \"%s\" }",json_encode(temp_command->command_line)); 02624 /* print list in csv format */ 02625 }else if(content_type==CSV_CONTENT) { 02626 printf("%s%s%s%s",csv_data_enclosure,temp_command->name,csv_data_enclosure,csv_delimiter); 02627 printf("%s%s%s\n",csv_data_enclosure,temp_command->command_line,csv_data_enclosure); 02628 }else{ 02629 printf("<TR CLASS='%s'>\n",bg_class); 02630 02631 printf("<TD CLASS='%s'><A NAME='%s'></A>%s</TD>\n",bg_class,url_encode(temp_command->name),html_encode(temp_command->name,FALSE)); 02632 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,html_encode(temp_command->command_line,FALSE)); 02633 02634 printf("</TR>\n"); 02635 } 02636 } 02637 02638 if(content_type!=CSV_CONTENT && content_type!=JSON_CONTENT){ 02639 printf("</TABLE>\n"); 02640 printf("</DIV>\n"); 02641 printf("</P>\n"); 02642 }else if(content_type==JSON_CONTENT) 02643 printf("\n]\n"); 02644 02645 return; 02646 } 02647 02648 void display_servicedependencies(void){ 02649 servicedependency *temp_sd; 02650 int odd=0; 02651 int options; 02652 char *bg_class=""; 02653 int json_start=TRUE; 02654 02655 if(content_type==JSON_CONTENT) { 02656 printf("\"servicedependencies\": [\n"); 02657 }else if(content_type==CSV_CONTENT) { 02658 printf("%sDependent Host%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 02659 printf("%sDependent Service%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 02660 printf("%sMaster Host%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 02661 printf("%sMaster Service%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 02662 printf("%sDependency Type%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 02663 printf("%sDependency Period%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 02664 printf("%sDependency Failure Options%s\n",csv_data_enclosure,csv_data_enclosure); 02665 } else { 02666 printf("<P><DIV ALIGN=CENTER CLASS='dataTitle'>Service Dependencie%s%s</DIV></P>\n", 02667 (*to_expand=='\0'?"s":"s Involving Host "),(*to_expand=='\0'?"":html_encode(to_expand,FALSE))); 02668 02669 printf("<P>\n"); 02670 printf("<DIV ALIGN=CENTER>\n"); 02671 02672 printf("<TABLE BORDER=0 CLASS='data'>\n"); 02673 02674 print_export_link(); 02675 02676 printf("<TR>\n"); 02677 printf("<TH CLASS='data' COLSPAN=2>Dependent Service</TH>"); 02678 printf("<TH CLASS='data' COLSPAN=2>Master Service</TH>"); 02679 printf("</TR>\n"); 02680 printf("<TR>\n"); 02681 printf("<TH CLASS='data'>Host</TH>"); 02682 printf("<TH CLASS='data'>Service</TH>"); 02683 printf("<TH CLASS='data'>Host</TH>"); 02684 printf("<TH CLASS='data'>Service</TH>"); 02685 printf("<TH CLASS='data'>Dependency Type</TH>"); 02686 printf("<TH CLASS='data'>Dependency Period</TH>"); 02687 printf("<TH CLASS='data'>Dependency Failure Options</TH>"); 02688 printf("</TR>\n"); 02689 } 02690 02691 /* check all the service dependencies... */ 02692 for(temp_sd=servicedependency_list;temp_sd!=NULL;temp_sd=temp_sd->next) 02693 if (((*to_expand)=='\0')||(!strcmp(to_expand,temp_sd->dependent_host_name))||(!strcmp(to_expand,temp_sd->host_name))){ 02694 02695 if(odd){ 02696 odd=0; 02697 bg_class="dataOdd"; 02698 }else{ 02699 odd=1; 02700 bg_class="dataEven"; 02701 } 02702 02703 /* print list in json format */ 02704 if(content_type==JSON_CONTENT) { 02705 // always add a comma, except for the first line 02706 if (json_start==FALSE) 02707 printf(",\n"); 02708 json_start=FALSE; 02709 02710 printf("{ \"dependent_host_name\": \"%s\", ",json_encode(temp_sd->dependent_host_name)); 02711 printf("\"dependent_service_description\": \"%s\", ",json_encode(temp_sd->dependent_service_description)); 02712 printf("\"master_host_name\": \"%s\", ",json_encode(temp_sd->host_name)); 02713 printf("\"master_service_description\": \"%s\", ",json_encode(temp_sd->service_description)); 02714 printf("\"dependency_type\": \"%s\", ",(temp_sd->dependency_type==NOTIFICATION_DEPENDENCY)?"Notification":"Check Execution"); 02715 02716 if (temp_sd->dependency_period==NULL) 02717 printf("\"dependency_period\": null, "); 02718 else 02719 printf("\"dependency_period\": \"%s\", ",json_encode(temp_sd->dependency_period)); 02720 02721 printf("\"dependency_failure_options\": ["); 02722 /* print list in csv format */ 02723 }else if(content_type==CSV_CONTENT) { 02724 printf("%s%s%s%s",csv_data_enclosure,temp_sd->dependent_host_name,csv_data_enclosure,csv_delimiter); 02725 printf("%s%s%s%s",csv_data_enclosure,temp_sd->dependent_service_description,csv_data_enclosure,csv_delimiter); 02726 printf("%s%s%s%s",csv_data_enclosure,temp_sd->host_name,csv_data_enclosure,csv_delimiter); 02727 printf("%s%s%s%s",csv_data_enclosure,temp_sd->service_description,csv_data_enclosure,csv_delimiter); 02728 printf("%s%s%s%s",csv_data_enclosure,(temp_sd->dependency_type==NOTIFICATION_DEPENDENCY)?"Notification":"Check Execution",csv_data_enclosure,csv_delimiter); 02729 printf("%s%s%s%s",csv_data_enclosure,(temp_sd->dependency_period==NULL)?"":temp_sd->dependency_period,csv_data_enclosure,csv_delimiter); 02730 printf("%s",csv_data_enclosure); 02731 }else{ 02732 printf("<TR CLASS='%s'>\n",bg_class); 02733 02734 printf("<TD CLASS='%s'><A HREF='%s?type=hosts&expand=%s'>%s</A></TD>\n",bg_class,CONFIG_CGI,url_encode(temp_sd->dependent_host_name),html_encode(temp_sd->dependent_host_name,FALSE)); 02735 02736 printf("<TD CLASS='%s'><A HREF='%s?type=services&expand=%s#%s;",bg_class,CONFIG_CGI,url_encode(temp_sd->dependent_host_name),url_encode(temp_sd->dependent_host_name)); 02737 printf("%s'>%s</A></TD>\n",url_encode(temp_sd->dependent_service_description),html_encode(temp_sd->dependent_service_description,FALSE)); 02738 02739 printf("<TD CLASS='%s'><A HREF='%s?type=hosts&expand=%s'>%s</A></TD>\n",bg_class,CONFIG_CGI,url_encode(temp_sd->host_name),html_encode(temp_sd->host_name,FALSE)); 02740 02741 printf("<TD CLASS='%s'><A HREF='%s?type=services&expand=%s#%s;",bg_class,CONFIG_CGI,url_encode(temp_sd->host_name),url_encode(temp_sd->host_name)); 02742 printf("%s'>%s</A></TD>\n",url_encode(temp_sd->service_description),html_encode(temp_sd->service_description,FALSE)); 02743 02744 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_sd->dependency_type==NOTIFICATION_DEPENDENCY)?"Notification":"Check Execution"); 02745 02746 printf("<TD CLASS='%s'>",bg_class); 02747 if(temp_sd->dependency_period==NULL) 02748 printf(" "); 02749 else 02750 printf("<A HREF='%s?type=timeperiods&expand=%s'>%s</A>",CONFIG_CGI,url_encode(temp_sd->dependency_period),html_encode(temp_sd->dependency_period,FALSE)); 02751 printf("</TD>\n"); 02752 02753 printf("<TD CLASS='%s'>",bg_class); 02754 } 02755 02756 options=0; 02757 if(temp_sd->fail_on_ok==TRUE){ 02758 printf("%sOk%s",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 02759 options=1; 02760 } 02761 if(temp_sd->fail_on_warning==TRUE){ 02762 printf("%s%sWarning%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 02763 options=1; 02764 } 02765 if(temp_sd->fail_on_unknown==TRUE){ 02766 printf("%s%sUnknown%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 02767 options=1; 02768 } 02769 if(temp_sd->fail_on_critical==TRUE){ 02770 printf("%s%sCritical%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 02771 options=1; 02772 } 02773 if(temp_sd->fail_on_pending==TRUE){ 02774 printf("%s%sPending%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 02775 options=1; 02776 } 02777 if(options==0 && content_type!=JSON_CONTENT) 02778 printf("None"); 02779 02780 if(content_type==JSON_CONTENT) 02781 printf(" ] }"); 02782 else if(content_type==CSV_CONTENT) 02783 printf("%s\n",csv_data_enclosure); 02784 else 02785 printf("</TD>\n</TR>\n"); 02786 } 02787 02788 if(content_type!=CSV_CONTENT && content_type!=JSON_CONTENT){ 02789 printf("</TABLE>\n"); 02790 printf("</DIV>\n"); 02791 printf("</P>\n"); 02792 }else if(content_type==JSON_CONTENT) 02793 printf("\n]\n"); 02794 02795 return; 02796 } 02797 02798 void display_serviceescalations(void){ 02799 serviceescalation *temp_se=NULL; 02800 contactsmember *temp_contactsmember=NULL; 02801 contactgroupsmember *temp_contactgroupsmember=NULL; 02802 char time_string[16]=""; 02803 int options=FALSE; 02804 int odd=0; 02805 char *bg_class=""; 02806 int contact=0; 02807 int json_start=TRUE; 02808 02809 if(content_type==JSON_CONTENT) { 02810 printf("\"serviceescalations\": [\n"); 02811 }else if(content_type==CSV_CONTENT) { 02812 printf("%sHost%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 02813 printf("%sDescription%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 02814 printf("%sContacts/Groups%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 02815 printf("%sFirst Notification%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 02816 printf("%sLast Notification%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 02817 printf("%sNotification Interval%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 02818 printf("%sEscalation Period%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 02819 printf("%sEscalation Options%s\n",csv_data_enclosure,csv_data_enclosure); 02820 } else { 02821 printf("<P><DIV ALIGN=CENTER CLASS='dataTitle'>Service Escalation%s%s</DIV></P>\n", 02822 (*to_expand=='\0'?"s":"s on Host "),(*to_expand=='\0'?"":html_encode(to_expand,FALSE))); 02823 02824 printf("<P>\n"); 02825 printf("<DIV ALIGN=CENTER>\n"); 02826 02827 printf("<TABLE BORDER=0 CLASS='data'>\n"); 02828 02829 print_export_link(); 02830 02831 printf("<TR>\n"); 02832 printf("<TH CLASS='data'>Host</TH>"); 02833 printf("<TH CLASS='data'>Description</TH>"); 02834 printf("<TH CLASS='data'>Contacts/Groups</TH>"); 02835 printf("<TH CLASS='data'>First Notification</TH>"); 02836 printf("<TH CLASS='data'>Last Notification</TH>"); 02837 printf("<TH CLASS='data'>Notification Interval</TH>"); 02838 printf("<TH CLASS='data'>Escalation Period</TH>"); 02839 printf("<TH CLASS='data'>Escalation Options</TH>"); 02840 printf("</TR>\n"); 02841 } 02842 02843 /* check all the service escalations... */ 02844 for(temp_se=serviceescalation_list;temp_se!=NULL;temp_se=temp_se->next) if (((*to_expand)=='\0')||(!strcmp(to_expand,temp_se->host_name))){ 02845 02846 if(odd){ 02847 odd=0; 02848 bg_class="dataOdd"; 02849 }else{ 02850 odd=1; 02851 bg_class="dataEven"; 02852 } 02853 02854 /* print list in json format */ 02855 if(content_type==JSON_CONTENT) { 02856 // always add a comma, except for the first line 02857 if (json_start==FALSE) 02858 printf(",\n"); 02859 json_start=FALSE; 02860 02861 printf("{ \"host_name\": \"%s\", ",json_encode(temp_se->host_name)); 02862 printf("\"service_description\": \"%s\", ",json_encode(temp_se->description)); 02863 printf("\"contacts_contactgroups\": ["); 02864 /* print list in csv format */ 02865 }else if(content_type==CSV_CONTENT) { 02866 printf("%s%s%s%s",csv_data_enclosure,temp_se->host_name,csv_data_enclosure,csv_delimiter); 02867 printf("%s%s%s%s",csv_data_enclosure,temp_se->description,csv_data_enclosure,csv_delimiter); 02868 printf("%s",csv_data_enclosure); 02869 }else{ 02870 printf("<TR CLASS='%s'>\n",bg_class); 02871 02872 printf("<TD CLASS='%s'><A HREF='%s?type=hosts&expand=%s'>%s</A></TD>\n",bg_class,CONFIG_CGI,url_encode(temp_se->host_name),html_encode(temp_se->host_name,FALSE)); 02873 02874 printf("<TD CLASS='%s'><A HREF='%s?type=services&expand=%s#%s;",bg_class,CONFIG_CGI,url_encode(temp_se->host_name),url_encode(temp_se->host_name)); 02875 printf("%s'>%s</A></TD>\n",url_encode(temp_se->description),html_encode(temp_se->description,FALSE)); 02876 02877 printf("<TD CLASS='%s'>",bg_class); 02878 } 02879 02880 contact=0; 02881 for(temp_contactsmember=temp_se->contacts;temp_contactsmember!=NULL;temp_contactsmember=temp_contactsmember->next){ 02882 contact++; 02883 if(contact>1) 02884 printf(", "); 02885 02886 if(content_type==JSON_CONTENT) 02887 printf("{ \"contact_name\": \"%s\" } ",json_encode(temp_contactsmember->contact_name)); 02888 else if(content_type==CSV_CONTENT) 02889 printf("%s",temp_contactsmember->contact_name); 02890 else 02891 printf("<A HREF='%s?type=contacts&expand=%s'>%s</A>\n",CONFIG_CGI,url_encode(temp_contactsmember->contact_name),html_encode(temp_contactsmember->contact_name,FALSE)); 02892 } 02893 for(temp_contactgroupsmember=temp_se->contact_groups;temp_contactgroupsmember!=NULL;temp_contactgroupsmember=temp_contactgroupsmember->next){ 02894 contact++; 02895 if(contact>1) 02896 printf(", "); 02897 02898 if(content_type==JSON_CONTENT) 02899 printf("{ \"contactgroup_name\": \"%s\" } ",json_encode(temp_contactgroupsmember->group_name)); 02900 else if(content_type==CSV_CONTENT) 02901 printf("%s",temp_contactgroupsmember->group_name); 02902 else 02903 printf("<A HREF='%s?type=contactgroups&expand=%s'>%s</A>\n",CONFIG_CGI,url_encode(temp_contactgroupsmember->group_name),html_encode(temp_contactgroupsmember->group_name,FALSE)); 02904 } 02905 if(contact==0) 02906 printf("%s",(content_type==CSV_CONTENT || content_type==JSON_CONTENT)?"":" "); 02907 02908 if(content_type==JSON_CONTENT) { 02909 printf(" ], "); 02910 printf("\"first_notification\": %d, ",temp_se->first_notification); 02911 #ifdef USE_ST_BASED_ESCAL_RANGES 02912 printf("\"first_warning_notification\": %d, ",temp_se->first_warning_notification); 02913 printf("\"first_critical_notification\": %d, ",temp_se->first_critical_notification); 02914 printf("\"first_unknown_notification\": %d, ",temp_se->first_unknown_notification); 02915 #endif 02916 if(temp_se->last_notification==0) 02917 printf("\"last_notification\": null, "); 02918 else 02919 printf("\"last_notification\": %d, ",temp_se->last_notification); 02920 #ifdef USE_ST_BASED_ESCAL_RANGES 02921 if(temp_se->last_warning_notification==0) 02922 printf("\"last_warning_notification\": null, "); 02923 else 02924 printf("\"last_warning_notification\": %d, ",temp_se->last_warning_notification); 02925 if(temp_se->last_critical_notification==0) 02926 printf("\"last_warning_notification\": null, "); 02927 else 02928 printf("\"last_warning_notification\": %d, ",temp_se->last_critical_notification); 02929 if(temp_se->last_unknown_notification==0) 02930 printf("\"last_warning_notification\": null, "); 02931 else 02932 printf("\"last_warning_notification\": %d, ",temp_se->last_unknown_notification); 02933 #endif 02934 } else if(content_type==CSV_CONTENT){ 02935 printf("%s%s",csv_data_enclosure,csv_delimiter); 02936 02937 #ifndef USE_ST_BASED_ESCAL_RANGES 02938 printf("%s%d%s%s",csv_data_enclosure,temp_se->first_notification,csv_data_enclosure,csv_delimiter); 02939 #else 02940 printf("%s%d, %d, %d, %d%s%s",csv_data_enclosure,temp_se->first_notification,temp_se->first_warning_notification,temp_se->first_critical_notification,temp_se->first_unknown_notification,csv_data_enclosure,csv_delimiter); 02941 #endif 02942 printf("%s",csv_data_enclosure); 02943 }else{ 02944 printf("</TD>\n"); 02945 02946 #ifndef USE_ST_BASED_ESCAL_RANGES 02947 printf("<TD CLASS='%s'>%d</TD>\n",bg_class,temp_se->first_notification); 02948 #else 02949 printf("<TD CLASS='%s'>%d, %d, %d, %d</TD>\n",bg_class,temp_se->first_notification,temp_se->first_warning_notification,temp_se->first_critical_notification,temp_se->first_unknown_notification); 02950 #endif 02951 02952 printf("<TD CLASS='%s'>",bg_class); 02953 } 02954 02955 if(content_type!=JSON_CONTENT) { 02956 #ifdef USE_ST_BASED_ESCAL_RANGES 02957 if(temp_se->last_notification==0) 02958 printf("Infinity, "); 02959 else 02960 printf("%d, ",temp_se->last_notification); 02961 if(temp_se->last_warning_notification==0) 02962 printf("Infinity, "); 02963 else 02964 printf("%d, ",temp_se->last_warning_notification); 02965 if(temp_se->last_critical_notification==0) 02966 printf("Infinity, "); 02967 else 02968 printf("%d, ",temp_se->last_critical_notification); 02969 if(temp_se->last_unknown_notification==0) 02970 printf("Infinity"); 02971 else 02972 printf("%d", temp_se->last_unknown_notification); 02973 #else 02974 if(temp_se->last_notification==0) 02975 printf("Infinity"); 02976 else 02977 printf("%d",temp_se->last_notification); 02978 #endif 02979 } 02980 02981 get_interval_time_string(temp_se->notification_interval,time_string,sizeof(time_string)); 02982 02983 if(content_type==JSON_CONTENT) { 02984 printf("\"notification_interval\": \"%s\", ",(temp_se->notification_interval==0.0)?"Notify Only Once (No Re-notification)":time_string); 02985 if (temp_se->escalation_period==NULL) 02986 printf("\"escalation_period\": null, "); 02987 else 02988 printf("\"escalation_period\": \"%s\", ",json_encode(temp_se->escalation_period)); 02989 printf("\"escalation_options\": [ "); 02990 }else if(content_type==CSV_CONTENT){ 02991 printf("%s%s",csv_data_enclosure,csv_delimiter); 02992 printf("%s%s%s%s",csv_data_enclosure,(temp_se->notification_interval==0.0)?"Notify Only Once (No Re-notification)":time_string,csv_data_enclosure,csv_delimiter); 02993 printf("%s%s%s%s",csv_data_enclosure,(temp_se->escalation_period==NULL)?"":temp_se->escalation_period,csv_data_enclosure,csv_delimiter); 02994 printf("%s",csv_data_enclosure); 02995 }else{ 02996 printf("</TD>\n"); 02997 02998 printf("<TD CLASS='%s'>",bg_class); 02999 if(temp_se->notification_interval==0.0) 03000 printf("Notify Only Once (No Re-notification)"); 03001 else 03002 printf("%s",time_string); 03003 printf("</TD>\n"); 03004 03005 printf("<TD CLASS='%s'>",bg_class); 03006 if(temp_se->escalation_period==NULL) 03007 printf(" "); 03008 else 03009 printf("<A HREF='%s?type=timeperiods&expand=%s'>%s</A>",CONFIG_CGI,url_encode(temp_se->escalation_period),html_encode(temp_se->escalation_period,FALSE)); 03010 printf("</TD>\n"); 03011 03012 printf("<TD CLASS='%s'>",bg_class); 03013 } 03014 03015 options=0; 03016 if(temp_se->escalate_on_warning==TRUE){ 03017 printf("%sWarning%s",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 03018 options=1; 03019 } 03020 if(temp_se->escalate_on_unknown==TRUE){ 03021 printf("%s%sUnknown%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 03022 options=1; 03023 } 03024 if(temp_se->escalate_on_critical==TRUE){ 03025 printf("%s%sCritical%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 03026 options=1; 03027 } 03028 if(temp_se->escalate_on_recovery==TRUE){ 03029 printf("%s%sRecovery%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 03030 options=1; 03031 } 03032 if(options==0 && content_type!=JSON_CONTENT) 03033 printf("None"); 03034 03035 if(content_type==JSON_CONTENT) 03036 printf(" ] }"); 03037 else if(content_type==CSV_CONTENT) 03038 printf("%s\n",csv_data_enclosure); 03039 else 03040 printf("</TD>\n</TR>\n"); 03041 } 03042 03043 if(content_type!=CSV_CONTENT && content_type!=JSON_CONTENT){ 03044 printf("</TABLE>\n"); 03045 printf("</DIV>\n"); 03046 printf("</P>\n"); 03047 }else if(content_type==JSON_CONTENT) 03048 printf("\n]\n"); 03049 03050 return; 03051 } 03052 03053 void display_hostdependencies(void){ 03054 hostdependency *temp_hd; 03055 int odd=0; 03056 int options; 03057 char *bg_class=""; 03058 int json_start=TRUE; 03059 03060 if(content_type==JSON_CONTENT) { 03061 printf("\"hostdependencies\": [\n"); 03062 }else if(content_type==CSV_CONTENT) { 03063 printf("%sDependent Host%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 03064 printf("%sMaster Host%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 03065 printf("%sDependency Type%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 03066 printf("%sDependency Period%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 03067 printf("%sDependency Failure Options%s\n",csv_data_enclosure,csv_data_enclosure); 03068 } else { 03069 printf("<P><DIV ALIGN=CENTER CLASS='dataTitle'>Host Dependencie%s%s</DIV></P>\n", 03070 (*to_expand=='\0'?"s":"s Involving Host "),(*to_expand=='\0'?"":html_encode(to_expand,FALSE))); 03071 03072 printf("<P>\n"); 03073 printf("<DIV ALIGN=CENTER>\n"); 03074 03075 printf("<TABLE BORDER=0 CLASS='data'>\n"); 03076 03077 print_export_link(); 03078 03079 printf("<TR>\n"); 03080 printf("<TH CLASS='data'>Dependent Host</TH>"); 03081 printf("<TH CLASS='data'>Master Host</TH>"); 03082 printf("<TH CLASS='data'>Dependency Type</TH>"); 03083 printf("<TH CLASS='data'>Dependency Period</TH>"); 03084 printf("<TH CLASS='data'>Dependency Failure Options</TH>"); 03085 printf("</TR>\n"); 03086 } 03087 03088 /* check all the host dependencies... */ 03089 for(temp_hd=hostdependency_list;temp_hd!=NULL;temp_hd=temp_hd->next) 03090 if (((*to_expand)=='\0')||(!strcmp(to_expand,temp_hd->dependent_host_name))||(!strcmp(to_expand,temp_hd->host_name))){ 03091 03092 if(odd){ 03093 odd=0; 03094 bg_class="dataOdd"; 03095 }else{ 03096 odd=1; 03097 bg_class="dataEven"; 03098 } 03099 03100 /* print list in json format */ 03101 if(content_type==JSON_CONTENT) { 03102 // always add a comma, except for the first line 03103 if (json_start==FALSE) 03104 printf(",\n"); 03105 json_start=FALSE; 03106 03107 printf("{ \"dependent_host_name\": \"%s\", ",json_encode(temp_hd->dependent_host_name)); 03108 printf("\"master_host_name\": \"%s\", ",json_encode(temp_hd->host_name)); 03109 printf("\"dependency_type\": \"%s\", ",(temp_hd->dependency_type==NOTIFICATION_DEPENDENCY)?"Notification":"Check Execution"); 03110 03111 if (temp_hd->dependency_period==NULL) 03112 printf("\"dependency_period\": null, "); 03113 else 03114 printf("\"dependency_period\": \"%s\", ",json_encode(temp_hd->dependency_period)); 03115 03116 printf("\"dependency_failure_options\": ["); 03117 /* print list in csv format */ 03118 }else if(content_type==CSV_CONTENT) { 03119 printf("%s%s%s%s",csv_data_enclosure,temp_hd->dependent_host_name,csv_data_enclosure,csv_delimiter); 03120 printf("%s%s%s%s",csv_data_enclosure,temp_hd->host_name,csv_data_enclosure,csv_delimiter); 03121 printf("%s%s%s%s",csv_data_enclosure,(temp_hd->dependency_type==NOTIFICATION_DEPENDENCY)?"Notification":"Check Execution",csv_data_enclosure,csv_delimiter); 03122 printf("%s%s%s%s",csv_data_enclosure,(temp_hd->dependency_period==NULL)?"":temp_hd->dependency_period,csv_data_enclosure,csv_delimiter); 03123 printf("%s",csv_data_enclosure); 03124 }else{ 03125 printf("<TR CLASS='%s'>\n",bg_class); 03126 03127 printf("<TD CLASS='%s'><A HREF='%s?type=hosts&expand=%s'>%s</A></TD>\n",bg_class,CONFIG_CGI,url_encode(temp_hd->dependent_host_name),html_encode(temp_hd->dependent_host_name,FALSE)); 03128 03129 printf("<TD CLASS='%s'><A HREF='%s?type=hosts&expand=%s'>%s</A></TD>\n",bg_class,CONFIG_CGI,url_encode(temp_hd->host_name),html_encode(temp_hd->host_name,FALSE)); 03130 03131 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_hd->dependency_type==NOTIFICATION_DEPENDENCY)?"Notification":"Check Execution"); 03132 03133 printf("<TD CLASS='%s'>",bg_class); 03134 if(temp_hd->dependency_period==NULL) 03135 printf(" "); 03136 else 03137 printf("<A HREF='%s?type=timeperiods&expand=%s'>%s</A>",CONFIG_CGI,url_encode(temp_hd->dependency_period),html_encode(temp_hd->dependency_period,FALSE)); 03138 printf("</TD>\n"); 03139 03140 printf("<TD CLASS='%s'>",bg_class); 03141 } 03142 03143 options=0; 03144 if(temp_hd->fail_on_up==TRUE){ 03145 printf("%sUp%s",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 03146 options=1; 03147 } 03148 if(temp_hd->fail_on_down==TRUE){ 03149 printf("%s%sDown%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 03150 options=1; 03151 } 03152 if(temp_hd->fail_on_unreachable==TRUE){ 03153 printf("%s%sUnreachable%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 03154 options=1; 03155 } 03156 if(temp_hd->fail_on_pending==TRUE){ 03157 printf("%s%sPending%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 03158 options=1; 03159 } 03160 03161 if(options==0 && content_type!=JSON_CONTENT) 03162 printf("None"); 03163 03164 if(content_type==JSON_CONTENT) 03165 printf(" ] }"); 03166 else if(content_type==CSV_CONTENT) 03167 printf("%s\n",csv_data_enclosure); 03168 else 03169 printf("</TD>\n</TR>\n"); 03170 } 03171 03172 if(content_type!=CSV_CONTENT && content_type!=JSON_CONTENT){ 03173 printf("</TABLE>\n"); 03174 printf("</DIV>\n"); 03175 printf("</P>\n"); 03176 }else if(content_type==JSON_CONTENT) 03177 printf("\n]\n"); 03178 03179 return; 03180 } 03181 03182 void display_hostescalations(void){ 03183 hostescalation *temp_he=NULL; 03184 contactsmember *temp_contactsmember=NULL; 03185 contactgroupsmember *temp_contactgroupsmember=NULL; 03186 char time_string[16]=""; 03187 int options=FALSE; 03188 int odd=0; 03189 char *bg_class=""; 03190 int contact=0; 03191 int json_start=TRUE; 03192 03193 if(content_type==JSON_CONTENT) { 03194 printf("\"hostescalations\": [\n"); 03195 }else if(content_type==CSV_CONTENT) { 03196 printf("%sHost%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 03197 printf("%sContacts/Groups%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 03198 printf("%sFirst Notification%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 03199 printf("%sLast Notification%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 03200 printf("%sNotification Interval%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 03201 printf("%sEscalation Period%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 03202 printf("%sEscalation Options%s\n",csv_data_enclosure,csv_data_enclosure); 03203 } else { 03204 printf("<P><DIV ALIGN=CENTER CLASS='dataTitle'>Host Escalation%s%s</DIV></P>\n", 03205 (*to_expand=='\0'?"s":"s for Host "),(*to_expand=='\0'?"":html_encode(to_expand,FALSE))); 03206 03207 printf("<P>\n"); 03208 printf("<DIV ALIGN=CENTER>\n"); 03209 03210 printf("<TABLE BORDER=0 CLASS='data'>\n"); 03211 03212 print_export_link(); 03213 03214 printf("<TR>\n"); 03215 printf("<TH CLASS='data'>Host</TH>"); 03216 printf("<TH CLASS='data'>Contacts/Groups</TH>"); 03217 printf("<TH CLASS='data'>First Notification</TH>"); 03218 printf("<TH CLASS='data'>Last Notification</TH>"); 03219 printf("<TH CLASS='data'>Notification Interval</TH>"); 03220 printf("<TH CLASS='data'>Escalation Period</TH>"); 03221 printf("<TH CLASS='data'>Escalation Options</TH>"); 03222 printf("</TR>\n"); 03223 } 03224 03225 /* check all the host escalations... */ 03226 for(temp_he=hostescalation_list;temp_he!=NULL;temp_he=temp_he->next) if (((*to_expand)=='\0')||(!strcmp(to_expand,temp_he->host_name))){ 03227 03228 if(odd){ 03229 odd=0; 03230 bg_class="dataOdd"; 03231 }else{ 03232 odd=1; 03233 bg_class="dataEven"; 03234 } 03235 03236 /* print list in json format */ 03237 if(content_type==JSON_CONTENT) { 03238 // always add a comma, except for the first line 03239 if (json_start==FALSE) 03240 printf(",\n"); 03241 json_start=FALSE; 03242 03243 printf("{ \"host_name\": \"%s\", ",json_encode(temp_he->host_name)); 03244 printf("\"contacts_contactgroups\": ["); 03245 /* print list in csv format */ 03246 }else if(content_type==CSV_CONTENT) { 03247 printf("%s%s%s%s",csv_data_enclosure,temp_he->host_name,csv_data_enclosure,csv_delimiter); 03248 printf("%s",csv_data_enclosure); 03249 }else{ 03250 printf("<TR CLASS='%s'>\n",bg_class); 03251 03252 printf("<TD CLASS='%s'><A HREF='%s?type=hosts&expand=%s'>%s</A></TD>\n",bg_class,CONFIG_CGI,url_encode(temp_he->host_name),html_encode(temp_he->host_name,FALSE)); 03253 03254 printf("<TD CLASS='%s'>",bg_class); 03255 } 03256 contact=0; 03257 for(temp_contactsmember=temp_he->contacts;temp_contactsmember!=NULL;temp_contactsmember=temp_contactsmember->next){ 03258 contact++; 03259 if(contact>1) 03260 printf(", "); 03261 if(content_type==JSON_CONTENT) 03262 printf("{ \"contact_name\": \"%s\" } ",json_encode(temp_contactsmember->contact_name)); 03263 else if(content_type==CSV_CONTENT) 03264 printf("%s",temp_contactsmember->contact_name); 03265 else 03266 printf("<A HREF='%s?type=contacts&expand=%s'>%s</A>\n",CONFIG_CGI,url_encode(temp_contactsmember->contact_name),html_encode(temp_contactsmember->contact_name,FALSE)); 03267 } 03268 for(temp_contactgroupsmember=temp_he->contact_groups;temp_contactgroupsmember!=NULL;temp_contactgroupsmember=temp_contactgroupsmember->next){ 03269 contact++; 03270 if(contact>1) 03271 printf(", "); 03272 if(content_type==JSON_CONTENT) 03273 printf("{ \"contactgroup_name\": \"%s\" } ",json_encode(temp_contactgroupsmember->group_name)); 03274 else if(content_type==CSV_CONTENT) 03275 printf("%s",temp_contactgroupsmember->group_name); 03276 else 03277 printf("<A HREF='%s?type=contactgroups&expand=%s'>%s</A>\n",CONFIG_CGI,url_encode(temp_contactgroupsmember->group_name),html_encode(temp_contactgroupsmember->group_name,FALSE)); 03278 } 03279 if(contact==0) 03280 printf("%s",(content_type==CSV_CONTENT || content_type==JSON_CONTENT)?"":" "); 03281 03282 if(content_type==JSON_CONTENT) { 03283 printf(" ], "); 03284 printf("\"first_notification\": %d, ",temp_he->first_notification); 03285 #ifdef USE_ST_BASED_ESCAL_RANGES 03286 printf("\"first_down_notification\": %d, ",temp_he->first_down_notification); 03287 printf("\"first_unreachable_notification\": %d, ",temp_he->first_unreachable_notification); 03288 #endif 03289 if(temp_he->last_notification==0) 03290 printf("\"last_notification\": null, "); 03291 else 03292 printf("\"last_notification\": %d, ",temp_he->last_notification); 03293 #ifdef USE_ST_BASED_ESCAL_RANGES 03294 if(temp_he->last_down_notification==0) 03295 printf("\"last_down_notification\": null, "); 03296 else 03297 printf("\"last_down_notification\": %d, ",temp_he->last_down_notification); 03298 if(temp_he->last_unreachable_notification==0) 03299 printf("\"last_unreachable_notification\": null, "); 03300 else 03301 printf("\"last_unreachable_notification\": %d, ",temp_he->last_unreachable_notification); 03302 #endif 03303 }else if(content_type==CSV_CONTENT){ 03304 printf("%s%s",csv_data_enclosure,csv_delimiter); 03305 03306 #ifndef USE_ST_BASED_ESCAL_RANGES 03307 printf("%s%d%s%s",csv_data_enclosure,temp_he->first_notification,csv_data_enclosure,csv_delimiter); 03308 #else 03309 printf("%s%d, %d, %d%s%s",csv_data_enclosure,temp_he->first_notification,temp_he->first_down_notification,temp_he->first_unreachable_notification,csv_data_enclosure,csv_delimiter); 03310 #endif 03311 printf("%s",csv_data_enclosure); 03312 }else{ 03313 printf("</TD>\n"); 03314 03315 #ifndef USE_ST_BASED_ESCAL_RANGES 03316 printf("<TD CLASS='%s'>%d</TD>",bg_class,temp_he->first_notification); 03317 #else 03318 printf("<TD CLASS='%s'>%d, %d, %d</TD>",bg_class,temp_he->first_notification,temp_he->first_down_notification,temp_he->first_unreachable_notification); 03319 #endif 03320 printf("<TD CLASS='%s'>",bg_class); 03321 } 03322 03323 if(content_type!=JSON_CONTENT) { 03324 #ifdef USE_ST_BASED_ESCAL_RANGES 03325 if(temp_he->last_notification==0) 03326 printf("Infinity, "); 03327 else 03328 printf("%d, ",temp_he->last_notification); 03329 if(temp_he->last_down_notification==0) 03330 printf("Infinity, "); 03331 else 03332 printf("%d, ",temp_he->last_down_notification); 03333 if(temp_he->last_unreachable_notification==0) 03334 printf("Infinity"); 03335 else 03336 printf("%d",temp_he->last_unreachable_notification); 03337 #else 03338 if(temp_he->last_notification==0) 03339 printf("Infinity"); 03340 else 03341 printf("%d",temp_he->last_notification); 03342 #endif 03343 } 03344 03345 get_interval_time_string(temp_he->notification_interval,time_string,sizeof(time_string)); 03346 03347 if(content_type==JSON_CONTENT) { 03348 printf("\"notification_interval\": \"%s\", ",(temp_he->notification_interval==0.0)?"Notify Only Once (No Re-notification)":time_string); 03349 if (temp_he->escalation_period==NULL) 03350 printf("\"escalation_period\": null, "); 03351 else 03352 printf("\"escalation_period\": \"%s\", ",json_encode(temp_he->escalation_period)); 03353 printf("\"escalation_options\": [ "); 03354 }else if(content_type==CSV_CONTENT){ 03355 printf("%s%s",csv_data_enclosure,csv_delimiter); 03356 printf("%s%s%s%s",csv_data_enclosure,(temp_he->notification_interval==0.0)?"Notify Only Once (No Re-notification)":time_string,csv_data_enclosure,csv_delimiter); 03357 printf("%s%s%s%s",csv_data_enclosure,(temp_he->escalation_period==NULL)?"":temp_he->escalation_period,csv_data_enclosure,csv_delimiter); 03358 printf("%s",csv_data_enclosure); 03359 }else{ 03360 printf("</TD>\n"); 03361 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,(temp_he->notification_interval==0.0)?"Notify Only Once (No Re-notification)":time_string); 03362 03363 printf("<TD CLASS='%s'>",bg_class); 03364 if(temp_he->escalation_period==NULL) 03365 printf(" "); 03366 else 03367 printf("<A HREF='%s?type=timeperiods&expand=%s'>%s</A>",CONFIG_CGI,url_encode(temp_he->escalation_period),html_encode(temp_he->escalation_period,FALSE)); 03368 printf("</TD>\n"); 03369 03370 printf("<TD CLASS='%s'>",bg_class); 03371 } 03372 03373 options=0; 03374 if(temp_he->escalate_on_down==TRUE){ 03375 printf("%sDown%s",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 03376 options=1; 03377 } 03378 if(temp_he->escalate_on_unreachable==TRUE){ 03379 printf("%s%sUnreachable%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 03380 options=1; 03381 } 03382 if(temp_he->escalate_on_recovery==TRUE){ 03383 printf("%s%sRecovery%s",(options)?", ":"",(content_type==JSON_CONTENT)?"\"":"",(content_type==JSON_CONTENT)?"\"":""); 03384 options=1; 03385 } 03386 if(options==0 && content_type!=JSON_CONTENT) 03387 printf("None"); 03388 03389 if(content_type==JSON_CONTENT) 03390 printf(" ] }"); 03391 else if(content_type==CSV_CONTENT) 03392 printf("%s\n",csv_data_enclosure); 03393 else 03394 printf("</TD>\n</TR>\n"); 03395 } 03396 03397 if(content_type!=CSV_CONTENT && content_type!=JSON_CONTENT){ 03398 printf("</TABLE>\n"); 03399 printf("</DIV>\n"); 03400 printf("</P>\n"); 03401 }else if(content_type==JSON_CONTENT) 03402 printf("\n]\n"); 03403 03404 return; 03405 } 03406 03407 03408 void display_modules(void){ 03409 module *temp_module; 03410 int odd=0; 03411 char *bg_class=""; 03412 int json_start=TRUE; 03413 03414 if(content_type==JSON_CONTENT) { 03415 printf("\"modules\": [\n"); 03416 }else if(content_type==CSV_CONTENT) { 03417 printf("%sModule Name%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 03418 printf("%sModule Type%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 03419 printf("%sModule Path%s%s",csv_data_enclosure,csv_data_enclosure,csv_delimiter); 03420 printf("%sModule Args%s",csv_data_enclosure,csv_data_enclosure); 03421 printf("\n"); 03422 } else { 03423 printf("<P><DIV ALIGN=CENTER CLASS='dataTitle'>Module%s%s</DIV></P>\n", 03424 (*to_expand=='\0'?"s":" "),(*to_expand=='\0'?"":html_encode(to_expand,FALSE))); 03425 03426 printf("<P><DIV ALIGN=CENTER>\n"); 03427 printf("<TABLE BORDER=0 CLASS='data'>\n"); 03428 03429 print_export_link(); 03430 03431 printf("<TR><TH CLASS='data'>Module Name</TH><TH CLASS='data'>Module Type</TH><TH CLASS='data'>Module Path</TH><TH CLASS='data'>Module Args</TH></TR>\n"); 03432 } 03433 03434 /* check all modules */ 03435 for(temp_module=module_list;temp_module!=NULL;temp_module=temp_module->next) if (((*to_expand)=='\0')||(!strcmp(to_expand,temp_module->name))){ 03436 03437 if(odd){ 03438 odd=0; 03439 bg_class="dataEven"; 03440 }else{ 03441 odd=1; 03442 bg_class="dataOdd"; 03443 } 03444 03445 /* print list in json format */ 03446 if(content_type==JSON_CONTENT) { 03447 // always add a comma, except for the first line 03448 if (json_start==FALSE) 03449 printf(",\n"); 03450 json_start=FALSE; 03451 03452 printf("{ \"module_name\": \"%s\", ",json_encode(temp_module->name)); 03453 printf("\"module_type\": \"%s\", ",json_encode(temp_module->type)); 03454 printf("\"module_path\": \"%s\", ",json_encode(temp_module->path)); 03455 printf("\"module_args\": \"%s\" }",json_encode(temp_module->args)); 03456 /* print list in csv format */ 03457 }else if(content_type==CSV_CONTENT) { 03458 printf("%s%s%s%s",csv_data_enclosure,temp_module->name,csv_data_enclosure,csv_delimiter); 03459 printf("%s%s%s%s",csv_data_enclosure,temp_module->type,csv_data_enclosure,csv_delimiter); 03460 printf("%s%s%s%s",csv_data_enclosure,temp_module->path,csv_data_enclosure,csv_delimiter); 03461 printf("%s%s%s\n",csv_data_enclosure,temp_module->args,csv_data_enclosure); 03462 }else{ 03463 printf("<TR CLASS='%s'>\n",bg_class); 03464 03465 printf("<TD CLASS='%s'><A NAME='%s'></A>%s</TD>\n",bg_class,url_encode(temp_module->name),html_encode(temp_module->name,FALSE)); 03466 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,html_encode(temp_module->type,FALSE)); 03467 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,html_encode(temp_module->path,FALSE)); 03468 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,html_encode(temp_module->args,FALSE)); 03469 03470 printf("</TR>\n"); 03471 } 03472 } 03473 03474 if(content_type!=CSV_CONTENT && content_type!=JSON_CONTENT){ 03475 printf("</TABLE>\n"); 03476 printf("</DIV>\n"); 03477 printf("</P>\n"); 03478 }else if(content_type==JSON_CONTENT) 03479 printf("\n]\n"); 03480 03481 return; 03482 } 03483 03484 03485 03486 char *hash_color(int i){ 03487 char c; 03488 03489 /* This is actually optimized for MAX_COMMAND_ARGUMENTS==32 ... */ 03490 03491 if ((i%32)<16){ 03492 if ((i%32)<8) c='7'; else c='4'; 03493 } else { 03494 if ((i%32)<24) c='6'; else c='5'; 03495 } 03496 03497 /* Computation for standard case */ 03498 hashed_color[0]='#'; 03499 hashed_color[1]=hashed_color[2]=((i%2)?c:'0'); 03500 hashed_color[3]=hashed_color[4]=(((i/2)%2)?c:'0'); 03501 hashed_color[5]=hashed_color[6]=(((i/4)%2)?c:'0'); 03502 hashed_color[7]='\0'; 03503 03504 /* Override shades of grey */ 03505 if ((i%8)==7) hashed_color[1]=hashed_color[3]='0'; 03506 if ((i%8)==0) hashed_color[2]=hashed_color[3]=hashed_color[4]=hashed_color[6]=c; 03507 03508 return(hashed_color); 03509 } 03510 03511 void display_command_expansion(void){ 03512 command *temp_command; 03513 int odd=0; 03514 char *bg_class=""; 03515 int i, j; 03516 char *c, *cc; 03517 char commandline[MAX_COMMAND_BUFFER]; 03518 char *command_args[MAX_COMMAND_ARGUMENTS]; 03519 int arg_count[MAX_COMMAND_ARGUMENTS]; 03520 int lead_space[MAX_COMMAND_ARGUMENTS]; 03521 int trail_space[MAX_COMMAND_ARGUMENTS]; 03522 03523 printf("<P><DIV ALIGN=CENTER CLASS='dataTitle'>Command Expansion</DIV></P>\n"); 03524 03525 /* Parse to_expand into parts */ 03526 for (i=0;i<MAX_COMMAND_ARGUMENTS;i++) command_args[i]=NULL; 03527 for (i=0,command_args[0]=cc=c=strdup(to_expand);c&&((*c)!='\0')&&(i<MAX_COMMAND_ARGUMENTS);c++,cc++){ 03528 if ((*c)=='\\') c++; 03529 else if ((*c)=='!'){ 03530 (*cc)='\0'; 03531 cc=c++; 03532 command_args[++i]=(c--); 03533 } 03534 (*cc)=(*c); 03535 } 03536 if ((*c)=='\0') (*cc)='\0'; 03537 /* Precompute indexes of dangling whitespace */ 03538 for (i=0;i<MAX_COMMAND_ARGUMENTS;i++){ 03539 for (cc=command_args[i],lead_space[i]=0;cc&&isspace(*cc);cc++,lead_space[i]++) ; 03540 trail_space[i]=0; 03541 for (;cc&&((*cc)!='\0');cc++) if (isspace(*cc)) trail_space[i]++; else trail_space[i]=0; 03542 } 03543 03544 printf("<P><DIV ALIGN=CENTER>\n"); 03545 printf("<TABLE BORDER=0 CLASS='data'>\n"); 03546 printf("<TR><TH CLASS='data'>Command Name</TH><TH CLASS='data'>Command Line</TH></TR>\n"); 03547 03548 if ((*to_expand)!='\0'){ 03549 arg_count[0]=0; 03550 03551 printf("<TR CLASS='dataEven'><TD CLASS='dataEven'>To expand:</TD><TD CLASS='dataEven'>%s",command_args[0]); 03552 for (i=1;(i<MAX_COMMAND_ARGUMENTS)&&command_args[i];i++) 03553 printf("!<FONT\n COLOR='%s'>%s</FONT>",hash_color(i),command_args[i]); 03554 printf("\n</TD></TR>\n"); 03555 03556 /* check all commands */ 03557 for(temp_command=command_list;temp_command!=NULL;temp_command=temp_command->next){ 03558 03559 if (!strcmp(temp_command->name,command_args[0])){ 03560 03561 arg_count[0]++; 03562 03563 if(odd){ 03564 odd=0; 03565 bg_class="dataEven"; 03566 }else{ 03567 odd=1; 03568 bg_class="dataOdd"; 03569 } 03570 03571 printf("<TR CLASS='%s'>\n",bg_class); 03572 03573 printf("<TD CLASS='%s'><A NAME='%s'></A>%s</TD>\n",bg_class,url_encode(temp_command->name),html_encode(temp_command->name,FALSE)); 03574 printf("<TD CLASS='%s'>%s</TD>\n",bg_class,html_encode(temp_command->command_line,FALSE)); 03575 03576 printf("</TR>\n<TR CLASS='%s'>\n",bg_class); 03577 03578 for (i=1;i<MAX_COMMAND_ARGUMENTS;i++) arg_count[i]=0; 03579 03580 printf("<TD CLASS='%s' ALIGN='right'>-></TD>\n",bg_class); 03581 printf("<TD CLASS='%s'>",bg_class); 03582 strncpy(commandline,temp_command->command_line,MAX_COMMAND_BUFFER); 03583 commandline[MAX_COMMAND_BUFFER-1]='\0'; 03584 for (c=commandline;c&&(cc=strstr(c,"$"));){ 03585 (*(cc++))='\0'; 03586 printf("%s",html_encode(c,FALSE)); 03587 if ((*cc)=='$'){ 03588 /* Escaped '$' */ 03589 printf("<FONT COLOR='#444444'>$</FONT>"); 03590 c=(++cc); 03591 } 03592 else if (strncmp("ARG",cc,3)){ 03593 /* Non-$ARGn$ macro */ 03594 c=strstr(cc,"$"); 03595 if (c) (*(c++))='\0'; 03596 printf("<FONT COLOR='#777777'>$%s%s</FONT>",html_encode(cc,FALSE),(c?"$":"")); 03597 if (!c) printf("<FONT COLOR='#FF0000'> (not properly terminated)</FONT>"); 03598 } 03599 else{ 03600 /* $ARGn$ macro */ 03601 for (c=(cc+=3);isdigit(*c);c++) ; 03602 if (((*c)=='\0')||((*c)=='$')){ 03603 /* Index is numeric */ 03604 i=atoi(cc); 03605 if ((i>0)&&(i<=MAX_COMMAND_ARGUMENTS)){ 03606 arg_count[i]++; 03607 if (command_args[i]){ 03608 if (*(command_args[i])!='\0') printf("<FONT COLOR='%s'><B>%s%s%s</B></FONT>", 03609 hash_color(i),((lead_space[i]>0)||(trail_space[i]>0)?"<U>‍":""), 03610 html_encode(command_args[i],FALSE),((lead_space[i]>0)||(trail_space[i]>0)?"‍</U>":"")); 03611 else printf("<FONT COLOR='#0000FF'>(empty)</FONT>"); 03612 } 03613 else printf("<FONT COLOR='#0000FF'>(undefined)</FONT>"); 03614 } 03615 else printf("<FONT COLOR='#FF0000'>(not a valid $ARGn$ index: %u)</FONT>",i); 03616 if ((*c)!='\0') c++; 03617 else printf("<FONT COLOR='#FF0000'> (not properly terminated)</FONT>"); 03618 } 03619 else{ 03620 /* Syntax err in index */ 03621 c=strstr(cc,"$"); 03622 printf("<FONT COLOR='#FF0000'>(not an $ARGn$ index: "%s")</FONT>",html_encode(strtok(cc,"$"),FALSE)); 03623 if (c) c++; 03624 } 03625 } 03626 } 03627 if (c) printf("%s",html_encode(c,FALSE)); 03628 03629 printf("</TD></TR>\n"); 03630 03631 for (i=1;(i<MAX_COMMAND_ARGUMENTS)&&(command_args[i]);i++){ 03632 if (arg_count[i]==0){ 03633 printf("<TR CLASS='%s'><TD CLASS='%s' ALIGN='right'><FONT COLOR='#FF0000'>unused:</FONT></TD>\n",bg_class,bg_class); 03634 printf("<TD CLASS='%s'>$ARG%u$=<FONT COLOR='%s'>%s%s%s</FONT></TD></TR>\n",bg_class,i,hash_color(i), 03635 ((lead_space[i]>0)||(trail_space[i]>0)?"<U>‍":""),html_encode(command_args[i],FALSE), 03636 ((lead_space[i]>0)||(trail_space[i]>0)?"‍</U>":"")); 03637 } 03638 else if (arg_count[i]>1){ 03639 printf("<TR CLASS='%s'><TD CLASS='%s' ALIGN='right'>used %u x:</TD>\n",bg_class,bg_class,i); 03640 printf("<TD CLASS='%s'>$ARG%u$=<FONT COLOR='%s'>%s%s%s</FONT></TD></TR>\n",bg_class,i,hash_color(i), 03641 ((lead_space[i]>0)||(trail_space[i]>0)?"<U>‍":""),html_encode(command_args[i],FALSE), 03642 ((lead_space[i]>0)||(trail_space[i]>0)?"‍</U>":"")); 03643 } 03644 if ((lead_space[i]>0)||(trail_space[i]>0)){ 03645 printf("<TR CLASS='%s'><TD CLASS='%s' ALIGN='right'><FONT COLOR='#0000FF'>dangling whitespace:</FONT></TD>\n",bg_class,bg_class); 03646 printf("<TD CLASS='%s'>$ARG%u$=<FONT COLOR='#0000FF'>",bg_class,i); 03647 for (c=command_args[i],j=0;c&&isspace(*c);c++,j++) 03648 if ((*c)==' ') printf("[SP]"); 03649 else if ((*c)=='\f') printf("[FF]"); 03650 else if ((*c)=='\n') printf("[LF]"); 03651 else if ((*c)=='\r') printf("[CR]"); 03652 else if ((*c)=='\t') printf("[HT]"); 03653 else if ((*c)=='\v') printf("[VT]"); 03654 else printf("[0x%x]",*c); 03655 printf("</FONT><FONT COLOR='%s'>",hash_color(i)); 03656 for (;c&&((*c)!='\0')&&(j<strlen(command_args[i])-trail_space[i]);c++,j++) putchar(*c); 03657 printf("</FONT><FONT COLOR='#0000FF'>"); 03658 for (;c&&((*c)!='\0');c++) 03659 if ((*c)==' ') printf("[SP]"); 03660 else if ((*c)=='\f') printf("[FF]"); 03661 else if ((*c)=='\n') printf("[LF]"); 03662 else if ((*c)=='\r') printf("[CR]"); 03663 else if ((*c)=='\t') printf("[HT]"); 03664 else if ((*c)=='\v') printf("[VT]"); 03665 else printf("[0x%x]",*c); 03666 printf("</FONT></TD></TR>\n"); 03667 } 03668 } 03669 } 03670 03671 } 03672 03673 if (!arg_count[0]){ 03674 printf("<TR CLASS='dataOdd'><TD CLASS='dataOdd' ALIGN='right'><FONT\n"); 03675 printf("COLOR='#FF0000'>Error:</FONT></TD><TD CLASS='dataOdd'><FONT COLOR='#FF0000'>No\n"); 03676 printf("command "%s" found</FONT></TD></TR>\n",html_encode(command_args[0],FALSE)); 03677 } 03678 } 03679 03680 printf("<TR CLASS='dataEven'><TD CLASS='dataEven'>To expand:</TD><TD CLASS='dataEven'><FORM\n"); 03681 printf("METHOD='GET' ACTION='%s'><INPUT TYPE='HIDDEN' NAME='type' VALUE='command'><INPUT\n",CONFIG_CGI); 03682 printf("TYPE='text' NAME='expand' SIZE='100%%' VALUE='%s'>\n",html_encode(to_expand,FALSE)); 03683 printf("<INPUT TYPE='SUBMIT' VALUE='Go'></FORM></TD></TR>\n"); 03684 03685 printf("</TABLE>\n"); 03686 printf("</DIV></P>\n"); 03687 03688 return; 03689 } 03690 03691 void display_options(void){ 03692 03693 printf("<br><br>\n"); 03694 03695 printf("<div align=center class='reportSelectTitle'>Select Type of Config Data You Wish To View</div>\n"); 03696 03697 printf("<br><br>\n"); 03698 03699 printf("<form method=\"get\" action=\"%s\">\n",CONFIG_CGI); 03700 03701 printf("<div align=center>\n"); 03702 printf("<table border=0>\n"); 03703 03704 printf("<tr><td align=left class='reportSelectSubTitle'>Object Type:</td></tr>\n"); 03705 printf("<tr><td align=left class='reportSelectItem'>"); 03706 printf("<select name='type'>\n"); 03707 printf("<option value='hosts' %s>Hosts\n",(display_type==DISPLAY_HOSTS)?"SELECTED":""); 03708 printf("<option value='hostdependencies' %s>Host Dependencies\n",(display_type==DISPLAY_HOSTDEPENDENCIES)?"SELECTED":""); 03709 printf("<option value='hostescalations' %s>Host Escalations\n",(display_type==DISPLAY_HOSTESCALATIONS)?"SELECTED":""); 03710 printf("<option value='hostgroups' %s>Host Groups\n",(display_type==DISPLAY_HOSTGROUPS)?"SELECTED":""); 03711 printf("<option value='services' %s>Services\n",(display_type==DISPLAY_SERVICES)?"SELECTED":""); 03712 printf("<option value='servicegroups' %s>Service Groups\n",(display_type==DISPLAY_SERVICEGROUPS)?"SELECTED":""); 03713 printf("<option value='servicedependencies' %s>Service Dependencies\n",(display_type==DISPLAY_SERVICEDEPENDENCIES)?"SELECTED":""); 03714 printf("<option value='serviceescalations' %s>Service Escalations\n",(display_type==DISPLAY_SERVICEESCALATIONS)?"SELECTED":""); 03715 printf("<option value='contacts' %s>Contacts\n",(display_type==DISPLAY_CONTACTS)?"SELECTED":""); 03716 printf("<option value='contactgroups' %s>Contact Groups\n",(display_type==DISPLAY_CONTACTGROUPS)?"SELECTED":""); 03717 printf("<option value='timeperiods' %s>Timeperiods\n",(display_type==DISPLAY_TIMEPERIODS)?"SELECTED":""); 03718 printf("<option value='modules' %s>Modules\n",(display_type==DISPLAY_MODULES)?"SELECTED":""); 03719 printf("<option value='commands' %s>Commands\n",(display_type==DISPLAY_COMMANDS)?"SELECTED":""); 03720 printf("<option value='command' %s>Command Expansion\n",(display_type==DISPLAY_COMMAND_EXPANSION)?"SELECTED":""); 03721 printf("</select>\n"); 03722 printf("</td></tr>\n"); 03723 03724 printf("<tr><td class='reportSelectItem'><input type='submit' value='Continue'></td></tr>\n"); 03725 printf("</table>\n"); 03726 printf("</div>\n"); 03727 03728 printf("</form>\n"); 03729 03730 return; 03731 } 03732 03733 void print_export_link(void){ 03734 printf("<TR>\n<td><div class='csv_export_link' style='text-align:left;'>"); 03735 /* add export to csv link */ 03736 printf("<a href='%s' target='_blank'>Export to CSV</a></div></td>\n</TR>\n",get_export_csv_link(CONFIG_CGI)); 03737 }