@@ -47,93 +47,76 @@ int fpm_status_init_child(struct fpm_worker_pool_s *wp) /* {{{ */
4747
4848int fpm_status_export_to_zval (zval * status )
4949{
50- struct fpm_scoreboard_s scoreboard , * scoreboard_p ;
50+ struct fpm_scoreboard_s * scoreboard_p ;
51+ struct fpm_scoreboard_proc_s * proc_p ;
5152 zval fpm_proc_stats , fpm_proc_stat ;
5253 time_t now_epoch ;
5354 struct timeval duration , now ;
5455 double cpu ;
5556 int i ;
5657
57- scoreboard_p = fpm_scoreboard_acquire (NULL , 1 );
58- if (!scoreboard_p ) {
59- zlog (ZLOG_NOTICE , "[pool (unknown)] status: scoreboard already in use." );
60- return -1 ;
61- }
62-
63- /* copy the scoreboard not to bother other processes */
64- scoreboard = * scoreboard_p ;
65- struct fpm_scoreboard_proc_s * procs = safe_emalloc (
66- sizeof (struct fpm_scoreboard_proc_s ), scoreboard .nprocs , 0 );
67-
68- struct fpm_scoreboard_proc_s * proc_p ;
69- for (i = 0 ; i < scoreboard .nprocs ; i ++ ) {
70- proc_p = fpm_scoreboard_proc_acquire (scoreboard_p , i , 1 );
71- if (!proc_p ){
72- procs [i ].used = -1 ;
73- continue ;
74- }
75- procs [i ] = * proc_p ;
76- fpm_scoreboard_proc_release (proc_p );
77- }
78- fpm_scoreboard_release (scoreboard_p );
58+ scoreboard_p = fpm_scoreboard_copy (NULL , 1 );
7959
8060 now_epoch = time (NULL );
8161 fpm_clock_get (& now );
8262
8363 array_init (status );
84- add_assoc_string (status , "pool" , scoreboard . pool );
85- add_assoc_string (status , "process-manager" , PM2STR (scoreboard . pm ));
86- add_assoc_long (status , "start-time" , scoreboard . start_epoch );
87- add_assoc_long (status , "start-since" , now_epoch - scoreboard . start_epoch );
88- add_assoc_long (status , "accepted-conn" , scoreboard . requests );
89- add_assoc_long (status , "listen-queue" , scoreboard . lq );
90- add_assoc_long (status , "max-listen-queue" , scoreboard . lq_max );
91- add_assoc_long (status , "listen-queue-len" , scoreboard . lq_len );
92- add_assoc_long (status , "idle-processes" , scoreboard . idle );
93- add_assoc_long (status , "active-processes" , scoreboard . active );
94- add_assoc_long (status , "total-processes" , scoreboard . idle + scoreboard . active );
95- add_assoc_long (status , "max-active-processes" , scoreboard . active_max );
96- add_assoc_long (status , "max-children-reached" , scoreboard . max_children_reached );
97- add_assoc_long (status , "slow-requests" , scoreboard . slow_rq );
98- add_assoc_long (status , "memory-peak" , scoreboard . memory_peak );
64+ add_assoc_string (status , "pool" , scoreboard_p -> pool );
65+ add_assoc_string (status , "process-manager" , PM2STR ( scoreboard_p -> pm ));
66+ add_assoc_long (status , "start-time" , scoreboard_p -> start_epoch );
67+ add_assoc_long (status , "start-since" , now_epoch - scoreboard_p -> start_epoch );
68+ add_assoc_long (status , "accepted-conn" , scoreboard_p -> requests );
69+ add_assoc_long (status , "listen-queue" , scoreboard_p -> lq );
70+ add_assoc_long (status , "max-listen-queue" , scoreboard_p -> lq_max );
71+ add_assoc_long (status , "listen-queue-len" , scoreboard_p -> lq_len );
72+ add_assoc_long (status , "idle-processes" , scoreboard_p -> idle );
73+ add_assoc_long (status , "active-processes" , scoreboard_p -> active );
74+ add_assoc_long (status , "total-processes" , scoreboard_p -> idle + scoreboard_p -> active );
75+ add_assoc_long (status , "max-active-processes" , scoreboard_p -> active_max );
76+ add_assoc_long (status , "max-children-reached" , scoreboard_p -> max_children_reached );
77+ add_assoc_long (status , "slow-requests" , scoreboard_p -> slow_rq );
78+ add_assoc_long (status , "memory-peak" , scoreboard_p -> memory_peak );
9979
10080 array_init (& fpm_proc_stats );
101- for (i = 0 ; i < scoreboard .nprocs ; i ++ ) {
102- if (!procs [i ].used ) {
81+ for (i = 0 ; i < scoreboard_p -> nprocs ; i ++ ) {
82+ proc_p = & scoreboard_p -> procs [i ];
83+ if (!proc_p -> used ) {
10384 continue ;
10485 }
105- proc_p = & procs [i ];
10686 /* prevent NaN */
107- if (procs [ i ]. cpu_duration .tv_sec == 0 && procs [ i ]. cpu_duration .tv_usec == 0 ) {
87+ if (proc_p -> cpu_duration .tv_sec == 0 && proc_p -> cpu_duration .tv_usec == 0 ) {
10888 cpu = 0. ;
10989 } else {
110- cpu = (procs [i ].last_request_cpu .tms_utime + procs [i ].last_request_cpu .tms_stime + procs [i ].last_request_cpu .tms_cutime + procs [i ].last_request_cpu .tms_cstime ) / fpm_scoreboard_get_tick () / (procs [i ].cpu_duration .tv_sec + procs [i ].cpu_duration .tv_usec / 1000000. ) * 100. ;
90+ cpu = (proc_p -> last_request_cpu .tms_utime + proc_p -> last_request_cpu .tms_stime + proc_p -> last_request_cpu .tms_cutime +
91+ proc_p -> last_request_cpu .tms_cstime ) / fpm_scoreboard_get_tick () /
92+ (proc_p -> cpu_duration .tv_sec + proc_p -> cpu_duration .tv_usec / 1000000. ) * 100. ;
11193 }
11294
11395 array_init (& fpm_proc_stat );
114- add_assoc_long (& fpm_proc_stat , "pid" , procs [ i ]. pid );
115- add_assoc_string (& fpm_proc_stat , "state" , fpm_request_get_stage_name (procs [ i ]. request_stage ));
116- add_assoc_long (& fpm_proc_stat , "start-time" , procs [ i ]. start_epoch );
117- add_assoc_long (& fpm_proc_stat , "start-since" , now_epoch - procs [ i ]. start_epoch );
118- add_assoc_long (& fpm_proc_stat , "requests" , procs [ i ]. requests );
119- if (procs [ i ]. request_stage == FPM_REQUEST_ACCEPTING ) {
120- duration = procs [ i ]. duration ;
96+ add_assoc_long (& fpm_proc_stat , "pid" , proc_p -> pid );
97+ add_assoc_string (& fpm_proc_stat , "state" , fpm_request_get_stage_name (proc_p -> request_stage ));
98+ add_assoc_long (& fpm_proc_stat , "start-time" , proc_p -> start_epoch );
99+ add_assoc_long (& fpm_proc_stat , "start-since" , now_epoch - proc_p -> start_epoch );
100+ add_assoc_long (& fpm_proc_stat , "requests" , proc_p -> requests );
101+ if (proc_p -> request_stage == FPM_REQUEST_ACCEPTING ) {
102+ duration = proc_p -> duration ;
121103 } else {
122- timersub (& now , & procs [ i ]. accepted , & duration );
104+ timersub (& now , & proc_p -> accepted , & duration );
123105 }
124106 add_assoc_long (& fpm_proc_stat , "request-duration" , duration .tv_sec * 1000000UL + duration .tv_usec );
125- add_assoc_string (& fpm_proc_stat , "request-method" , procs [ i ]. request_method [0 ] != '\0' ? procs [ i ]. request_method : "-" );
126- add_assoc_string (& fpm_proc_stat , "request-uri" , procs [ i ]. request_uri );
127- add_assoc_string (& fpm_proc_stat , "query-string" , procs [ i ]. query_string );
128- add_assoc_long (& fpm_proc_stat , "request-length" , procs [ i ]. content_length );
129- add_assoc_string (& fpm_proc_stat , "user" , procs [ i ]. auth_user [0 ] != '\0' ? procs [ i ]. auth_user : "-" );
130- add_assoc_string (& fpm_proc_stat , "script" , procs [ i ]. script_filename [0 ] != '\0' ? procs [ i ]. script_filename : "-" );
131- add_assoc_double (& fpm_proc_stat , "last-request-cpu" , procs [ i ]. request_stage == FPM_REQUEST_ACCEPTING ? cpu : 0. );
132- add_assoc_long (& fpm_proc_stat , "last-request-memory" , procs [ i ]. request_stage == FPM_REQUEST_ACCEPTING ? procs [ i ]. memory : 0 );
107+ add_assoc_string (& fpm_proc_stat , "request-method" , proc_p -> request_method [0 ] != '\0' ? proc_p -> request_method : "-" );
108+ add_assoc_string (& fpm_proc_stat , "request-uri" , proc_p -> request_uri );
109+ add_assoc_string (& fpm_proc_stat , "query-string" , proc_p -> query_string );
110+ add_assoc_long (& fpm_proc_stat , "request-length" , proc_p -> content_length );
111+ add_assoc_string (& fpm_proc_stat , "user" , proc_p -> auth_user [0 ] != '\0' ? proc_p -> auth_user : "-" );
112+ add_assoc_string (& fpm_proc_stat , "script" , proc_p -> script_filename [0 ] != '\0' ? proc_p -> script_filename : "-" );
113+ add_assoc_double (& fpm_proc_stat , "last-request-cpu" , proc_p -> request_stage == FPM_REQUEST_ACCEPTING ? cpu : 0. );
114+ add_assoc_long (& fpm_proc_stat , "last-request-memory" , proc_p -> request_stage == FPM_REQUEST_ACCEPTING ? proc_p -> memory : 0 );
133115 add_next_index_zval (& fpm_proc_stats , & fpm_proc_stat );
134116 }
135117 add_assoc_zval (status , "procs" , & fpm_proc_stats );
136- efree (procs );
118+
119+ fpm_scoreboard_free_copy (scoreboard_p );
137120
138121 return 0 ;
139122}
0 commit comments