/* File: proxy_util.c Description: miscellaneous utility functions. */ #include #include #include #include #include "proxy_protos.h" /* log a message to the log file (or stderr) */ void log_msg ( struct mdata *md, char *fmt, ... ) { va_list ap; char bt[256]; char buf[BUFSIZ]; time_t t; struct tm tm; t = time(NULL); localtime_r(&t,&tm); strftime(bt,sizeof(bt)-1,"%Y-%m-%d %T",&tm); bt[sizeof(bt)-1] = 0; va_start(ap, fmt); vsnprintf(buf,sizeof(buf)-1,fmt,ap); buf[sizeof(buf)-1] = 0; va_end(ap); fprintf(md->log_fp,"[%s] %s\n",bt,buf); } /* print out some information from the global data structure */ void print_stats ( struct mdata *md ) { log_msg(md,"Available file descriptors: %d", md->nofile); log_msg(md,"Main event loop iterations: %d", md->iterations); log_msg(md,"Events received in main loop: %d", md->events); log_msg(md,"Event errors recorded: %d", md->kevent_errors); log_msg(md,"Client connections accepted: %d", md->accepts); log_msg(md,"Bytes read from clients: %d", md->bytes_read[CLIENT]); log_msg(md,"Bytes written to clients: %d", md->bytes_written[CLIENT]); log_msg(md,"Bytes read from server: %d", md->bytes_read[SERVER]); log_msg(md,"Bytes written to server: %d", md->bytes_written[SERVER]); log_msg(md,"Maximum concurrent clients: %d", md->max_clients); log_msg(md,"Time reading from clients: %.3f", md->time_reading[CLIENT]); log_msg(md,"Time reading from server: %.3f", md->time_reading[SERVER]); log_msg(md,"Time writing to clients: %.3f", md->time_writing[CLIENT]); log_msg(md,"Time writing to server: %.3f", md->time_writing[SERVER]); if ( md->time_reading[SERVER] > 0.0 ) { log_msg(md,"Acceleration factor: %.3f", md->time_writing[CLIENT]/md->time_reading[SERVER]); } } /* difference between two struct timevals */ float diff_timeval ( struct timeval *t_start, struct timeval *t_finish ) { float f; f = (t_finish->tv_sec - t_start->tv_sec) + (t_finish->tv_usec - t_start->tv_usec) / 1000000.0; return f; }