*** avail.c 2006-01-20 18:34:53.000000000 +0100 --- avail.c.patched 2006-04-13 15:16:01.000000000 +0200 *************** *** 803,809 **** printf("\n",backtrack_archives); printf("\n"); ! if((display_type==DISPLAY_HOST_AVAIL && show_all_hosts==TRUE) || (display_type==DISPLAY_SERVICE_AVAIL && show_all_services==TRUE)){ printf(""); printf("Output in CSV Format:\n"); printf(""); --- 803,809 ---- printf("\n",backtrack_archives); printf("\n"); ! if((display_type==DISPLAY_HOST_AVAIL && show_all_hosts==TRUE) || (display_type==DISPLAY_SERVICE_AVAIL && show_all_services==TRUE) || (display_type==DISPLAY_HOSTGROUP_AVAIL) || (display_type==DISPLAY_SERVICEGROUP_AVAIL)){ printf(""); printf("Output in CSV Format:\n"); printf(""); *************** *** 3421,3469 **** void display_hostgroup_availability(void){ hostgroup *temp_hostgroup; /* display data for a specific hostgroup */ if(show_all_hostgroups==FALSE){ temp_hostgroup=find_hostgroup(hostgroup_name); display_specific_hostgroup_availability(temp_hostgroup); ! } /* display data for all hostgroups */ else{ for(temp_hostgroup=hostgroup_list;temp_hostgroup!=NULL;temp_hostgroup=temp_hostgroup->next) display_specific_hostgroup_availability(temp_hostgroup); ! } return; ! } ! /* display availability for a specific hostgroup */ ! void display_specific_hostgroup_availability(hostgroup *hg){ ! unsigned long total_time; ! unsigned long time_determinate; ! unsigned long time_indeterminate; ! avail_subject *temp_subject; double percent_time_up=0.0; double percent_time_down=0.0; double percent_time_unreachable=0.0; double percent_time_up_known=0.0; double percent_time_down_known=0.0; double percent_time_unreachable_known=0.0; ! double percent_time_indeterminate=0.0; ! double average_percent_time_up=0.0; ! double average_percent_time_up_known=0.0; ! double average_percent_time_down=0.0; ! double average_percent_time_down_known=0.0; ! double average_percent_time_unreachable=0.0; ! double average_percent_time_unreachable_known=0.0; ! double average_percent_time_indeterminate=0.0; - int current_subject=0; char *bgclass=""; ! int odd=1; host *temp_host; if(hg==NULL) --- 3421,3831 ---- void display_hostgroup_availability(void){ hostgroup *temp_hostgroup; + printPageHeader(); + /* display data for a specific hostgroup */ if(show_all_hostgroups==FALSE){ temp_hostgroup=find_hostgroup(hostgroup_name); display_specific_hostgroup_availability(temp_hostgroup); ! } /* display data for all hostgroups */ else{ for(temp_hostgroup=hostgroup_list;temp_hostgroup!=NULL;temp_hostgroup=temp_hostgroup->next) display_specific_hostgroup_availability(temp_hostgroup); ! } return; ! } ! void printHostlist(int hasHostName, hostgroup *hg, servicegroup *sg, avail_subject *subject,unsigned long total_time, int lineCounter) { double percent_time_up=0.0; double percent_time_down=0.0; double percent_time_unreachable=0.0; + double percent_time_indeterminate=0.0; double percent_time_up_known=0.0; double percent_time_down_known=0.0; double percent_time_unreachable_known=0.0; ! double percent_scheduled_time_up=0.0; ! double percent_scheduled_time_up_known=0.0; ! double percent_unscheduled_time_up=0.0; ! double percent_unscheduled_time_up_known=0.0; ! double percent_scheduled_time_down=0.0; ! double percent_scheduled_time_down_known=0.0; ! double percent_unscheduled_time_down=0.0; ! double percent_unscheduled_time_down_known=0.0; ! double percent_scheduled_time_unreachable=0.0; ! double percent_scheduled_time_unreachable_known=0.0; ! double percent_unscheduled_time_unreachable=0.0; ! double percent_unscheduled_time_unreachable_known=0.0; ! char *bgclass=""; ! unsigned long time_determinate=subject->time_up+subject->time_down+subject->time_unreachable; ! unsigned long time_indeterminate=total_time-time_determinate; ! ! if(total_time>0){ ! percent_time_up=(double)(((double)subject->time_up*100.0)/(double)total_time); ! percent_time_down=(double)(((double)subject->time_down*100.0)/(double)total_time); ! percent_time_unreachable=(double)(((double)subject->time_unreachable*100.0)/(double)total_time); ! percent_time_indeterminate=(double)(((double)time_indeterminate*100.0)/(double)total_time); ! if (time_determinate > 0){ ! percent_time_up_known=(double)(((double)subject->time_up*100.0)/(double)time_determinate); ! percent_time_down_known=(double)(((double)subject->time_down*100.0)/(double)time_determinate); ! percent_time_unreachable_known=(double)(((double)subject->time_unreachable*100.0)/(double)time_determinate); ! percent_scheduled_time_up_known=(double)(((double)subject->scheduled_time_up*100.0)/(double)time_determinate); ! percent_unscheduled_time_up_known=(double)(((double)(subject->time_up-subject->scheduled_time_up)*100.0)/(double)time_determinate); ! percent_scheduled_time_down_known=(double)(((double)subject->scheduled_time_down*100.0)/(double)time_determinate); ! percent_unscheduled_time_down_known=(double)(((double)(subject->time_down-subject->scheduled_time_down)*100.0)/(double)time_determinate); ! percent_scheduled_time_unreachable_known=(double)(((double)subject->scheduled_time_unreachable*100.0)/(double)time_determinate); ! percent_unscheduled_time_unreachable_known=(double)(((double)(subject->time_unreachable-subject->scheduled_time_unreachable)*100.0)/(double)time_determinate); ! } ! percent_scheduled_time_up=(double)(((double)subject->scheduled_time_up*100.0)/(double)total_time); ! percent_unscheduled_time_up=(double)(((double)(subject->time_up-subject->scheduled_time_up)*100.0)/(double)total_time); ! percent_scheduled_time_down=(double)(((double)subject->scheduled_time_down*100.0)/(double)total_time); ! percent_unscheduled_time_down=(double)(((double)(subject->time_down-subject->scheduled_time_down)*100.0)/(double)total_time); ! percent_scheduled_time_unreachable=(double)(((double)subject->scheduled_time_unreachable*100.0)/(double)total_time); ! percent_unscheduled_time_unreachable=(double)(((double)(subject->time_unreachable-subject->scheduled_time_unreachable)*100.0)/(double)total_time); ! } ! ! if(output_format==HTML_OUTPUT){ ! if(lineCounter%2==1){ ! bgclass="Odd"; ! } else { ! bgclass="Even"; ! } ! printf("",bgclass,bgclass); ! if (hasHostName) ! host_report_url(subject->host_name,subject->host_name); ! else ! printf("%s", subject->host_name); ! printf(""); ! // print service name if we have a service... ! printf("%2.3f%% (%2.3f%%)" ! "%2.3f%% (%2.3f%%)" ! "%2.3f%% (%2.3f%%)" ! "%2.3f%%\n", ! percent_time_up,percent_time_up_known, ! percent_time_down,percent_time_down_known, ! percent_time_unreachable,percent_time_unreachable_known, ! bgclass,percent_time_indeterminate); ! } else if (output_format == CSV_OUTPUT) { ! if (hg) { ! printf("%s, ", hg->group_name); ! } else { ! printf(", "); ! } ! if (sg) { ! printf("%s, ", sg->group_name); ! } else { ! printf(", "); ! } ! printf("%s,,%lu, ", subject->host_name, total_time); ! printf("%lu, %2.3f%%, %2.3f%%, "/* scheduled_time_up */ ! "%lu, %2.3f%%, %2.3f%%, " /* unscheduled_time_up */ ! "%lu, %2.3f%%, %2.3f%%, " /* time_up */ ! "%lu, %2.3f%%, %2.3f%%, " /* scheduled_time_down */ ! "%lu, %2.3f%%, %2.3f%%, " /* unscheduled_time_down */ ! "%lu, %2.3f%%, %2.3f%%, " /* time_down */ ! "%lu, %2.3f%%, %2.3f%%, " /* time_unreachable */ ! "%lu, %2.3f%%, %2.3f%%, " /* scheduled_time_unreachable */ ! "%lu, %2.3f%%, %2.3f%%, " /* unscheduled_time_unreachable */ ! ",,,,,,,,," /* time_ok */ ! ",,,,,,,,," /* time_warning */ ! ",,,,,,,,," /* time_unknown */ ! ",,,,,,,,," /* time_critical */ ! ",,,," /* not_running / no_data */ ! "%lu, %2.3f%%\n", /* indeterminate */ ! ! subject->scheduled_time_up, percent_scheduled_time_up, percent_scheduled_time_up_known, ! (subject->time_up-subject->scheduled_time_up), percent_unscheduled_time_up, percent_unscheduled_time_up_known, ! subject->time_up, percent_time_up, percent_time_up_known, ! ! subject->scheduled_time_down, percent_scheduled_time_down, percent_scheduled_time_down_known, ! (subject->time_down-subject->scheduled_time_down), percent_unscheduled_time_down, percent_unscheduled_time_down_known, ! subject->time_down, percent_time_down, percent_time_down_known, ! ! subject->time_unreachable, percent_time_unreachable, percent_time_unreachable_known, ! (subject->time_unreachable-subject->scheduled_time_unreachable),percent_unscheduled_time_unreachable,percent_unscheduled_time_unreachable_known, ! subject->time_unreachable, percent_time_unreachable, percent_time_unreachable_known, ! ! time_indeterminate, percent_time_indeterminate); ! } ! } ! ! ! void printServicelist(int hasHostName, int hasServiceName, hostgroup *hg, servicegroup *sg,avail_subject *subject, unsigned long total_time, int lineCounter) { ! double percent_time_ok=0.0; ! double percent_time_ok_known=0.0; ! double percent_scheduled_time_ok=0.0; ! double percent_scheduled_time_ok_known=0.0; ! double percent_unscheduled_time_ok=0.0; ! double percent_unscheduled_time_ok_known=0.0; ! double percent_time_unknown=0.0; ! double percent_time_unknown_known=0.0; ! double percent_scheduled_time_unknown=0.0; ! double percent_scheduled_time_unknown_known=0.0; ! double percent_unscheduled_time_unknown=0.0; ! double percent_unscheduled_time_unknown_known=0.0; ! double percent_time_warning=0.0; ! double percent_time_warning_known=0.0; ! double percent_scheduled_time_warning=0.0; ! double percent_scheduled_time_warning_known=0.0; ! double percent_unscheduled_time_warning=0.0; ! double percent_unscheduled_time_warning_known=0.0; ! double percent_time_critical=0.0; ! double percent_time_critical_known=0.0; ! double percent_scheduled_time_critical=0.0; ! double percent_scheduled_time_critical_known=0.0; ! double percent_unscheduled_time_critical=0.0; ! double percent_unscheduled_time_critical_known=0.0; ! double percent_time_indeterminate=0.0; ! double percent_time_indeterminate_scheduled=0.0; ! double percent_time_indeterminate_unscheduled=0.0; ! double percent_time_indeterminate_notrunning=0.0; ! double percent_time_indeterminate_nodata=0.0; char *bgclass=""; ! ! unsigned long time_determinate=subject->time_ok+subject->time_warning+subject->time_unknown+subject->time_critical; ! unsigned long time_indeterminate=total_time-time_determinate; ! ! if(total_time>0){ ! percent_time_ok=(double)(((double)subject->time_ok*100.0)/(double)total_time); ! percent_scheduled_time_ok=(double)(((double)subject->scheduled_time_ok*100.0)/(double)total_time); ! percent_unscheduled_time_ok=(double)(((double)(subject->time_ok-subject->scheduled_time_ok)*100.0)/(double)total_time); ! percent_time_warning=(double)(((double)subject->time_warning*100.0)/(double)total_time); ! percent_scheduled_time_warning=(double)(((double)subject->scheduled_time_warning*100.0)/(double)total_time); ! percent_unscheduled_time_warning=(double)(((double)(subject->time_warning-subject->scheduled_time_warning)*100.0)/(double)total_time); ! percent_time_unknown=(double)(((double)subject->time_unknown*100.0)/(double)total_time); ! percent_scheduled_time_unknown=(double)(((double)subject->scheduled_time_unknown*100.0)/(double)total_time); ! percent_unscheduled_time_unknown=(double)(((double)(subject->time_unknown-subject->scheduled_time_unknown)*100.0)/(double)total_time); ! percent_time_critical=(double)(((double)subject->time_critical*100.0)/(double)total_time); ! percent_scheduled_time_critical=(double)(((double)subject->scheduled_time_critical*100.0)/(double)total_time); ! percent_unscheduled_time_critical=(double)(((double)(subject->time_critical-subject->scheduled_time_critical)*100.0)/(double)total_time); ! ! percent_time_indeterminate=(double)(((double)time_indeterminate*100.0)/(double)total_time); ! percent_time_indeterminate_scheduled=(double)(((double)subject->scheduled_time_indeterminate*100.0)/(double)total_time); ! percent_time_indeterminate_unscheduled=percent_time_indeterminate-percent_time_indeterminate_scheduled; ! percent_time_indeterminate_notrunning=(double)(((double)subject->time_indeterminate_notrunning*100.0)/(double)total_time); ! percent_time_indeterminate_nodata=(double)(((double)subject->time_indeterminate_nodata*100.0)/(double)total_time); ! ! ! if(time_determinate>0){ ! percent_time_ok_known=(double)(((double)subject->time_ok*100.0)/(double)time_determinate); ! percent_scheduled_time_ok_known=(double)(((double)subject->scheduled_time_ok*100.0)/(double)time_determinate); ! percent_unscheduled_time_ok_known=(double)(((double)(subject->time_ok-subject->scheduled_time_ok)*100.0)/(double)time_determinate); ! percent_time_warning_known=(double)(((double)subject->time_warning*100.0)/(double)time_determinate); ! percent_scheduled_time_warning_known=(double)(((double)subject->scheduled_time_warning*100.0)/(double)time_determinate); ! percent_unscheduled_time_warning_known=(double)(((double)(subject->time_warning-subject->scheduled_time_warning)*100.0)/(double)time_determinate); ! percent_time_unknown_known=(double)(((double)subject->time_unknown*100.0)/(double)time_determinate); ! percent_scheduled_time_unknown_known=(double)(((double)subject->scheduled_time_unknown*100.0)/(double)time_determinate); ! percent_unscheduled_time_unknown_known=(double)(((double)(subject->time_unknown-subject->scheduled_time_unknown)*100.0)/(double)time_determinate); ! percent_time_critical_known=(double)(((double)subject->time_critical*100.0)/(double)time_determinate); ! percent_scheduled_time_critical_known=(double)(((double)subject->scheduled_time_critical*100.0)/(double)time_determinate); ! percent_unscheduled_time_critical_known=(double)(((double)(subject->time_critical-subject->scheduled_time_critical)*100.0)/(double)time_determinate); ! } ! } ! ! if(output_format==HTML_OUTPUT){ ! if(lineCounter%2==1){ ! bgclass="Odd"; ! } else { ! bgclass="Even"; ! } ! printf("",bgclass); ! if ((hasHostName)&&(hasServiceName)) { ! printf("",bgclass); ! host_report_url(subject->host_name,subject->host_name); ! printf("",bgclass); ! service_report_url(subject->host_name,subject->service_description,subject->service_description); ! printf(""); ! } else if (hasHostName) { ! printf("",bgclass); ! host_report_url(subject->host_name,subject->host_name); ! printf(""); ! } else if (hasServiceName) { ! printf(" ",bgclass, bgclass); ! service_report_url(subject->host_name,subject->service_description,subject->service_description); ! printf(""); ! } else { ! printf(" ",bgclass); ! } ! printf("%2.3f%% (%2.3f%%)" ! "%2.3f%% (%2.3f%%)" ! "%2.3f%% (%2.3f%%)" ! "%2.3f%% (%2.3f%%)" ! "%2.3f%%\n", ! percent_time_ok, percent_time_ok_known, ! percent_time_warning, percent_time_warning_known, ! percent_time_unknown, percent_time_unknown_known, ! percent_time_critical, percent_time_critical_known, ! bgclass, percent_time_indeterminate); ! } else if (output_format == CSV_OUTPUT) { ! if (hg) { ! printf("%s, ", hg->group_name); ! } else { ! printf(", "); ! } ! if (sg) { ! printf("%s, ", sg->group_name); ! } else { ! printf(", "); ! } ! printf("%s, %s, %lu, ", subject->host_name, subject->service_description, total_time); ! ! printf( ! ",,,,,,,,," /* time_up */ ! ",,,,,,,,," /* time_down */ ! ",,,,,,,,," /* time_unreachable */ ! "%lu, %2.3f%%, %2.3f%%, " /* scheduled_time_ok */ ! "%lu, %2.3f%%, %2.3f%%, " /* unscheduled_time_ok */ ! "%lu, %2.3f%%, %2.3f%%, " /* time_ok */ ! ! "%lu, %2.3f%%, %2.3f%%, " /* scheduled_time_warning */ ! "%lu, %2.3f%%, %2.3f%%, " /* unscheduled_time_warning */ ! "%lu, %2.3f%%, %2.3f%%, " /* time_warning */ ! ! "%lu, %2.3f%%, %2.3f%%, " /* scheduled_time_unknown */ ! "%lu, %2.3f%%, %2.3f%%, " /* unscheduled_time_unknown */ ! "%lu, %2.3f%%, %2.3f%%, " /* time_unknown */ ! ! "%lu, %2.3f%%, %2.3f%%, " /* scheduled_time_critical */ ! "%lu, %2.3f%%, %2.3f%%, " /* unscheduled_time_critical */ ! "%lu, %2.3f%%, %2.3f%%, " /* time_critical */ ! "%lu, %2.3f%%, " /* not_running */ ! "%lu, %2.3f%%, " /* no_data */ ! "%lu, %2.3f%%\n", /* interminate */ ! ! subject->scheduled_time_ok, percent_scheduled_time_ok, percent_scheduled_time_ok_known, ! (subject->time_ok-subject->scheduled_time_ok), percent_unscheduled_time_ok, percent_unscheduled_time_ok_known, ! subject->time_ok, percent_time_ok, percent_time_ok_known, ! ! subject->scheduled_time_warning, percent_scheduled_time_warning, percent_scheduled_time_warning_known, ! (subject->time_warning-subject->scheduled_time_warning),percent_unscheduled_time_warning, percent_unscheduled_time_warning_known, ! subject->time_warning, percent_time_warning, percent_time_warning_known, ! ! subject->scheduled_time_unknown, percent_scheduled_time_unknown, percent_scheduled_time_unknown_known, ! (subject->time_unknown-subject->scheduled_time_unknown),percent_unscheduled_time_unknown, percent_unscheduled_time_unknown_known, ! subject->time_unknown, percent_time_unknown, percent_time_unknown_known, ! ! subject->scheduled_time_critical, percent_scheduled_time_critical, percent_scheduled_time_critical_known, ! (subject->time_critical-subject->scheduled_time_critical),percent_unscheduled_time_critical, percent_unscheduled_time_critical_known, ! subject->time_critical, percent_time_critical, percent_time_critical_known, ! ! subject->time_indeterminate_notrunning, percent_time_indeterminate_notrunning, ! subject->time_indeterminate_nodata,percent_time_indeterminate_nodata, ! time_indeterminate, percent_time_indeterminate); ! } ! } ! ! void printPageHeader() { ! if(output_format==HTML_OUTPUT){ ! } else if(output_format==CSV_OUTPUT) { ! printf("HOST_GROUP_NAME, SERVICE_GROUP_NAME, HOST_NAME, SERVICE_NAME, TOTAL_TIME, "); ! printf(" TIME_UP_SCHEDULED, PERCENT_TIME_UP_SCHEDULED, PERCENT_KNOWN_TIME_UP_SCHEDULED,TIME_UP_UNSCHEDULED, PERCENT_TIME_UP_UNSCHEDULED, PERCENT_KNOWN_TIME_UP_UNSCHEDULED,TOTAL_TIME_UP, PERCENT_TOTAL_TIME_UP, PERCENT_KNOWN_TIME_UP,"); ! printf(" TIME_DOWN_SCHEDULED, PERCENT_TIME_DOWN_SCHEDULED,PERCENT_KNOWN_TIME_DOWN_SCHEDULED, TIME_DOWN_UNSCHEDULED, PERCENT_TIME_DOWN_UNSCHEDULED,PERCENT_KNOWN_TIME_DOWN_UNSCHEDULED, TOTAL_TIME_DOWN, PERCENT_TOTAL_TIME_DOWN, PERCENT_KNOWN_TIME_DOWN,"); ! printf(" TIME_UNREACHABLE_SCHEDULED, PERCENT_TIME_UNREACHABLE_SCHEDULED,PERCENT_KNOWN_TIME_UNREACHABLE_SCHEDULED, TIME_UNREACHABLE_UNSCHEDULED,PERCENT_TIME_UNREACHABLE_UNSCHEDULED, PERCENT_KNOWN_TIME_UNREACHABLE_UNSCHEDULED,TOTAL_TIME_UNREACHABLE, PERCENT_TOTAL_TIME_UNREACHABLE, PERCENT_KNOWN_TIME_UNREACHABLE,"); ! ! printf(" TIME_OK_SCHEDULED, PERCENT_TIME_OK_SCHEDULED, PERCENT_KNOWN_TIME_OK_SCHEDULED,TIME_OK_UNSCHEDULED, PERCENT_TIME_OK_UNSCHEDULED, PERCENT_KNOWN_TIME_OK_UNSCHEDULED,TOTAL_TIME_OK, PERCENT_TOTAL_TIME_OK, PERCENT_KNOWN_TIME_OK,"); ! printf(" TIME_WARNING_SCHEDULED, PERCENT_TIME_WARNING_SCHEDULED,PERCENT_KNOWN_TIME_WARNING_SCHEDULED, TIME_WARNING_UNSCHEDULED,PERCENT_TIME_WARNING_UNSCHEDULED, PERCENT_KNOWN_TIME_WARNING_UNSCHEDULED,TOTAL_TIME_WARNING, PERCENT_TOTAL_TIME_WARNING, PERCENT_KNOWN_TIME_WARNING,"); ! printf(" TIME_UNKNOWN_SCHEDULED, PERCENT_TIME_UNKNOWN_SCHEDULED,PERCENT_KNOWN_TIME_UNKNOWN_SCHEDULED, TIME_UNKNOWN_UNSCHEDULED,PERCENT_TIME_UNKNOWN_UNSCHEDULED, PERCENT_KNOWN_TIME_UNKNOWN_UNSCHEDULED,TOTAL_TIME_UNKNOWN, PERCENT_TOTAL_TIME_UNKNOWN, PERCENT_KNOWN_TIME_UNKNOWN,"); ! printf(" TIME_CRITICAL_SCHEDULED, PERCENT_TIME_CRITICAL_SCHEDULED,PERCENT_KNOWN_TIME_CRITICAL_SCHEDULED, TIME_CRITICAL_UNSCHEDULED,PERCENT_TIME_CRITICAL_UNSCHEDULED, PERCENT_KNOWN_TIME_CRITICAL_UNSCHEDULED,TOTAL_TIME_CRITICAL, PERCENT_TOTAL_TIME_CRITICAL, PERCENT_KNOWN_TIME_CRITICAL,"); ! ! printf(" TIME_UNDETERMINED_NOT_RUNNING, PERCENT_TIME_UNDETERMINED_NOT_RUNNING,TIME_UNDETERMINED_NO_DATA, PERCENT_TIME_UNDETERMINED_NO_DATA, TOTAL_TIME_UNDETERMINED, PERCENT_TOTAL_TIME_UNDETERMINED\n"); ! } ! } ! ! void printHostlistHeadder(hostgroup *hg, servicegroup *sg) { ! if(output_format==HTML_OUTPUT){ ! printf("

\n"); ! if (hg) ! printf("
Hostgroup '%s' Host State Breakdowns:
\n",hg->group_name); ! else if (sg) ! printf("
Servicegroup '%s' Host State Breakdowns:
\n",sg->group_name); ! printf("
\n"); ! printf("\n"); ! printf("\n"); ! } else if(output_format==CSV_OUTPUT) {} ! } ! void printServicelistHeadder(hostgroup *hg, servicegroup *sg) { ! if(output_format==HTML_OUTPUT){ ! printf("

\n"); ! if (hg) ! printf("
Hostgroup '%s' Service State Breakdowns:
\n",hg->group_name); ! else if (sg) ! printf("
Servicegroup '%s' Service State Breakdowns:
\n",sg->group_name); ! else ! printf("
Unknowngroup '' Service State Breakdowns:
\n"); ! printf("
\n"); ! printf("
Host%% Time Up%%Time Down%% Time Unreachable%% Time Undetermined
\n"); ! printf("" ! "" ! "" ! "\n"); ! } else if(output_format==CSV_OUTPUT) {} ! } ! void printHostlistFooter(hostgroup *hg, servicegroup *sg) { ! if(output_format==HTML_OUTPUT){ ! printf("
HostService%% Time OK%% Time Warning%% Time Unknown%% Time Critical%% Time Undetermined
\n"); ! } else if(output_format==CSV_OUTPUT) {} ! } ! void printServicelistFooter(hostgroup *hg, servicegroup *sg) { ! if(output_format==HTML_OUTPUT){ ! printf("\n"); ! } else if(output_format==CSV_OUTPUT) {} ! } ! ! void normalizeAverages(avail_subject *subject, int subjects) { ! /* normalize average values */ ! /* @bug This has rounding bugs that I don't know if they matter perhaps a double is better then int here ?) */ ! subject->time_up /= subjects; ! subject->time_down /= subjects; ! subject->time_unreachable /= subjects; ! subject->scheduled_time_up /= subjects; ! subject->scheduled_time_down /= subjects; ! subject->scheduled_time_unreachable /= subjects; ! subject->time_ok /= subjects; ! subject->time_warning /= subjects; ! subject->time_unknown /= subjects; ! subject->time_critical /= subjects; ! subject->time_indeterminate_nodata /= subjects; ! subject->time_indeterminate_notrunning /= subjects; ! subject->scheduled_time_ok /= subjects; ! subject->scheduled_time_warning /= subjects; ! subject->scheduled_time_unknown /= subjects; ! subject->scheduled_time_critical /= subjects; ! subject->scheduled_time_indeterminate /= subjects; ! } ! void resetAverages(avail_subject *subject) { ! subject->time_up = 0; ! subject->time_down = 0; ! subject->time_unreachable = 0; ! subject->scheduled_time_up = 0; ! subject->scheduled_time_down = 0; ! subject->scheduled_time_unreachable = 0; ! subject->time_ok = 0; ! subject->time_warning = 0; ! subject->time_unknown = 0; ! subject->time_critical = 0; ! subject->time_indeterminate_nodata = 0; ! subject->time_indeterminate_notrunning = 0; ! subject->scheduled_time_ok = 0; ! subject->scheduled_time_warning = 0; ! subject->scheduled_time_unknown = 0; ! subject->scheduled_time_critical = 0; ! subject->scheduled_time_indeterminate = 0; ! } ! /* display availability for a specific hostgroup */ ! void display_specific_hostgroup_availability(hostgroup *hg){ ! avail_subject average; ! ! unsigned long total_time; ! avail_subject *temp_subject; ! int current_subject=0; ! host *temp_host; if(hg==NULL) *************** *** 3473,3488 **** if(is_authorized_for_hostgroup(hg,¤t_authdata)==FALSE) return; /* calculate total time during period based on timeperiod used for reporting */ total_time=calculate_total_time(t1,t2); ! printf("

\n"); ! printf("
Hostgroup '%s' Host State Breakdowns:
\n",hg->group_name); ! ! printf("
\n"); ! printf("\n"); ! printf("\n"); for(temp_subject=subject_list;temp_subject!=NULL;temp_subject=temp_subject->next){ if(temp_subject->type!=HOST_SUBJECT) --- 3835,3851 ---- if(is_authorized_for_hostgroup(hg,¤t_authdata)==FALSE) return; + /* reset average element */ + resetAverages(&average); + average.host_name = "average"; + /* calculate total time during period based on timeperiod used for reporting */ total_time=calculate_total_time(t1,t2); ! /* print a nice header */ ! printHostlistHeadder(hg, NULL); + /* iterate over all hosts in the set */ for(temp_subject=subject_list;temp_subject!=NULL;temp_subject=temp_subject->next){ if(temp_subject->type!=HOST_SUBJECT) *************** *** 3497,3584 **** current_subject++; ! /* reset variables */ ! percent_time_up=0.0; ! percent_time_down=0.0; ! percent_time_unreachable=0.0; ! percent_time_indeterminate=0.0; ! percent_time_up_known=0.0; ! percent_time_down_known=0.0; ! percent_time_unreachable_known=0.0; ! time_determinate=temp_subject->time_up+temp_subject->time_down+temp_subject->time_unreachable; ! time_indeterminate=total_time-time_determinate; ! ! if(total_time>0){ ! percent_time_up=(double)(((double)temp_subject->time_up*100.0)/(double)total_time); ! percent_time_down=(double)(((double)temp_subject->time_down*100.0)/(double)total_time); ! percent_time_unreachable=(double)(((double)temp_subject->time_unreachable*100.0)/(double)total_time); ! percent_time_indeterminate=(double)(((double)time_indeterminate*100.0)/(double)total_time); ! if(time_determinate>0){ ! percent_time_up_known=(double)(((double)temp_subject->time_up*100.0)/(double)time_determinate); ! percent_time_down_known=(double)(((double)temp_subject->time_down*100.0)/(double)time_determinate); ! percent_time_unreachable_known=(double)(((double)temp_subject->time_unreachable*100.0)/(double)time_determinate); ! } ! } ! ! if(odd){ ! odd=0; ! bgclass="Odd"; ! } ! else{ ! odd=1; ! bgclass="Even"; ! } ! ! printf("\n",percent_time_up,percent_time_up_known,percent_time_down,percent_time_down_known,percent_time_unreachable,percent_time_unreachable_known,bgclass,percent_time_indeterminate); ! ! get_running_average(&average_percent_time_up,percent_time_up,current_subject); ! get_running_average(&average_percent_time_up_known,percent_time_up_known,current_subject); ! get_running_average(&average_percent_time_down,percent_time_down,current_subject); ! get_running_average(&average_percent_time_down_known,percent_time_down_known,current_subject); ! get_running_average(&average_percent_time_unreachable,percent_time_unreachable,current_subject); ! get_running_average(&average_percent_time_unreachable_known,percent_time_unreachable_known,current_subject); ! get_running_average(&average_percent_time_indeterminate,percent_time_indeterminate,current_subject); ! } - /* average statistics */ - if(odd){ - odd=0; - bgclass="Odd"; - } - else{ - odd=1; - bgclass="Even"; - } - printf("",bgclass,bgclass,average_percent_time_up,average_percent_time_up_known,average_percent_time_down,average_percent_time_down_known,average_percent_time_unreachable,average_percent_time_unreachable_known,bgclass,average_percent_time_indeterminate); - - printf("
Host%% Time Up%% Time Down%% Time Unreachable%% Time Undetermined
",bgclass,bgclass); ! host_report_url(temp_subject->host_name,temp_subject->host_name); ! printf("%2.3f%% (%2.3f%%)%2.3f%% (%2.3f%%)%2.3f%% (%2.3f%%)%2.3f%%
Average%2.3f%% (%2.3f%%)%2.3f%% (%2.3f%%)%2.3f%% (%2.3f%%)%2.3f%%
\n"); - printf("
\n"); return; ! } /* display servicegroup availability */ void display_servicegroup_availability(void){ servicegroup *temp_servicegroup; /* display data for a specific servicegroup */ if(show_all_servicegroups==FALSE){ temp_servicegroup=find_servicegroup(servicegroup_name); display_specific_servicegroup_availability(temp_servicegroup); ! } /* display data for all servicegroups */ else{ for(temp_servicegroup=servicegroup_list;temp_servicegroup!=NULL;temp_servicegroup=temp_servicegroup->next) display_specific_servicegroup_availability(temp_servicegroup); ! } return; ! } --- 3860,3907 ---- current_subject++; ! printHostlist(1, hg, NULL, temp_subject, total_time, current_subject); ! /* calculate average values */ ! average.time_up += temp_subject->time_up; ! average.time_down += temp_subject->time_down; ! average.time_unreachable += temp_subject->time_unreachable; ! average.scheduled_time_up += temp_subject->scheduled_time_up; ! average.scheduled_time_down += temp_subject->scheduled_time_down; ! average.scheduled_time_unreachable += temp_subject->scheduled_time_unreachable; ! } ! ! if (current_subject > 0) { ! normalizeAverages(&average, current_subject); ! printHostlist(0, hg, NULL, &average, total_time, current_subject+1); ! } ! printHostlistFooter(hg, NULL); return; ! } /* display servicegroup availability */ void display_servicegroup_availability(void){ servicegroup *temp_servicegroup; + printPageHeader(); + /* display data for a specific servicegroup */ if(show_all_servicegroups==FALSE){ temp_servicegroup=find_servicegroup(servicegroup_name); display_specific_servicegroup_availability(temp_servicegroup); ! } /* display data for all servicegroups */ else{ for(temp_servicegroup=servicegroup_list;temp_servicegroup!=NULL;temp_servicegroup=temp_servicegroup->next) display_specific_servicegroup_availability(temp_servicegroup); ! } return; ! } *************** *** 3588,3629 **** unsigned long time_determinate; unsigned long time_indeterminate; avail_subject *temp_subject; ! double percent_time_up=0.0; ! double percent_time_down=0.0; ! double percent_time_unreachable=0.0; ! double percent_time_up_known=0.0; ! double percent_time_down_known=0.0; ! double percent_time_unreachable_known=0.0; ! double percent_time_indeterminate=0.0; ! double percent_time_ok=0.0; ! double percent_time_warning=0.0; ! double percent_time_unknown=0.0; ! double percent_time_critical=0.0; ! double percent_time_ok_known=0.0; ! double percent_time_warning_known=0.0; ! double percent_time_unknown_known=0.0; ! double percent_time_critical_known=0.0; ! ! double average_percent_time_up=0.0; ! double average_percent_time_up_known=0.0; ! double average_percent_time_down=0.0; ! double average_percent_time_down_known=0.0; ! double average_percent_time_unreachable=0.0; ! double average_percent_time_unreachable_known=0.0; ! double average_percent_time_ok=0.0; ! double average_percent_time_ok_known=0.0; ! double average_percent_time_unknown=0.0; ! double average_percent_time_unknown_known=0.0; ! double average_percent_time_warning=0.0; ! double average_percent_time_warning_known=0.0; ! double average_percent_time_critical=0.0; ! double average_percent_time_critical_known=0.0; ! double average_percent_time_indeterminate=0.0; ! int current_subject=0; - - char *bgclass=""; - int odd=1; host *temp_host; service *temp_service; char last_host[MAX_INPUT_BUFFER]; --- 3911,3918 ---- unsigned long time_determinate; unsigned long time_indeterminate; avail_subject *temp_subject; ! avail_subject average; int current_subject=0; host *temp_host; service *temp_service; char last_host[MAX_INPUT_BUFFER]; *************** *** 3635,3649 **** if(is_authorized_for_servicegroup(sg,¤t_authdata)==FALSE) return; /* calculate total time during period based on timeperiod used for reporting */ total_time=calculate_total_time(t1,t2); ! ! printf("

\n"); ! printf("
Servicegroup '%s' Host State Breakdowns:
\n",sg->group_name); ! ! printf("
\n"); ! printf("\n"); ! printf("\n"); for(temp_subject=subject_list;temp_subject!=NULL;temp_subject=temp_subject->next){ --- 3924,3937 ---- if(is_authorized_for_servicegroup(sg,¤t_authdata)==FALSE) return; + /* reset average element */ + average.host_name = "average"; + average.service_description = "average"; + resetAverages(&average); + /* calculate total time during period based on timeperiod used for reporting */ total_time=calculate_total_time(t1,t2); ! printHostlistHeadder(NULL, sg); for(temp_subject=subject_list;temp_subject!=NULL;temp_subject=temp_subject->next){ *************** *** 3658,3733 **** continue; current_subject++; ! /* reset variables */ ! percent_time_up=0.0; ! percent_time_down=0.0; ! percent_time_unreachable=0.0; ! percent_time_indeterminate=0.0; ! percent_time_up_known=0.0; ! percent_time_down_known=0.0; ! percent_time_unreachable_known=0.0; ! ! time_determinate=temp_subject->time_up+temp_subject->time_down+temp_subject->time_unreachable; ! time_indeterminate=total_time-time_determinate; ! ! if(total_time>0){ ! percent_time_up=(double)(((double)temp_subject->time_up*100.0)/(double)total_time); ! percent_time_down=(double)(((double)temp_subject->time_down*100.0)/(double)total_time); ! percent_time_unreachable=(double)(((double)temp_subject->time_unreachable*100.0)/(double)total_time); ! percent_time_indeterminate=(double)(((double)time_indeterminate*100.0)/(double)total_time); ! if(time_determinate>0){ ! percent_time_up_known=(double)(((double)temp_subject->time_up*100.0)/(double)time_determinate); ! percent_time_down_known=(double)(((double)temp_subject->time_down*100.0)/(double)time_determinate); ! percent_time_unreachable_known=(double)(((double)temp_subject->time_unreachable*100.0)/(double)time_determinate); ! } ! } ! ! if(odd){ ! odd=0; ! bgclass="Odd"; ! } ! else{ ! odd=1; ! bgclass="Even"; ! } ! ! printf("\n",percent_time_up,percent_time_up_known,percent_time_down,percent_time_down_known,percent_time_unreachable,percent_time_unreachable_known,bgclass,percent_time_indeterminate); ! ! get_running_average(&average_percent_time_up,percent_time_up,current_subject); ! get_running_average(&average_percent_time_up_known,percent_time_up_known,current_subject); ! get_running_average(&average_percent_time_down,percent_time_down,current_subject); ! get_running_average(&average_percent_time_down_known,percent_time_down_known,current_subject); ! get_running_average(&average_percent_time_unreachable,percent_time_unreachable,current_subject); ! get_running_average(&average_percent_time_unreachable_known,percent_time_unreachable_known,current_subject); ! get_running_average(&average_percent_time_indeterminate,percent_time_indeterminate,current_subject); ! } ! ! /* average statistics */ ! if(odd){ ! odd=0; ! bgclass="Odd"; ! } ! else{ ! odd=1; ! bgclass="Even"; ! } ! printf("",bgclass,bgclass,average_percent_time_up,average_percent_time_up_known,average_percent_time_down,average_percent_time_down_known,average_percent_time_unreachable,average_percent_time_unreachable_known,bgclass,average_percent_time_indeterminate); ! printf("
Host%% Time Up%% Time Down%% Time Unreachable%% Time Undetermined
",bgclass,bgclass); ! host_report_url(temp_subject->host_name,temp_subject->host_name); ! printf("%2.3f%% (%2.3f%%)%2.3f%% (%2.3f%%)%2.3f%% (%2.3f%%)%2.3f%%
Average%2.3f%% (%2.3f%%)%2.3f%% (%2.3f%%)%2.3f%% (%2.3f%%)%2.3f%%
\n"); ! printf("
\n"); ! printf("
\n"); ! printf("
Servicegroup '%s' Service State Breakdowns:
\n",sg->group_name); ! ! printf("
\n"); ! printf("\n"); ! printf("\n"); current_subject=0; - average_percent_time_indeterminate=0.0; for(temp_subject=subject_list;temp_subject!=NULL;temp_subject=temp_subject->next){ --- 3946,3974 ---- continue; current_subject++; + printHostlist(1, NULL, sg, temp_subject, total_time, current_subject); ! /* calculate average values */ ! average.time_up += temp_subject->time_up; ! average.time_down += temp_subject->time_down; ! average.time_unreachable += temp_subject->time_unreachable; ! average.scheduled_time_up += temp_subject->scheduled_time_up; ! average.scheduled_time_down += temp_subject->scheduled_time_down; ! average.scheduled_time_unreachable += temp_subject->scheduled_time_unreachable; ! } ! if (current_subject > 0) { ! normalizeAverages(&average, current_subject); ! printHostlist(0, NULL, sg, &average, total_time, current_subject+1); ! } ! printHostlistFooter(NULL, sg); ! /* reset averages */ ! resetAverages(&average); + /* print the service list */ + printServicelistHeadder(NULL, sg); current_subject=0; for(temp_subject=subject_list;temp_subject!=NULL;temp_subject=temp_subject->next){ *************** *** 3743,3824 **** current_subject++; - time_determinate=temp_subject->time_ok+temp_subject->time_warning+temp_subject->time_unknown+temp_subject->time_critical; - time_indeterminate=total_time-time_determinate; - - /* adjust indeterminate time due to insufficient data (not all was caught) */ - temp_subject->time_indeterminate_nodata=time_indeterminate-temp_subject->time_indeterminate_notrunning; - - /* initialize values */ - percent_time_ok=0.0; - percent_time_warning=0.0; - percent_time_unknown=0.0; - percent_time_critical=0.0; - percent_time_ok_known=0.0; - percent_time_warning_known=0.0; - percent_time_unknown_known=0.0; - percent_time_critical_known=0.0; - - if(total_time>0){ - percent_time_ok=(double)(((double)temp_subject->time_ok*100.0)/(double)total_time); - percent_time_warning=(double)(((double)temp_subject->time_warning*100.0)/(double)total_time); - percent_time_unknown=(double)(((double)temp_subject->time_unknown*100.0)/(double)total_time); - percent_time_critical=(double)(((double)temp_subject->time_critical*100.0)/(double)total_time); - if(time_determinate>0){ - percent_time_ok_known=(double)(((double)temp_subject->time_ok*100.0)/(double)time_determinate); - percent_time_warning_known=(double)(((double)temp_subject->time_warning*100.0)/(double)time_determinate); - percent_time_unknown_known=(double)(((double)temp_subject->time_unknown*100.0)/(double)time_determinate); - percent_time_critical_known=(double)(((double)temp_subject->time_critical*100.0)/(double)time_determinate); - } - } - - if(odd){ - odd=0; - bgclass="Odd"; - } - else{ - odd=1; - bgclass="Even"; - } - - printf("\n",percent_time_ok,percent_time_ok_known,percent_time_warning,percent_time_warning_known,percent_time_unknown,percent_time_unknown_known,percent_time_critical,percent_time_critical_known,bgclass,percent_time_indeterminate); strncpy(last_host,temp_subject->host_name,sizeof(last_host)-1); last_host[sizeof(last_host)-1]='\x0'; ! get_running_average(&average_percent_time_ok,percent_time_ok,current_subject); ! get_running_average(&average_percent_time_ok_known,percent_time_ok_known,current_subject); ! get_running_average(&average_percent_time_unknown,percent_time_unknown,current_subject); ! get_running_average(&average_percent_time_unknown_known,percent_time_unknown_known,current_subject); ! get_running_average(&average_percent_time_warning,percent_time_warning,current_subject); ! get_running_average(&average_percent_time_warning_known,percent_time_warning_known,current_subject); ! get_running_average(&average_percent_time_critical,percent_time_critical,current_subject); ! get_running_average(&average_percent_time_critical_known,percent_time_critical_known,current_subject); ! get_running_average(&average_percent_time_indeterminate,percent_time_indeterminate,current_subject); ! } ! ! /* display average stats */ ! if(odd){ ! odd=0; ! bgclass="Odd"; ! } ! else{ ! odd=1; ! bgclass="Even"; ! } ! ! printf("\n",bgclass,bgclass,average_percent_time_ok,average_percent_time_ok_known,average_percent_time_warning,average_percent_time_warning_known,average_percent_time_unknown,average_percent_time_unknown_known,average_percent_time_critical,average_percent_time_critical_known,bgclass,average_percent_time_indeterminate); ! printf("
HostService%% Time OK%% Time Warning%% Time Unknown%% Time Critical%% Time Undetermined
",bgclass,bgclass); if(strcmp(temp_subject->host_name,last_host)) ! host_report_url(temp_subject->host_name,temp_subject->host_name); ! printf("",bgclass); ! service_report_url(temp_subject->host_name,temp_subject->service_description,temp_subject->service_description); ! printf("%2.3f%% (%2.3f%%)%2.3f%% (%2.3f%%)%2.3f%% (%2.3f%%)%2.3f%% (%2.3f%%)%2.3f%%
Average%2.3f%% (%2.3f%%)%2.3f%% (%2.3f%%)%2.3f%% (%2.3f%%)%2.3f%% (%2.3f%%)%2.3f%%
\n"); ! printf("
\n"); return; ! } /* display host availability */ --- 3984,4018 ---- current_subject++; if(strcmp(temp_subject->host_name,last_host)) ! printServicelist(1, 1, NULL, sg, temp_subject, total_time, current_subject); ! else ! printServicelist(0, 1, NULL, sg, temp_subject, total_time, current_subject); strncpy(last_host,temp_subject->host_name,sizeof(last_host)-1); last_host[sizeof(last_host)-1]='\x0'; ! /* calculate average values */ ! average.time_ok += temp_subject->time_ok; ! average.time_warning += temp_subject->time_warning; ! average.time_critical += temp_subject->time_critical; ! average.time_indeterminate_nodata += temp_subject->time_indeterminate_nodata; ! average.time_indeterminate_notrunning += temp_subject->time_indeterminate_notrunning; ! average.scheduled_time_ok += temp_subject->scheduled_time_ok; ! average.scheduled_time_warning += temp_subject->scheduled_time_warning; ! average.scheduled_time_critical += temp_subject->scheduled_time_critical; ! average.scheduled_time_unreachable += temp_subject->scheduled_time_unreachable; ! average.scheduled_time_indeterminate += temp_subject->scheduled_time_indeterminate; ! } ! if (current_subject > 0) { ! normalizeAverages(&average, current_subject); ! printServicelist(0, 0, NULL, sg, &average, total_time, current_subject+1); ! } + printServicelistFooter(NULL, sg); return; ! } /* display host availability */ *************** *** 4266,4272 **** printf("\"%s\",",temp_subject->host_name); /* up times */ ! printf(" %lu, %2.3f%%, %2.3f%%, %lu, %2.3f%%, %2.3f%%, %lu, %2.3f%%, %2.3f%%,",temp_subject->scheduled_time_up,percent_time_up_scheduled,percent_time_up_scheduled_known,temp_subject->time_up-temp_subject->scheduled_time_up,percent_time_up_unscheduled,percent_time_up_unscheduled_known,temp_subject->time_up,percent_time_up,percent_time_up_known); /* down times */ printf(" %lu, %2.3f%%, %2.3f%%, %lu, %2.3f%%, %2.3f%%, %lu, %2.3f%%, %2.3f%%,",temp_subject->scheduled_time_down,percent_time_down_scheduled,percent_time_down_scheduled_known,temp_subject->time_down-temp_subject->scheduled_time_down,percent_time_down_unscheduled,percent_time_down_unscheduled_known,temp_subject->time_down,percent_time_down,percent_time_down_known); --- 4460,4468 ---- printf("\"%s\",",temp_subject->host_name); /* up times */ ! printf(" %lu, %2.3f%%, %2.3f%%, %lu, %2.3f%%, %2.3f%%, %lu, %2.3f%%, %2.3f%%,", ! temp_subject->scheduled_time_up,percent_time_up_scheduled,percent_time_up_scheduled_known, ! temp_subject->time_up-temp_subject->scheduled_time_up,percent_time_up_unscheduled,percent_time_up_unscheduled_known,temp_subject->time_up,percent_time_up,percent_time_up_known); /* down times */ printf(" %lu, %2.3f%%, %2.3f%%, %lu, %2.3f%%, %2.3f%%, %lu, %2.3f%%, %2.3f%%,",temp_subject->scheduled_time_down,percent_time_down_scheduled,percent_time_down_scheduled_known,temp_subject->time_down-temp_subject->scheduled_time_down,percent_time_down_unscheduled,percent_time_down_unscheduled_known,temp_subject->time_down,percent_time_down,percent_time_down_known); *************** *** 4791,4801 **** /* calculates running average */ void get_running_average(double *running_average, double new_value, int current_item){ - *running_average=(((*running_average*((double)current_item-1.0))+new_value)/(double)current_item); - return; ! } /* used in reports where a timeperiod is selected */ --- 4987,4995 ---- /* calculates running average */ void get_running_average(double *running_average, double new_value, int current_item){ *running_average=(((*running_average*((double)current_item-1.0))+new_value)/(double)current_item); return; ! } /* used in reports where a timeperiod is selected */