📄 bench.c
字号:
the_stats->datatime = text_to_timeval(strtok((char *)0, "\t")); the_stats->totalpages = (unsigned long) text_to_double(strtok((char *)0, "\t")); the_stats->total_num_of_files = (unsigned int) text_to_double(strtok((char *)0, "\t")); for (i = 0; i < number_of_pages; i++) { the_stats->page_numbers[i] = (unsigned int) text_to_double(strtok((char *)0, "\t")); } /* return bytes read */ D_PRINTF( "Returning stats\n"); return(the_stats);} /* end text_to_stats */char * stats_to_text(const stats_t *the_stats) { int i; THREAD static char stats_as_text[SIZEOF_STATSTEXT]; char *tmpbuf; rqst_stats_t the_rqst_stats; *stats_as_text = 0; /* stats.rs */ the_rqst_stats = the_stats->rs; tmpbuf = rqst_stats_to_text(&the_rqst_stats); strcat(stats_as_text, tmpbuf); /* main structure */ tmpbuf = timeval_to_text(&(the_stats->starttime)); strcat(stats_as_text, tmpbuf); tmpbuf = timeval_to_text(&(the_stats->endtime)); strcat(stats_as_text, tmpbuf); tmpbuf = timeval_to_text(&(the_stats->datatime)); strcat(stats_as_text, tmpbuf); tmpbuf = double_to_text((the_stats->totalpages)); strcat(stats_as_text, tmpbuf); tmpbuf = double_to_text((the_stats->total_num_of_files)); strcat(stats_as_text, tmpbuf); for (i = 0; i < number_of_pages; i++) { tmpbuf = double_to_text((the_stats->page_numbers[i])); strcat(stats_as_text, tmpbuf); } strcat(stats_as_text, "\n"); return(stats_as_text);} /* end stats_to_text */page_stats_t *text_to_page_stats(char *page_stats_as_text) { rqst_stats_t *the_rqst_stats; THREAD static page_stats_t pagestat; page_stats_t *pagestats = &pagestat; /* grab stats.rs */ the_rqst_stats = text_to_rqst_stats(page_stats_as_text); /* grab main structure */ pagestats->totalpages = (unsigned long) text_to_double(strtok((char *)0, "\t")); pagestats->page_size = (unsigned int) text_to_double(strtok((char *)0, "\t")); pagestats->page_valid = (int) text_to_double(strtok((char *)0, "\t")); pagestats->rs = *the_rqst_stats; /* return bytes read */ return(pagestats);} /* end text_to_page_stats */char * page_stats_to_text(const page_stats_t *pagestats) { THREAD static char page_stats_as_text[SIZEOF_PAGESTATSTEXT]; char *tmpbuf; rqst_stats_t the_rqst_stats; *page_stats_as_text = 0; /* stats.rs */ the_rqst_stats = pagestats->rs; tmpbuf = rqst_stats_to_text(&the_rqst_stats); strcat(page_stats_as_text, tmpbuf); /* main structure */ tmpbuf = double_to_text(pagestats->totalpages); strcat(page_stats_as_text, tmpbuf); tmpbuf = double_to_text(pagestats->page_size); strcat(page_stats_as_text, tmpbuf); tmpbuf = double_to_text(pagestats->page_valid); strcat(page_stats_as_text, tmpbuf); strcat(page_stats_as_text, "\n"); return(page_stats_as_text);} /* end page_stats_to_text */voidrqtimer_init(rqst_timer_t *p) { memset(p, 0, sizeof(*p));}voidrqstat_init(rqst_stats_t *p) { memset(p, 0, sizeof(*p)); p->minbytes = DBL_MAX; p->minbody = DBL_MAX; p->minconnecttime.tv_sec = LONG_MAX; p->minconnecttime.tv_usec = LONG_MAX; p->minresponsetime.tv_sec = LONG_MAX; p->minresponsetime.tv_usec = LONG_MAX;}voidstats_init(stats_t *p) { memset(p, 0, sizeof(*p)); p->rs.minbytes = DBL_MAX; p->rs.minbody = DBL_MAX; p->rs.minconnecttime.tv_sec = LONG_MAX; p->rs.minconnecttime.tv_usec = LONG_MAX; p->rs.minresponsetime.tv_sec = LONG_MAX; p->rs.minresponsetime.tv_usec = LONG_MAX;}voidpage_stats_init(page_stats_t *p) { memset(p, 0, sizeof(*p)); /* commented out so that unread pages result in page_stats_as_text buffer overflow p->rs.minbytes = DBL_MAX; p->rs.minbody = DBL_MAX; p->rs.minconnecttime.tv_sec = LONG_MAX; p->rs.minconnecttime.tv_usec = LONG_MAX; p->rs.minresponsetime.tv_sec = LONG_MAX; p->rs.minresponsetime.tv_usec = LONG_MAX; */}voidrqstat_times(rqst_stats_t *rs, rqst_timer_t *rt){ double t; compdifftime(&(rt->exittime), &(rt->entertime), &(rs->totalresponsetime)); t = timevaldouble(&(rs->totalresponsetime)); rs->totalresponsetimesq = t * t; rs->minresponsetime = rs->totalresponsetime; rs->maxresponsetime = rs->totalresponsetime; compdifftime(&(rt->afterconnect), &(rt->beforeconnect), &(rs->totalconnecttime)); t = timevaldouble(&(rs->totalconnecttime)); rs->totalconnecttimesq = t * t; rs->minconnecttime = rs->totalconnecttime; rs->maxconnecttime = rs->totalconnecttime; rs->totalbody = rt->bodybytes; rs->totalbodysq = ((double)(rt->bodybytes)) * ((double)(rt->bodybytes)); rs->minbody = rt->bodybytes; rs->maxbody = rt->bodybytes; rs->totalbytes = rt->totalbytes; rs->totalbytessq = ((double)(rt->totalbytes)) * ((double)(rt->totalbytes)); rs->minbytes = rt->totalbytes; rs->maxbytes = rt->totalbytes; rs->totalconnects = 1; rs->totalerrs = 0; rs->totalerrortime.tv_sec = 0; rs->totalerrortime.tv_usec = 0;}voidrqstat_sum(rqst_stats_t *sum, rqst_stats_t *incr){ addtime( &(sum->totalresponsetime), &(incr->totalresponsetime)); mintime( &(sum->minresponsetime), &(incr->minresponsetime)); maxtime( &(sum->maxresponsetime), &(incr->maxresponsetime)); sum->totalresponsetimesq += incr->totalresponsetimesq; addtime( &(sum->totalconnecttime), &(incr->totalconnecttime)); mintime( &(sum->minconnecttime), &(incr->minconnecttime)); maxtime( &(sum->maxconnecttime), &(incr->maxconnecttime)); sum->totalconnecttimesq += incr->totalconnecttimesq; sum->totalconnects += incr->totalconnects; sum->totalerrs += incr->totalerrs; addtime( &(sum->totalerrortime), &(incr->totalerrortime)); sum->totalbytes += incr->totalbytes; sum->totalbytessq += incr->totalbytessq; sum->minbytes = min(sum->minbytes, incr->minbytes); sum->maxbytes = max(sum->maxbytes, incr->maxbytes); sum->totalbody += incr->totalbody; sum->totalbodysq += incr->totalbodysq; sum->minbody = min(sum->minbody, incr->minbody); sum->maxbody = max(sum->maxbody, incr->maxbody);}voidrqstat_print(rqst_stats_t *stats){ rqstat_fprint(stdout, stats);}voidrqstat_fprint(FILE *f, rqst_stats_t *stats){ struct timeval meantime, /*vartime,*/ stdtime; fprintf(f, "%d connection(s) to server, %d errors\n", stats->totalconnects, stats->totalerrs); if (stats->totalconnects == 0) { fprintf(f,"NO CONNECTIONS, THEREFORE NO STATISTICS\n" "IS YOUR WEBSERVER RUNNING?\n" "DO THE PAGES EXIST ON THE SERVER?\n"); return; } /* title */ fprintf(f, "\n\t\t\t Average Std Dev Minimum Maximum\n\n"); /* first line (connect time) */ avgtime(&(stats->totalconnecttime), stats->totalconnects, &meantime); /* variancetime(&(stats->totalconnecttime), stats->totalconnecttimesq, stats->totalconnects, &vartime); */ stddevtime(&(stats->totalconnecttime), stats->totalconnecttimesq, stats->totalconnects, &stdtime); fprintf(f, "Connect time (sec) \t%3d.%6.6d %3d.%6.6d %3d.%6.6d %3d.%6.6d\n", meantime.tv_sec, meantime.tv_usec, stdtime.tv_sec, stdtime.tv_usec, stats->minconnecttime.tv_sec, stats->minconnecttime.tv_usec, stats->maxconnecttime.tv_sec, stats->maxconnecttime.tv_usec); /* second line (response time) */ avgtime(&(stats->totalresponsetime), stats->totalconnects, &meantime); /* variancetime(&(stats->totalresponsetime), stats->totalresponsetimesq, stats->totalconnects, &vartime); */ stddevtime(&(stats->totalresponsetime), stats->totalresponsetimesq, stats->totalconnects, &stdtime); fprintf(f, "Response time (sec) \t%3d.%6.6d %3d.%6.6d %3d.%6.6d %3d.%6.6d\n", meantime.tv_sec, meantime.tv_usec, stdtime.tv_sec, stdtime.tv_usec, stats->minresponsetime.tv_sec, stats->minresponsetime.tv_usec, stats->maxresponsetime.tv_sec, stats->maxresponsetime.tv_usec); /* 3rd-5th lines (response size, body size, # bytes moved */ fprintf(f, "Response size (bytes) \t%10.0lf %10.0lf %10.0lf %10.0lf\n", mean(stats->totalbytes, stats->totalconnects), stddev(stats->totalbytes, stats->totalbytessq, stats->totalconnects), stats->minbytes, stats->maxbytes); fprintf(f, "Body size (bytes) \t%10.0lf %10.0lf %10.0lf %10.0lf\n\n", mean(stats->totalbody, stats->totalconnects), stddev(stats->totalbody, stats->totalbodysq, stats->totalconnects), stats->minbody, stats->maxbody); fprintf(f, "%.0lf body bytes moved + %.0lf header bytes moved = %.0lf total\n", stats->totalbody, stats->totalbytes - stats->totalbody, stats->totalbytes);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -