xref: /PHP-7.1/sapi/fpm/fpm/fpm_scoreboard.h (revision 03f3b847)
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