📄 bench.c
字号:
the_stats->endtime = text_to_timeval(strtok((char *)0, "\t"));
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 */
void
rqtimer_init(rqst_timer_t *p) {
memset(p, 0, sizeof(*p));
}
void
rqstat_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;
}
void
stats_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;
}
void
page_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;
*/
}
void
rqstat_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;
}
void
rqstat_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);
}
void
rqstat_print(rqst_stats_t *stats)
{
rqstat_fprint(stdout, stats);
}
void
rqstat_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 + -