1 /* $Id: fpm_status.h 312263 2011-06-18 17:46:16Z felipe $ */ 2 /* (c) 2009 Jerome Loyet */ 3 4 #ifndef FPM_SCOREBOARD_H 5 #define FPM_SCOREBOARD_H 1 6 7 #include <sys/time.h> 8 #ifdef HAVE_TIMES 9 #include <sys/times.h> 10 #endif 11 12 #include "fpm_request.h" 13 #include "fpm_worker_pool.h" 14 #include "fpm_atomic.h" 15 16 #define FPM_SCOREBOARD_ACTION_SET 0 17 #define FPM_SCOREBOARD_ACTION_INC 1 18 19 struct fpm_scoreboard_proc_s { 20 union { 21 atomic_t lock; 22 char dummy[16]; 23 }; 24 int used; 25 time_t start_epoch; 26 pid_t pid; 27 unsigned long requests; 28 enum fpm_request_stage_e request_stage; 29 struct timeval accepted; 30 struct timeval duration; 31 time_t accepted_epoch; 32 struct timeval tv; 33 char request_uri[128]; 34 char query_string[512]; 35 char request_method[16]; 36 size_t content_length; /* used with POST only */ 37 char script_filename[256]; 38 char auth_user[32]; 39 #ifdef HAVE_TIMES 40 struct tms cpu_accepted; 41 struct timeval cpu_duration; 42 struct tms last_request_cpu; 43 struct timeval last_request_cpu_duration; 44 #endif 45 size_t memory; 46 }; 47 48 struct fpm_scoreboard_s { 49 union { 50 atomic_t lock; 51 char dummy[16]; 52 }; 53 char pool[32]; 54 int pm; 55 time_t start_epoch; 56 int idle; 57 int active; 58 int active_max; 59 unsigned long int requests; 60 unsigned int max_children_reached; 61 int lq; 62 int lq_max; 63 unsigned int lq_len; 64 unsigned int nprocs; 65 int free_proc; 66 unsigned long int slow_rq; 67 struct fpm_scoreboard_proc_s *procs[]; 68 }; 69 70 int fpm_scoreboard_init_main(); 71 int fpm_scoreboard_init_child(struct fpm_worker_pool_s *wp); 72 73 void fpm_scoreboard_update(int idle, int active, int lq, int lq_len, int requests, int max_children_reached, int slow_rq, int action, struct fpm_scoreboard_s *scoreboard); 74 struct fpm_scoreboard_s *fpm_scoreboard_get(); 75 struct fpm_scoreboard_proc_s *fpm_scoreboard_proc_get(struct fpm_scoreboard_s *scoreboard, int child_index); 76 77 struct fpm_scoreboard_s *fpm_scoreboard_acquire(struct fpm_scoreboard_s *scoreboard, int nohang); 78 void fpm_scoreboard_release(struct fpm_scoreboard_s *scoreboard); 79 struct fpm_scoreboard_proc_s *fpm_scoreboard_proc_acquire(struct fpm_scoreboard_s *scoreboard, int child_index, int nohang); 80 void fpm_scoreboard_proc_release(struct fpm_scoreboard_proc_s *proc); 81 82 void fpm_scoreboard_free(struct fpm_scoreboard_s *scoreboard); 83 84 void fpm_scoreboard_child_use(struct fpm_scoreboard_s *scoreboard, int child_index, pid_t pid); 85 86 void fpm_scoreboard_proc_free(struct fpm_scoreboard_s *scoreboard, int child_index); 87 int fpm_scoreboard_proc_alloc(struct fpm_scoreboard_s *scoreboard, int *child_index); 88 89 #ifdef HAVE_TIMES 90 float fpm_scoreboard_get_tick(); 91 #endif 92 93 #endif 94