You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by Jim Jagielski <ji...@hyperreal.org> on 1997/07/07 16:34:35 UTC

cvs commit: apache/src CHANGES PORTING conf.h http_main.c http_main.h http_request.c mod_status.c mod_usertrack.c scoreboard.h

jim         97/07/07 07:34:34

  Modified:    src       CHANGES PORTING conf.h http_main.c http_main.h
                        http_request.c  mod_status.c mod_usertrack.c
                        scoreboard.h
  Log:
  Determine and display the time required to process
  a request for the status module
  
  Revision  Changes    Path
  1.324     +4 -0      apache/src/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /export/home/cvs/apache/src/CHANGES,v
  retrieving revision 1.323
  retrieving revision 1.324
  diff -C3 -r1.323 -r1.324
  *** CHANGES	1997/07/06 05:37:18	1.323
  --- CHANGES	1997/07/07 14:34:24	1.324
  ***************
  *** 1,4 ****
  --- 1,8 ----
    Changes with Apache 1.3
  + 
  +   *) We now determine and display the time spent processing a
  +      request if desired.
  + 
      *) CGI: Add a select() loop so that CGI scripts don't have to be
         nph in order to be "unbuffered". [Sameer Parekh]
    
  
  
  
  1.7       +3 -0      apache/src/PORTING
  
  Index: PORTING
  ===================================================================
  RCS file: /export/home/cvs/apache/src/PORTING,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -C3 -r1.6 -r1.7
  *** PORTING	1997/06/30 21:42:31	1.6
  --- PORTING	1997/07/07 14:34:24	1.7
  ***************
  *** 230,235 ****
  --- 230,238 ----
          NO_SLACK:
           Do not use the "slack" fd feature which requires a working fcntl
           F_DUPFD.
  +       NO_GETTIMEOFDAY:
  +        OS does not have the gettimeofday() function (which is
  +        BSDish). This assumes it has times() instead.
    --
    
      MISC #DEFINES:
  
  
  
  1.111     +1 -0      apache/src/conf.h
  
  Index: conf.h
  ===================================================================
  RCS file: /export/home/cvs/apache/src/conf.h,v
  retrieving revision 1.110
  retrieving revision 1.111
  diff -C3 -r1.110 -r1.111
  *** conf.h	1997/07/02 03:38:30	1.110
  --- conf.h	1997/07/07 14:34:25	1.111
  ***************
  *** 74,79 ****
  --- 74,80 ----
    extern void GETUSERMODE();
    extern char *inet_ntoa();
    #define NO_SLACK
  + #define NO_GETTIMEOFDAY
    
    #elif defined(SUNOS4)
    #define HAVE_GMTOFF
  
  
  
  1.174     +48 -3     apache/src/http_main.c
  
  Index: http_main.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/http_main.c,v
  retrieving revision 1.173
  retrieving revision 1.174
  diff -C3 -r1.173 -r1.174
  *** http_main.c	1997/07/02 04:09:06	1.173
  --- http_main.c	1997/07/07 14:34:26	1.174
  ***************
  *** 1149,1154 ****
  --- 1149,1195 ----
    }
    
    #if defined(STATUS)
  + void time_process_request (int child_num, int status)
  + {
  +     short_score new_score_rec;
  + #if defined(NO_GETTIMEOFDAY)
  +     struct tms tms_blk;
  + #endif
  + 
  +     if (child_num < 0)
  + 	return ;
  +     
  +     sync_scoreboard_image();
  +     new_score_rec = scoreboard_image->servers[child_num];
  + 
  +     if (status == START_PREQUEST) {
  + #if defined(NO_GETTIMEOFDAY)
  + 	if ((new_score_rec.start_time = times(&tms_blk)) == -1)
  + 	    new_score_rec.start_time = (clock_t)0;
  + #else
  + 	if (gettimeofday(&new_score_rec.start_time, (struct timezone *)0) < 0)
  + 	    new_score_rec.start_time.tv_sec =
  + 	    new_score_rec.start_time.tv_usec = 0L;
  + #endif
  +     }
  +     else if (status == STOP_PREQUEST) {
  + #if defined(NO_GETTIMEOFDAY)
  + 	if ((new_score_rec.stop_time = times(&tms_blk)) == -1)
  + 	    new_score_rec.stop_time = new_score_rec.start_time = (clock_t)0;
  + #else
  + 	if (gettimeofday(&new_score_rec.stop_time, (struct timezone *)0) < 0)
  + 	    new_score_rec.stop_time.tv_sec =
  + 	    new_score_rec.stop_time.tv_usec =
  + 	    new_score_rec.start_time.tv_sec =
  + 	    new_score_rec.start_time.tv_usec = 0L;
  + #endif
  + 
  +     }
  + 
  +     put_scoreboard_info(child_num, &new_score_rec);
  + 
  + }
  + 
    static void increment_counts (int child_num, request_rec *r)
    {
        long int bs=0;
  ***************
  *** 1156,1164 ****
  --- 1197,1207 ----
    
        sync_scoreboard_image();
        new_score_rec = scoreboard_image->servers[child_num];
  + 
        if (r->sent_bodyct)
            bgetopt(r->connection->client, BO_BYTECT, &bs);
    
  +     times(&new_score_rec.times);
        new_score_rec.access_count ++;
        new_score_rec.my_access_count ++;
        new_score_rec.conn_count ++;
  ***************
  *** 1166,1173 ****
        new_score_rec.my_bytes_served += (unsigned long)bs;
        new_score_rec.conn_bytes += (unsigned long)bs;
    
  -     times(&new_score_rec.times);
  - 
        put_scoreboard_info(child_num, &new_score_rec); 
    }
    #endif
  --- 1209,1214 ----
  ***************
  *** 2238,2247 ****
                (void)update_child_status(child_num, SERVER_BUSY_WRITE, r);
    
                process_request(r);
    #if defined(STATUS)
                increment_counts(child_num, r);
    #endif
  !             if (!current_conn->keepalive || current_conn->aborted)
                    break;
    
                destroy_pool(r->pool);
  --- 2279,2290 ----
                (void)update_child_status(child_num, SERVER_BUSY_WRITE, r);
    
                process_request(r);
  + 
    #if defined(STATUS)
                increment_counts(child_num, r);
    #endif
  ! 
  !             if (!current_conn->keepalive || current_conn->aborted) 
                    break;
    
                destroy_pool(r->pool);
  ***************
  *** 2981,2989 ****
  --- 3024,3034 ----
                (void)update_child_status(child_num, SERVER_BUSY_WRITE, r);
    
                process_request(r);
  + 
    #if defined(STATUS)
                increment_counts(child_num, r);
    #endif
  + 
                if (!current_conn->keepalive || current_conn->aborted)
                    break;
    
  
  
  
  1.13      +1 -0      apache/src/http_main.h
  
  Index: http_main.h
  ===================================================================
  RCS file: /export/home/cvs/apache/src/http_main.h,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -C3 -r1.12 -r1.13
  *** http_main.h	1997/06/30 21:10:01	1.12
  --- http_main.h	1997/07/07 14:34:27	1.13
  ***************
  *** 93,97 ****
  --- 93,98 ----
    
    void sync_scoreboard_image ();
    int update_child_status (int child_num, int status, request_rec *r);
  + void time_process_request (int child_num, int status);
    unsigned int set_callback_and_alarm(void (*fn)(int), int x);
    int check_alarm();
  
  
  
  1.57      +3 -0      apache/src/http_request.c
  
  Index: http_request.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/http_request.c,v
  retrieving revision 1.56
  retrieving revision 1.57
  diff -C3 -r1.56 -r1.57
  *** http_request.c	1997/07/01 06:46:02	1.56
  --- http_request.c	1997/07/07 14:34:27	1.57
  ***************
  *** 1033,1038 ****
  --- 1033,1040 ----
    {
    #ifdef STATUS
        int old_stat;
  + 
  +     time_process_request(r->connection->child_num, START_PREQUEST);
    #endif /* STATUS */
        process_request_internal (r);
    #ifdef STATUS
  ***************
  *** 1042,1047 ****
  --- 1044,1050 ----
        log_transaction (r);
    #ifdef STATUS
        (void)update_child_status (r->connection->child_num, old_stat, r);
  +     time_process_request(r->connection->child_num, STOP_PREQUEST);
    #endif /* STATUS */
    }
    
  
  
  
  1.51      +34 -12    apache/src/mod_status.c
  
  Index: mod_status.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/mod_status.c,v
  retrieving revision 1.50
  retrieving revision 1.51
  diff -C3 -r1.50 -r1.51
  *** mod_status.c	1997/07/05 17:42:39	1.50
  --- mod_status.c	1997/07/07 14:34:28	1.51
  ***************
  *** 204,209 ****
  --- 204,210 ----
        unsigned short conn_lres;
        unsigned long bcount=0;
        unsigned long kbcount=0;
  +     long req_time;
    #ifdef NEXT
        float tick=HZ;
    #else
  ***************
  *** 285,294 ****
    	stat_buffer[i] = status[res];
            if (res == SERVER_READY)
    	    ready++;
  !         else if (res == SERVER_BUSY_READ || res==SERVER_BUSY_WRITE || 
  ! 		 res == SERVER_STARTING || res==SERVER_BUSY_KEEPALIVE ||
  ! 		 res == SERVER_BUSY_LOG || res==SERVER_BUSY_DNS ||
  ! 		 res == SERVER_GRACEFUL)
    	    busy++;
    #if defined(STATUS)
            lres = score_record.access_count;
  --- 286,292 ----
    	stat_buffer[i] = status[res];
            if (res == SERVER_READY)
    	    ready++;
  !         else if (res != SERVER_DEAD && res != SERVER_UNKNOWN)
    	    busy++;
    #if defined(STATUS)
            lres = score_record.access_count;
  ***************
  *** 427,441 ****
    	else
    #ifdef __EMX__
                /* Allow for OS/2 not having CPU stats */
  !             rputs("<p>\n\n<table border=0><tr><th>Srv<th>PID<th>Acc<th>M\n<th>SS<th>Conn<th>Child<th>Slot<th>Host<th>VHost<th>Request</tr>\n\n",r);
    #else
  !             rputs("<p>\n\n<table border=0><tr><th>Srv<th>PID<th>Acc<th>M<th>CPU\n<th>SS<th>Conn<th>Child<th>Slot<th>Host<th>VHost<th>Request</tr>\n\n",r);
    #endif
    
    
        for (i = 0; i<HARD_SERVER_LIMIT; ++i)
        {
            score_record=get_scoreboard_info(i);
            lres = score_record.access_count;
            my_lres = score_record.my_access_count;
    	conn_lres = score_record.conn_count;
  --- 425,459 ----
    	else
    #ifdef __EMX__
                /* Allow for OS/2 not having CPU stats */
  !             rputs("<p>\n\n<table border=0><tr><th>Srv<th>PID<th>Acc<th>M\n<th>SS<th>Req<th>Conn<th>Child<th>Slot<th>Host<th>VHost<th>Request</tr>\n\n",r);
    #else
  !             rputs("<p>\n\n<table border=0><tr><th>Srv<th>PID<th>Acc<th>M<th>CPU\n<th>SS<th>Req<th>Conn<th>Child<th>Slot<th>Host<th>VHost<th>Request</tr>\n\n",r);
    #endif
    
    
        for (i = 0; i<HARD_SERVER_LIMIT; ++i)
        {
            score_record=get_scoreboard_info(i);
  + 
  + #if defined(NO_GETTIMEOFDAY)
  + 	if (score_record.start_time == (clock_t)0)
  + 	    req_time = 0L;
  + 	else {
  + 	    req_time = score_record.stop_time - score_record.start_time;
  + 	    req_time = (req_time*1000)/(int)tick;
  + 	}
  + #else
  + 	if (score_record.start_time.tv_sec == 0L &&
  + 	 score_record.start_time.tv_usec == 0L)
  + 	    req_time = 0L;
  + 	else
  + 	    req_time =
  + 	((score_record.stop_time.tv_sec-score_record.start_time.tv_sec)*1000)+
  + 	((score_record.stop_time.tv_usec-score_record.start_time.tv_usec)/1000);
  + #endif
  + 	if (req_time < 0L)
  + 	    req_time = 0L;
  + 
            lres = score_record.access_count;
            my_lres = score_record.my_access_count;
    	conn_lres = score_record.conn_count;
  ***************
  *** 491,506 ****
    		    }
    #ifdef __EMX__
                        /* Allow for OS/2 not having CPU stats */
  !                     rprintf(r,"]\n %s (",
    #else
    
  ! 		    rprintf(r,"] u%g s%g cu%g cs%g\n %s (",
    			    score_record.times.tms_utime/tick,
    			    score_record.times.tms_stime/tick,
    			    score_record.times.tms_cutime/tick,
    			    score_record.times.tms_cstime/tick,
    #endif
  ! 			    asctime(localtime(&score_record.last_used)));
    		    format_byte_out(r,conn_bytes);
    		    rputs("|",r);
    		    format_byte_out(r,my_bytes);
  --- 509,525 ----
    		    }
    #ifdef __EMX__
                        /* Allow for OS/2 not having CPU stats */
  !                     rprintf(r,"]\n %.0f %ld (",
    #else
    
  ! 		    rprintf(r,"] u%g s%g cu%g cs%g\n %.0f %ld (",
    			    score_record.times.tms_utime/tick,
    			    score_record.times.tms_stime/tick,
    			    score_record.times.tms_cutime/tick,
    			    score_record.times.tms_cstime/tick,
    #endif
  ! 			    difftime(nowtime, score_record.last_used),
  ! 			    (long)req_time);
    		    format_byte_out(r,conn_bytes);
    		    rputs("|",r);
    		    format_byte_out(r,my_bytes);
  ***************
  *** 555,569 ****
    		    }
    #ifdef __EMX__
    	            /* Allow for OS/2 not having CPU stats */
  !         	    rprintf(r,"\n<td>%.0f",
    #else
  ! 		    rprintf(r,"\n<td>%.2f<td>%.0f",
    			    (score_record.times.tms_utime +
    			    score_record.times.tms_stime +
    			    score_record.times.tms_cutime +
    			    score_record.times.tms_cstime)/tick,
    #endif
  ! 			    difftime(nowtime, score_record.last_used));
    		    rprintf(r,"<td>%-1.1f<td>%-2.2f<td>%-2.2f\n",
    			(float)conn_bytes/KBYTE, (float)my_bytes/MBYTE,
    			(float)bytes/MBYTE);
  --- 574,589 ----
    		    }
    #ifdef __EMX__
    	            /* Allow for OS/2 not having CPU stats */
  !         	    rprintf(r,"\n<td>%.0f<td>%ld",
    #else
  ! 		    rprintf(r,"\n<td>%.2f<td>%.0f<td>%ld",
    			    (score_record.times.tms_utime +
    			    score_record.times.tms_stime +
    			    score_record.times.tms_cutime +
    			    score_record.times.tms_cstime)/tick,
    #endif
  ! 			    difftime(nowtime, score_record.last_used),
  ! 			    (long)req_time);
    		    rprintf(r,"<td>%-1.1f<td>%-2.2f<td>%-2.2f\n",
    			(float)conn_bytes/KBYTE, (float)my_bytes/MBYTE,
    			(float)bytes/MBYTE);
  ***************
  *** 586,591 ****
  --- 606,612 ----
    <tr><th>Acc<td>Number of accesses this connection / this child / this slot\n \
    <tr><th>M<td>Mode of operation\n \
    <tr><th>SS<td>Seconds since beginning of most recent request\n \
  + <tr><th>Req<td>Milliseconds required to process most recent request\n \
    <tr><th>Conn<td>Kilobytes transferred this connection\n \
    <tr><th>Child<td>Megabytes transferred this child\n \
    <tr><th>Slot<td>Total megabytes transferred this slot\n \
  ***************
  *** 600,605 ****
  --- 621,627 ----
    <tr><th>M<td>Mode of operation\n \
    <tr><th>CPU<td>CPU usage, number of seconds\n \
    <tr><th>SS<td>Seconds since beginning of most recent request\n \
  + <tr><th>Req<td>Milliseconds required to process most recent request\n \
    <tr><th>Conn<td>Kilobytes transferred this connection\n \
    <tr><th>Child<td>Megabytes transferred this child\n \
    <tr><th>Slot<td>Total megabytes transferred this slot\n \
  
  
  
  1.11      +3 -3      apache/src/mod_usertrack.c
  
  Index: mod_usertrack.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/mod_usertrack.c,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -C3 -r1.10 -r1.11
  *** mod_usertrack.c	1997/03/07 14:15:45	1.10
  --- mod_usertrack.c	1997/07/07 14:34:28	1.11
  ***************
  *** 120,126 ****
    {
        cookie_log_state *cls = get_module_config (r->server->module_config,
    					       &usertrack_module);
  ! #ifdef MPE
        clock_t mpe_times;
        struct tms mpe_tms;
    #else
  --- 120,126 ----
    {
        cookie_log_state *cls = get_module_config (r->server->module_config,
    					       &usertrack_module);
  ! #if defined(NO_GETTIMEOFDAY)
        clock_t mpe_times;
        struct tms mpe_tms;
    #else
  ***************
  *** 137,144 ****
    
        if ((dot = strchr(rname,'.'))) *dot='\0';	/* First bit of hostname */
    
  ! #ifdef MPE
  ! /* MPE lacks gettimeofday(), so we must use time() to obtain the epoch
       seconds, and then times() to obtain CPU clock ticks (milliseconds).
       Combine this together to obtain a hopefully unique cookie ID. */
    
  --- 137,144 ----
    
        if ((dot = strchr(rname,'.'))) *dot='\0';	/* First bit of hostname */
    
  ! #if defined(NO_GETTIMEOFDAY)
  ! /* We lack gettimeofday(), so we must use time() to obtain the epoch
       seconds, and then times() to obtain CPU clock ticks (milliseconds).
       Combine this together to obtain a hopefully unique cookie ID. */
    
  
  
  
  1.24      +11 -0     apache/src/scoreboard.h
  
  Index: scoreboard.h
  ===================================================================
  RCS file: /export/home/cvs/apache/src/scoreboard.h,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -C3 -r1.23 -r1.24
  *** scoreboard.h	1997/06/24 00:32:32	1.23
  --- scoreboard.h	1997/07/07 14:34:28	1.24
  ***************
  *** 85,90 ****
  --- 85,97 ----
        unsigned long my_bytes_served;
        unsigned long conn_bytes;
        unsigned short conn_count;
  + #if defined(NO_GETTIMEOFDAY)
  +     clock_t start_time;
  +     clock_t stop_time;
  + #else
  +     struct timeval start_time;
  +     struct timeval stop_time;
  + #endif
        struct tms times;
        time_t last_used;
        char client[32];	/* Keep 'em small... */
  ***************
  *** 110,112 ****
  --- 117,123 ----
    extern void sync_scoreboard_image(void);
    short_score get_scoreboard_info(int x);
    int exists_scoreboard_image ();
  + 
  + /* for time_process_request() in http_main.c */
  + #define START_PREQUEST 1
  + #define STOP_PREQUEST  2