@@ -47,93 +47,76 @@ int fpm_status_init_child(struct fpm_worker_pool_s *wp) /* {{{ */
47
47
48
48
int fpm_status_export_to_zval (zval * status )
49
49
{
50
- struct fpm_scoreboard_s scoreboard , * scoreboard_p ;
50
+ struct fpm_scoreboard_s * scoreboard_p ;
51
+ struct fpm_scoreboard_proc_s * proc_p ;
51
52
zval fpm_proc_stats , fpm_proc_stat ;
52
53
time_t now_epoch ;
53
54
struct timeval duration , now ;
54
55
double cpu ;
55
56
int i ;
56
57
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 );
79
59
80
60
now_epoch = time (NULL );
81
61
fpm_clock_get (& now );
82
62
83
63
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 );
99
79
100
80
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 ) {
103
84
continue ;
104
85
}
105
- proc_p = & procs [i ];
106
86
/* 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 ) {
108
88
cpu = 0. ;
109
89
} 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. ;
111
93
}
112
94
113
95
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 ;
121
103
} else {
122
- timersub (& now , & procs [ i ]. accepted , & duration );
104
+ timersub (& now , & proc_p -> accepted , & duration );
123
105
}
124
106
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 );
133
115
add_next_index_zval (& fpm_proc_stats , & fpm_proc_stat );
134
116
}
135
117
add_assoc_zval (status , "procs" , & fpm_proc_stats );
136
- efree (procs );
118
+
119
+ fpm_scoreboard_free_copy (scoreboard_p );
137
120
138
121
return 0 ;
139
122
}
0 commit comments