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