From: Andreas E. <ag...@us...> - 2011-01-04 14:16:08
|
Update of /cvsroot/nagios/nagios/cgi In directory sfp-cvsdas-3.v30.ch3.sourceforge.com:/tmp/cvs-serv336/cgi Modified Files: trends.c Log Message: trends-add-forward-to-next-problem.patch In order to allow for scanning through the remaining recording and searching for the occurrence of the next host or service problem, the addtional time period tag TIMEPERIOD_NEXTPROBLEM was introduced. If selected, the time period of the next diplay will be selected in such a way that the full duration of the next problem will be displayed at the center of the image. If only the start time is available, because the problem is still present, the time window of the image falls back to the 24-hour period. A small fix was required to solve an inconsistency of the image width (600 vs. 900 pixels). Signed-off-by: Carsten Emde <cb...@os...> Author: Carsten Emde <C....@os...> Committer: Andreas Ericsson <ae...@op...> Index: trends.c =================================================================== RCS file: /cvsroot/nagios/nagios/cgi/trends.c,v retrieving revision 1.47 retrieving revision 1.48 diff -C2 -d -r1.47 -r1.48 *** trends.c 4 Jan 2011 14:15:45 -0000 1.47 --- trends.c 4 Jan 2011 14:16:00 -0000 1.48 *************** *** 99,103 **** #define TIMEPERIOD_LAST24HOURS 11 #define TIMEPERIOD_LAST7DAYS 12 ! #define TIMEPERIOD_LAST31DAYS 13 #define MIN_TIMESTAMP_SPACING 10 --- 99,104 ---- #define TIMEPERIOD_LAST24HOURS 11 #define TIMEPERIOD_LAST7DAYS 12 ! #define TIMEPERIOD_LAST31DAYS 13 ! #define TIMEPERIOD_NEXTPROBLEM 14 #define MIN_TIMESTAMP_SPACING 10 *************** *** 193,197 **** FILE *image_file=NULL; ! int image_width=600; int image_height=300; --- 194,198 ---- FILE *image_file=NULL; ! int image_width=900; int image_height=300; *************** *** 243,246 **** --- 244,248 ---- unsigned long time_critical=0L; + int problem_found; *************** *** 364,367 **** --- 366,370 ---- if(mode==CREATE_HTML && display_header==TRUE){ + time_t old_t1=t1, old_t2=t2; /* begin top table */ *************** *** 381,384 **** --- 384,450 ---- display_info_table(temp_buffer,FALSE,¤t_authdata); + if (timeperiod_type==TIMEPERIOD_NEXTPROBLEM) { + archived_state *temp_as; + time_t problem_t1, problem_t2=0; + + t1=t2; + t2=current_time; + read_archived_state_data(); + + problem_found=FALSE; + if(display_type==DISPLAY_HOST_TRENDS){ + for(temp_as=as_list;temp_as!=NULL;temp_as=temp_as->next){ + if((temp_as->entry_type==HOST_DOWN || temp_as->entry_type==HOST_UNREACHABLE) && temp_as->time_stamp>t1){ + problem_t1=temp_as->time_stamp; + problem_found=TRUE; + break; + } + } + if(problem_found==TRUE){ + for(;temp_as!=NULL;temp_as=temp_as->next){ + if(temp_as->entry_type==AS_HOST_UP && temp_as->time_stamp>problem_t1){ + problem_t2=temp_as->time_stamp; + break; + } + } + } + } + else{ + for(temp_as=as_list;temp_as!=NULL;temp_as=temp_as->next){ + if((temp_as->entry_type==AS_SVC_UNKNOWN || temp_as->entry_type==AS_SVC_CRITICAL || temp_as->entry_type==AS_SVC_WARNING) && temp_as->time_stamp>t1){ + problem_t1=temp_as->time_stamp; + problem_found=TRUE; + break; + } + } + if(problem_found==TRUE){ + for(;temp_as!=NULL;temp_as=temp_as->next){ + if(temp_as->entry_type==AS_SVC_OK && temp_as->time_stamp>problem_t1){ + problem_t2=temp_as->time_stamp; + break; + } + } + } + } + if(problem_found==TRUE) { + time_t margin; + + if (problem_t2==0){ + margin=12*60*60; + problem_t2=problem_t1; + } + else + margin=(problem_t2-problem_t1)/2; + + t1=problem_t1-margin; + t2=problem_t2+margin; + } + } + + if (timeperiod_type==TIMEPERIOD_NEXTPROBLEM && problem_found==FALSE){ + t1=old_t1; + t2=old_t2; + } + if(display_type!=DISPLAY_NO_TRENDS && input_type==GET_INPUT_NONE){ *************** *** 505,508 **** --- 571,578 ---- printf("<option value=thisyear %s>This Year\n",(timeperiod_type==TIMEPERIOD_THISYEAR)?"SELECTED":""); printf("<option value=lastyear %s>Last Year\n",(timeperiod_type==TIMEPERIOD_LASTYEAR)?"SELECTED":""); + if(display_type==DISPLAY_HOST_TRENDS) + printf("<option value=nextproblem %s>Next Host Problem\n",(timeperiod_type==TIMEPERIOD_NEXTPROBLEM)?"SELECTED":""); + else + printf("<option value=nextproblem %s>Next Service Problem\n",(timeperiod_type==TIMEPERIOD_NEXTPROBLEM)?"SELECTED":""); printf("</select>\n"); printf("</td><td CLASS='optBoxItem' valign=top align=left>\n"); *************** *** 582,585 **** --- 652,662 ---- + if(timeperiod_type==TIMEPERIOD_NEXTPROBLEM && problem_found==FALSE) { + printf("<P><DIV ALIGN=CENTER CLASS='errorMessage'>No problem found between end of display and end of recording</DIV></P>\n"); + + document_footer(); + free_memory(); + return ERROR; + } /* set drawing parameters, etc */ *************** *** 590,594 **** else{ image_height=300; ! image_width=600; } --- 667,671 ---- else{ image_height=300; ! image_width=900; } *************** *** 746,750 **** printf("&backtrack=%d",backtrack_archives); printf("&zoom=%d",zoom_factor); ! printf("' BORDER=0 name='trendsimage' useMap='#trendsmap' width=900>\n"); printf("</DIV>\n"); } --- 823,827 ---- printf("&backtrack=%d",backtrack_archives); printf("&zoom=%d",zoom_factor); ! printf("' BORDER=0 name='trendsimage' useMap='#trendsmap' width=%d>\n", image_width); printf("</DIV>\n"); } *************** *** 1392,1395 **** --- 1469,1474 ---- else if(!strcmp(variables[x],"lastyear")) timeperiod_type=TIMEPERIOD_LASTYEAR; + else if(!strcmp(variables[x],"nextproblem")) + timeperiod_type=TIMEPERIOD_NEXTPROBLEM; else if(!strcmp(variables[x],"last24hours")) timeperiod_type=TIMEPERIOD_LAST24HOURS; *************** *** 2874,2877 **** --- 2953,2959 ---- t1=mktime(t); break; + case TIMEPERIOD_NEXTPROBLEM: + /* Time period will be defined later */ + break; case TIMEPERIOD_LAST7DAYS: t2=current_time; |