fat Fri, 17 Jun 2011 23:19:54 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=312244
Log:
- added xml format to the status page
- clean fpm_status.c code
Changed paths:
U php/php-src/branches/PHP_5_3/NEWS
U php/php-src/branches/PHP_5_3/sapi/fpm/fpm/fpm_main.c
U php/php-src/branches/PHP_5_3/sapi/fpm/fpm/fpm_status.c
U php/php-src/branches/PHP_5_3/sapi/fpm/fpm/fpm_status.h
U php/php-src/branches/PHP_5_4/sapi/fpm/fpm/fpm_main.c
U php/php-src/branches/PHP_5_4/sapi/fpm/fpm/fpm_status.c
U php/php-src/branches/PHP_5_4/sapi/fpm/fpm/fpm_status.h
U php/php-src/trunk/sapi/fpm/fpm/fpm_main.c
U php/php-src/trunk/sapi/fpm/fpm/fpm_status.c
U php/php-src/trunk/sapi/fpm/fpm/fpm_status.h
Modified: php/php-src/branches/PHP_5_3/NEWS
===================================================================
--- php/php-src/branches/PHP_5_3/NEWS 2011-06-17 21:42:40 UTC (rev 312243)
+++ php/php-src/branches/PHP_5_3/NEWS 2011-06-17 23:19:54 UTC (rev 312244)
@@ -170,6 +170,9 @@
- Phar extension:
. Fixed bug #54395 (Phar::mount() crashes when calling with wrong parameters).
(Felipe)
+
+- PHP-FPM SAPI:
+ . Added xml format to the status page. (fat)
- Reflection extension:
. Fixed bug #54347 (reflection_extension does not lowercase module function
Modified: php/php-src/branches/PHP_5_3/sapi/fpm/fpm/fpm_main.c
===================================================================
--- php/php-src/branches/PHP_5_3/sapi/fpm/fpm/fpm_main.c 2011-06-17 21:42:40 UTC (rev 312243)
+++ php/php-src/branches/PHP_5_3/sapi/fpm/fpm/fpm_main.c 2011-06-17 23:19:54 UTC (rev 312244)
@@ -1832,7 +1832,6 @@
zend_first_try {
while (fcgi_accept_request(&request) >= 0) {
- char *status_buffer, *status_content_type;
request_body_fd = -1;
SG(server_context) = (void *) &request;
init_request_info(TSRMLS_C);
@@ -1855,35 +1854,10 @@
goto fastcgi_request_done;
}
- if (!strcasecmp(SG(request_info).request_method, "GET") && fpm_status_handle_status(SG(request_info).request_uri, SG(request_info).query_string, &status_buffer, &status_content_type)) {
- if (status_buffer) {
- if (status_content_type) {
- sapi_add_header_ex(status_content_type, strlen(status_content_type), 1, 1 TSRMLS_CC);
- } else {
- sapi_add_header_ex(ZEND_STRL("Content-Type: text/plain"), 1, 1 TSRMLS_CC);
- }
-
- SG(sapi_headers).http_response_code = 200;
- PUTS(status_buffer);
- efree(status_buffer);
- if (status_content_type) {
- efree(status_content_type);
- }
- } else {
- sapi_add_header_ex(ZEND_STRL("Content-Type: text/plain"), 1, 1 TSRMLS_CC);
- SG(sapi_headers).http_response_code = 500;
- PUTS("Unable to retrieve status\n");
- }
+ if (fpm_status_handle_request()) {
goto fastcgi_request_done;
}
- if (!strcasecmp(SG(request_info).request_method, "GET") && (status_buffer = fpm_status_handle_ping(SG(request_info).request_uri))) {
- sapi_add_header_ex(ZEND_STRL("Content-Type: text/plain"), 1, 1 TSRMLS_CC);
- SG(sapi_headers).http_response_code = 200;
- PUTS(status_buffer);
- goto fastcgi_request_done;
- }
-
/* If path_translated is NULL, terminate here with a 404 */
if (!SG(request_info).path_translated) {
zend_try {
Modified: php/php-src/branches/PHP_5_3/sapi/fpm/fpm/fpm_status.c
===================================================================
--- php/php-src/branches/PHP_5_3/sapi/fpm/fpm/fpm_status.c 2011-06-17 21:42:40 UTC (rev 312243)
+++ php/php-src/branches/PHP_5_3/sapi/fpm/fpm/fpm_status.c 2011-06-17 23:19:54 UTC (rev 312244)
@@ -3,6 +3,7 @@
/* (c) 2009 Jerome Loyet */
#include "php.h"
+#include "SAPI.h"
#include <stdio.h>
#include "fpm_config.h"
@@ -13,8 +14,8 @@
struct fpm_shm_s *fpm_status_shm = NULL;
static char *fpm_status_pool = NULL;
static char *fpm_status_uri = NULL;
-static char *fpm_status_ping= NULL;
-static char *fpm_status_pong= NULL;
+static char *fpm_status_ping_uri = NULL;
+static char *fpm_status_ping_response = NULL;
int fpm_status_init_child(struct fpm_worker_pool_s *wp) /* {{{ */
@@ -40,8 +41,8 @@
zlog(ZLOG_ERROR, "[pool %s] ping is set (%s) but pong is not set.", wp->config->name, wp->config->ping_path);
return -1;
}
- fpm_status_ping = strdup(wp->config->ping_path);
- fpm_status_pong = strdup(wp->config->ping_response);
+ fpm_status_ping_uri = strdup(wp->config->ping_path);
+ fpm_status_ping_response = strdup(wp->config->ping_response);
}
}
return 0;
@@ -159,174 +160,139 @@
}
/* }}} */
-static void fpm_status_handle_status_txt(struct fpm_status_s *status, char **output, char **content_type) /* {{{ */
+int fpm_status_handle_request() /* {{{ */
{
- if (!status || !output || !content_type) {
- return;
+ struct fpm_status_s status;
+ char *buffer, *syntax;
+
+ if (!SG(request_info).request_uri) {
+ return 0;
}
- spprintf(output, 0,
- "pool: %s\n"
- "process manager: %s\n"
- "accepted conn: %lu\n"
-#if HAVE_FPM_LQ
- "listen queue len: %u\n"
- "max listen queue len: %d\n"
-#endif
- "idle processes: %d\n"
- "active processes: %d\n"
- "total processes: %d\n"
- "max children reached: %u\n",
- fpm_status_pool,
- status->pm == PM_STYLE_STATIC ? "static" : "dynamic",
- status->accepted_conn,
-#if HAVE_FPM_LQ
- status->cur_lq,
- status->max_lq,
-#endif
- status->idle,
- status->active,
- status->total,
- status->max_children_reached);
+ /* PING */
+ if (fpm_status_ping_uri && fpm_status_ping_response && !strcmp(fpm_status_ping_uri, SG(request_info).request_uri)) {
+ sapi_add_header_ex(ZEND_STRL("Content-Type: text/plain"), 1, 1 TSRMLS_CC);
+ SG(sapi_headers).http_response_code = 200;
+ PUTS(fpm_status_ping_response);
+ return 1;
+ }
- spprintf(content_type, 0, "Content-Type: text/plain");
-}
-/* }}} */
+ /* STATUS */
+ if (fpm_status_uri && !strcmp(fpm_status_uri, SG(request_info).request_uri)) {
-static void fpm_status_handle_status_html(struct fpm_status_s *status, char **output, char **content_type) /* {{{ */
-{
- if (!status || !output || !content_type) {
- return;
- }
+ if (!fpm_status_shm || !fpm_status_shm->mem) {
+ zlog(ZLOG_ERROR, "[pool %s] unable to find or access status shared memory", fpm_status_pool);
+ SG(sapi_headers).http_response_code = 500;
+ sapi_add_header_ex(ZEND_STRL("Content-Type: text/plain"), 1, 1 TSRMLS_CC);
+ PUTS("Internal error. Please review log file for errors.");
+ return 1;
+ }
- spprintf(output, 0,
- "<table>\n"
- "<tr><th>pool</th><td>%s</td></tr>\n"
- "<tr><th>process manager</th><td>%s</td></tr>\n"
- "<tr><th>accepted conn</th><td>%lu</td></tr>\n"
+ /* one shot operation */
+ status = *(struct fpm_status_s *)fpm_status_shm->mem;
+
+ if (status.idle < 0 || status.active < 0 || status.total < 0) {
+ zlog(ZLOG_ERROR, "[pool %s] invalid status values", fpm_status_pool);
+ SG(sapi_headers).http_response_code = 500;
+ sapi_add_header_ex(ZEND_STRL("Content-Type: text/plain"), 1, 1 TSRMLS_CC);
+ PUTS("Internal error. Please review log file for errors.");
+ return 1;
+ }
+
+ /* HTML */
+ if (SG(request_info).query_string && strstr(SG(request_info).query_string, "html")) {
+ sapi_add_header_ex(ZEND_STRL("Content-Type: text/html"), 1, 1 TSRMLS_CC);
+ syntax =
+ "<table>\n"
+ "<tr><th>pool</th><td>%s</td></tr>\n"
+ "<tr><th>process manager</th><td>%s</td></tr>\n"
+ "<tr><th>accepted conn</th><td>%lu</td></tr>\n"
#if HAVE_FPM_LQ
- "<tr><th>listen queue len</th><td>%u</td></tr>\n"
- "<tr><th>max listen queue len</th><td>%d</td></tr>\n"
+ "<tr><th>listen queue len</th><td>%u</td></tr>\n"
+ "<tr><th>max listen queue len</th><td>%d</td></tr>\n"
#endif
- "<tr><th>idle processes</th><td>%d</td></tr>\n"
- "<tr><th>active processes</th><td>%d</td></tr>\n"
- "<tr><th>total processes</th><td>%d</td></tr>\n"
- "<tr><th>max children reached</th><td>%u</td></tr>\n"
- "</table>",
- fpm_status_pool,
- status->pm == PM_STYLE_STATIC ? "static" : "dynamic",
- status->accepted_conn,
+ "<tr><th>idle processes</th><td>%d</td></tr>\n"
+ "<tr><th>active processes</th><td>%d</td></tr>\n"
+ "<tr><th>total processes</th><td>%d</td></tr>\n"
+ "<tr><th>max children reached</th><td>%u</td></tr>\n"
+ "</table>";
+
+ /* XML */
+ } else if (SG(request_info).request_uri && strstr(SG(request_info).query_string, "xml")) {
+ sapi_add_header_ex(ZEND_STRL("Content-Type: text/xml"), 1, 1 TSRMLS_CC);
+ syntax =
+ "<?xml version=\"1.0\" ?>\n"
+ "<status>\n"
+ "<pool>%s</pool>\n"
+ "<process-manager>%s</process-manager>\n"
+ "<accepted-conn>%lu</accepted-conn>\n"
#if HAVE_FPM_LQ
- status->cur_lq,
- status->max_lq,
+ "<listen-queue-len>%u</listen-queue-len>\n"
+ "<max-listen-queue-len>%d</max-listen-queue-len>\n"
#endif
- status->idle,
- status->active,
- status->total,
- status->max_children_reached);
+ "<idle-processes>%d</idle-processes>\n"
+ "<active-processes>%d</active-processes>\n"
+ "<total-processes>%d</total-processes>\n"
+ "<max-children-reached>%u</max-children-reached>\n"
+ "</status>";
- spprintf(content_type, 0, "Content-Type: text/html");
-}
-/* }}} */
+ /* JSON */
+ } else if (SG(request_info).request_uri && strstr(SG(request_info).query_string, "json")) {
+ sapi_add_header_ex(ZEND_STRL("Content-Type: application/json"), 1, 1 TSRMLS_CC);
-static void fpm_status_handle_status_json(struct fpm_status_s *status, char **output, char **content_type) /* {{{ */
-{
- if (!status || !output || !content_type) {
- return;
- }
+ syntax =
+ "{"
+ "\"pool\":\"%s\","
+ "\"process manager\":\"%s\","
+ "\"accepted conn\":%lu,"
+#if HAVE_FPM_LQ
+ "\"listen queue len\":%u,"
+ "\"max listen queue len\":%d,"
+#endif
+ "\"idle processes\":%d,"
+ "\"active processes\":%d,"
+ "\"total processes\":%d,"
+ "\"max children reached\":%u"
+ "}";
- spprintf(output, 0,
- "{"
- "\"pool\":\"%s\","
- "\"process manager\":\"%s\","
- "\"accepted conn\":%lu,"
+ /* TEXT */
+ } else {
+ sapi_add_header_ex(ZEND_STRL("Content-Type: text/plain"), 1, 1 TSRMLS_CC);
+ syntax =
+ "pool: %s\n"
+ "process manager: %s\n"
+ "accepted conn: %lu\n"
#if HAVE_FPM_LQ
- "\"listen queue len\":%u,"
- "\"max listen queue len\":%d,"
+ "listen queue len: %u\n"
+ "max listen queue len: %d\n"
#endif
- "\"idle processes\":%d,"
- "\"active processes\":%d,"
- "\"total processes\":%d,"
- "\"max children reached\":%u"
- "}",
- fpm_status_pool,
- status->pm == PM_STYLE_STATIC ? "static" : "dynamic",
- status->accepted_conn,
+ "idle processes: %d\n"
+ "active processes: %d\n"
+ "total processes: %d\n"
+ "max children reached: %u\n";
+ }
+
+ spprintf(&buffer, 0, syntax,
+ fpm_status_pool,
+ status.pm == PM_STYLE_STATIC ? "static" : "dynamic",
+ status.accepted_conn,
#if HAVE_FPM_LQ
- status->cur_lq,
- status->max_lq,
+ status.cur_lq,
+ status.max_lq,
#endif
- status->idle,
- status->active,
- status->total,
- status->max_children_reached);
+ status.idle,
+ status.active,
+ status.total,
+ status.max_children_reached);
- spprintf(content_type, 0, "Content-Type: application/json");
-}
-/* }}} */
+ SG(sapi_headers).http_response_code = 200;
+ PUTS(buffer);
+ efree(buffer);
-/* return 0 if it's not the request page
- * return 1 if ouput has been set)
- * *output unchanged: error (return 500)
- * *output changed: no error (return 200)
- */
-int fpm_status_handle_status(char *uri, char *query_string, char **output, char **content_type) /* {{{ */
-{
- struct fpm_status_s status;
-
- if (!fpm_status_uri || !uri) {
- return 0;
- }
-
- /* It's not the status page */
- if (strcmp(fpm_status_uri, uri)) {
- return 0;
- }
-
- if (!output || !content_type || !fpm_status_shm) {
return 1;
}
- if (!fpm_status_shm->mem) {
- return 1;
- }
-
- /* one shot operation */
- status = *(struct fpm_status_s *)fpm_status_shm->mem;
-
- if (status.idle < 0 || status.active < 0 || status.total < 0) {
- return 1;
- }
-
- if (query_string && strstr(query_string, "html")) {
- fpm_status_handle_status_html(&status, output, content_type);
- } else if (query_string && strstr(query_string, "json")) {
- fpm_status_handle_status_json(&status, output, content_type);
- } else {
- fpm_status_handle_status_txt(&status, output, content_type);
- }
-
- if (!*output || !content_type) {
- zlog(ZLOG_ERROR, "[pool %s] unable to allocate status ouput buffer", fpm_status_pool);
- return 1;
- }
-
- return 1;
+ return 0;
}
/* }}} */
-char *fpm_status_handle_ping(char *uri) /* {{{ */
-{
- if (!fpm_status_ping || !fpm_status_pong || !uri) {
- return NULL;
- }
-
- /* It's not the status page */
- if (strcmp(fpm_status_ping, uri)) {
- return NULL;
- }
-
- return fpm_status_pong;
-}
-/* }}} */
-
Modified: php/php-src/branches/PHP_5_3/sapi/fpm/fpm/fpm_status.h
===================================================================
--- php/php-src/branches/PHP_5_3/sapi/fpm/fpm/fpm_status.h 2011-06-17 21:42:40 UTC (rev 312243)
+++ php/php-src/branches/PHP_5_3/sapi/fpm/fpm/fpm_status.h 2011-06-17 23:19:54 UTC (rev 312244)
@@ -28,8 +28,7 @@
void fpm_status_set_pm(struct fpm_shm_s *shm, int pm);
void fpm_status_update_max_children_reached(struct fpm_shm_s *shm, unsigned int max_children_reached);
void fpm_status_increment_max_children_reached(struct fpm_shm_s *shm);
-int fpm_status_handle_status(char *uri, char *query_string, char **output, char **content_type);
-char* fpm_status_handle_ping(char *uri);
+int fpm_status_handle_request();
extern struct fpm_shm_s *fpm_status_shm;
Modified: php/php-src/branches/PHP_5_4/sapi/fpm/fpm/fpm_main.c
===================================================================
--- php/php-src/branches/PHP_5_4/sapi/fpm/fpm/fpm_main.c 2011-06-17 21:42:40 UTC (rev 312243)
+++ php/php-src/branches/PHP_5_4/sapi/fpm/fpm/fpm_main.c 2011-06-17 23:19:54 UTC (rev 312244)
@@ -1831,7 +1831,6 @@
zend_first_try {
while (fcgi_accept_request(&request) >= 0) {
- char *status_buffer, *status_content_type;
request_body_fd = -1;
SG(server_context) = (void *) &request;
init_request_info(TSRMLS_C);
@@ -1854,35 +1853,10 @@
goto fastcgi_request_done;
}
- if (!strcasecmp(SG(request_info).request_method, "GET") && fpm_status_handle_status(SG(request_info).request_uri, SG(request_info).query_string, &status_buffer, &status_content_type)) {
- if (status_buffer) {
- if (status_content_type) {
- sapi_add_header_ex(status_content_type, strlen(status_content_type), 1, 1 TSRMLS_CC);
- } else {
- sapi_add_header_ex(ZEND_STRL("Content-Type: text/plain"), 1, 1 TSRMLS_CC);
- }
-
- SG(sapi_headers).http_response_code = 200;
- PUTS(status_buffer);
- efree(status_buffer);
- if (status_content_type) {
- efree(status_content_type);
- }
- } else {
- sapi_add_header_ex(ZEND_STRL("Content-Type: text/plain"), 1, 1 TSRMLS_CC);
- SG(sapi_headers).http_response_code = 500;
- PUTS("Unable to retrieve status\n");
- }
+ if (fpm_status_handle_request()) {
goto fastcgi_request_done;
}
- if (!strcasecmp(SG(request_info).request_method, "GET") && (status_buffer = fpm_status_handle_ping(SG(request_info).request_uri))) {
- sapi_add_header_ex(ZEND_STRL("Content-Type: text/plain"), 1, 1 TSRMLS_CC);
- SG(sapi_headers).http_response_code = 200;
- PUTS(status_buffer);
- goto fastcgi_request_done;
- }
-
/* If path_translated is NULL, terminate here with a 404 */
if (!SG(request_info).path_translated) {
zend_try {
Modified: php/php-src/branches/PHP_5_4/sapi/fpm/fpm/fpm_status.c
===================================================================
--- php/php-src/branches/PHP_5_4/sapi/fpm/fpm/fpm_status.c 2011-06-17 21:42:40 UTC (rev 312243)
+++ php/php-src/branches/PHP_5_4/sapi/fpm/fpm/fpm_status.c 2011-06-17 23:19:54 UTC (rev 312244)
@@ -3,6 +3,7 @@
/* (c) 2009 Jerome Loyet */
#include "php.h"
+#include "SAPI.h"
#include <stdio.h>
#include "fpm_config.h"
@@ -13,8 +14,8 @@
struct fpm_shm_s *fpm_status_shm = NULL;
static char *fpm_status_pool = NULL;
static char *fpm_status_uri = NULL;
-static char *fpm_status_ping= NULL;
-static char *fpm_status_pong= NULL;
+static char *fpm_status_ping_uri = NULL;
+static char *fpm_status_ping_response = NULL;
int fpm_status_init_child(struct fpm_worker_pool_s *wp) /* {{{ */
@@ -40,8 +41,8 @@
zlog(ZLOG_ERROR, "[pool %s] ping is set (%s) but pong is not set.", wp->config->name, wp->config->ping_path);
return -1;
}
- fpm_status_ping = strdup(wp->config->ping_path);
- fpm_status_pong = strdup(wp->config->ping_response);
+ fpm_status_ping_uri = strdup(wp->config->ping_path);
+ fpm_status_ping_response = strdup(wp->config->ping_response);
}
}
return 0;
@@ -159,174 +160,139 @@
}
/* }}} */
-static void fpm_status_handle_status_txt(struct fpm_status_s *status, char **output, char **content_type) /* {{{ */
+int fpm_status_handle_request() /* {{{ */
{
- if (!status || !output || !content_type) {
- return;
+ struct fpm_status_s status;
+ char *buffer, *syntax;
+
+ if (!SG(request_info).request_uri) {
+ return 0;
}
- spprintf(output, 0,
- "pool: %s\n"
- "process manager: %s\n"
- "accepted conn: %lu\n"
-#if HAVE_FPM_LQ
- "listen queue len: %u\n"
- "max listen queue len: %d\n"
-#endif
- "idle processes: %d\n"
- "active processes: %d\n"
- "total processes: %d\n"
- "max children reached: %u\n",
- fpm_status_pool,
- status->pm == PM_STYLE_STATIC ? "static" : "dynamic",
- status->accepted_conn,
-#if HAVE_FPM_LQ
- status->cur_lq,
- status->max_lq,
-#endif
- status->idle,
- status->active,
- status->total,
- status->max_children_reached);
+ /* PING */
+ if (fpm_status_ping_uri && fpm_status_ping_response && !strcmp(fpm_status_ping_uri, SG(request_info).request_uri)) {
+ sapi_add_header_ex(ZEND_STRL("Content-Type: text/plain"), 1, 1 TSRMLS_CC);
+ SG(sapi_headers).http_response_code = 200;
+ PUTS(fpm_status_ping_response);
+ return 1;
+ }
- spprintf(content_type, 0, "Content-Type: text/plain");
-}
-/* }}} */
+ /* STATUS */
+ if (fpm_status_uri && !strcmp(fpm_status_uri, SG(request_info).request_uri)) {
-static void fpm_status_handle_status_html(struct fpm_status_s *status, char **output, char **content_type) /* {{{ */
-{
- if (!status || !output || !content_type) {
- return;
- }
+ if (!fpm_status_shm || !fpm_status_shm->mem) {
+ zlog(ZLOG_ERROR, "[pool %s] unable to find or access status shared memory", fpm_status_pool);
+ SG(sapi_headers).http_response_code = 500;
+ sapi_add_header_ex(ZEND_STRL("Content-Type: text/plain"), 1, 1 TSRMLS_CC);
+ PUTS("Internal error. Please review log file for errors.");
+ return 1;
+ }
- spprintf(output, 0,
- "<table>\n"
- "<tr><th>pool</th><td>%s</td></tr>\n"
- "<tr><th>process manager</th><td>%s</td></tr>\n"
- "<tr><th>accepted conn</th><td>%lu</td></tr>\n"
+ /* one shot operation */
+ status = *(struct fpm_status_s *)fpm_status_shm->mem;
+
+ if (status.idle < 0 || status.active < 0 || status.total < 0) {
+ zlog(ZLOG_ERROR, "[pool %s] invalid status values", fpm_status_pool);
+ SG(sapi_headers).http_response_code = 500;
+ sapi_add_header_ex(ZEND_STRL("Content-Type: text/plain"), 1, 1 TSRMLS_CC);
+ PUTS("Internal error. Please review log file for errors.");
+ return 1;
+ }
+
+ /* HTML */
+ if (SG(request_info).query_string && strstr(SG(request_info).query_string, "html")) {
+ sapi_add_header_ex(ZEND_STRL("Content-Type: text/html"), 1, 1 TSRMLS_CC);
+ syntax =
+ "<table>\n"
+ "<tr><th>pool</th><td>%s</td></tr>\n"
+ "<tr><th>process manager</th><td>%s</td></tr>\n"
+ "<tr><th>accepted conn</th><td>%lu</td></tr>\n"
#if HAVE_FPM_LQ
- "<tr><th>listen queue len</th><td>%u</td></tr>\n"
- "<tr><th>max listen queue len</th><td>%d</td></tr>\n"
+ "<tr><th>listen queue len</th><td>%u</td></tr>\n"
+ "<tr><th>max listen queue len</th><td>%d</td></tr>\n"
#endif
- "<tr><th>idle processes</th><td>%d</td></tr>\n"
- "<tr><th>active processes</th><td>%d</td></tr>\n"
- "<tr><th>total processes</th><td>%d</td></tr>\n"
- "<tr><th>max children reached</th><td>%u</td></tr>\n"
- "</table>",
- fpm_status_pool,
- status->pm == PM_STYLE_STATIC ? "static" : "dynamic",
- status->accepted_conn,
+ "<tr><th>idle processes</th><td>%d</td></tr>\n"
+ "<tr><th>active processes</th><td>%d</td></tr>\n"
+ "<tr><th>total processes</th><td>%d</td></tr>\n"
+ "<tr><th>max children reached</th><td>%u</td></tr>\n"
+ "</table>";
+
+ /* XML */
+ } else if (SG(request_info).request_uri && strstr(SG(request_info).query_string, "xml")) {
+ sapi_add_header_ex(ZEND_STRL("Content-Type: text/xml"), 1, 1 TSRMLS_CC);
+ syntax =
+ "<?xml version=\"1.0\" ?>\n"
+ "<status>\n"
+ "<pool>%s</pool>\n"
+ "<process-manager>%s</process-manager>\n"
+ "<accepted-conn>%lu</accepted-conn>\n"
#if HAVE_FPM_LQ
- status->cur_lq,
- status->max_lq,
+ "<listen-queue-len>%u</listen-queue-len>\n"
+ "<max-listen-queue-len>%d</max-listen-queue-len>\n"
#endif
- status->idle,
- status->active,
- status->total,
- status->max_children_reached);
+ "<idle-processes>%d</idle-processes>\n"
+ "<active-processes>%d</active-processes>\n"
+ "<total-processes>%d</total-processes>\n"
+ "<max-children-reached>%u</max-children-reached>\n"
+ "</status>";
- spprintf(content_type, 0, "Content-Type: text/html");
-}
-/* }}} */
+ /* JSON */
+ } else if (SG(request_info).request_uri && strstr(SG(request_info).query_string, "json")) {
+ sapi_add_header_ex(ZEND_STRL("Content-Type: application/json"), 1, 1 TSRMLS_CC);
-static void fpm_status_handle_status_json(struct fpm_status_s *status, char **output, char **content_type) /* {{{ */
-{
- if (!status || !output || !content_type) {
- return;
- }
+ syntax =
+ "{"
+ "\"pool\":\"%s\","
+ "\"process manager\":\"%s\","
+ "\"accepted conn\":%lu,"
+#if HAVE_FPM_LQ
+ "\"listen queue len\":%u,"
+ "\"max listen queue len\":%d,"
+#endif
+ "\"idle processes\":%d,"
+ "\"active processes\":%d,"
+ "\"total processes\":%d,"
+ "\"max children reached\":%u"
+ "}";
- spprintf(output, 0,
- "{"
- "\"pool\":\"%s\","
- "\"process manager\":\"%s\","
- "\"accepted conn\":%lu,"
+ /* TEXT */
+ } else {
+ sapi_add_header_ex(ZEND_STRL("Content-Type: text/plain"), 1, 1 TSRMLS_CC);
+ syntax =
+ "pool: %s\n"
+ "process manager: %s\n"
+ "accepted conn: %lu\n"
#if HAVE_FPM_LQ
- "\"listen queue len\":%u,"
- "\"max listen queue len\":%d,"
+ "listen queue len: %u\n"
+ "max listen queue len: %d\n"
#endif
- "\"idle processes\":%d,"
- "\"active processes\":%d,"
- "\"total processes\":%d,"
- "\"max children reached\":%u"
- "}",
- fpm_status_pool,
- status->pm == PM_STYLE_STATIC ? "static" : "dynamic",
- status->accepted_conn,
+ "idle processes: %d\n"
+ "active processes: %d\n"
+ "total processes: %d\n"
+ "max children reached: %u\n";
+ }
+
+ spprintf(&buffer, 0, syntax,
+ fpm_status_pool,
+ status.pm == PM_STYLE_STATIC ? "static" : "dynamic",
+ status.accepted_conn,
#if HAVE_FPM_LQ
- status->cur_lq,
- status->max_lq,
+ status.cur_lq,
+ status.max_lq,
#endif
- status->idle,
- status->active,
- status->total,
- status->max_children_reached);
+ status.idle,
+ status.active,
+ status.total,
+ status.max_children_reached);
- spprintf(content_type, 0, "Content-Type: application/json");
-}
-/* }}} */
+ SG(sapi_headers).http_response_code = 200;
+ PUTS(buffer);
+ efree(buffer);
-/* return 0 if it's not the request page
- * return 1 if ouput has been set)
- * *output unchanged: error (return 500)
- * *output changed: no error (return 200)
- */
-int fpm_status_handle_status(char *uri, char *query_string, char **output, char **content_type) /* {{{ */
-{
- struct fpm_status_s status;
-
- if (!fpm_status_uri || !uri) {
- return 0;
- }
-
- /* It's not the status page */
- if (strcmp(fpm_status_uri, uri)) {
- return 0;
- }
-
- if (!output || !content_type || !fpm_status_shm) {
return 1;
}
- if (!fpm_status_shm->mem) {
- return 1;
- }
-
- /* one shot operation */
- status = *(struct fpm_status_s *)fpm_status_shm->mem;
-
- if (status.idle < 0 || status.active < 0 || status.total < 0) {
- return 1;
- }
-
- if (query_string && strstr(query_string, "html")) {
- fpm_status_handle_status_html(&status, output, content_type);
- } else if (query_string && strstr(query_string, "json")) {
- fpm_status_handle_status_json(&status, output, content_type);
- } else {
- fpm_status_handle_status_txt(&status, output, content_type);
- }
-
- if (!*output || !content_type) {
- zlog(ZLOG_ERROR, "[pool %s] unable to allocate status ouput buffer", fpm_status_pool);
- return 1;
- }
-
- return 1;
+ return 0;
}
/* }}} */
-char *fpm_status_handle_ping(char *uri) /* {{{ */
-{
- if (!fpm_status_ping || !fpm_status_pong || !uri) {
- return NULL;
- }
-
- /* It's not the status page */
- if (strcmp(fpm_status_ping, uri)) {
- return NULL;
- }
-
- return fpm_status_pong;
-}
-/* }}} */
-
Modified: php/php-src/branches/PHP_5_4/sapi/fpm/fpm/fpm_status.h
===================================================================
--- php/php-src/branches/PHP_5_4/sapi/fpm/fpm/fpm_status.h 2011-06-17 21:42:40 UTC (rev 312243)
+++ php/php-src/branches/PHP_5_4/sapi/fpm/fpm/fpm_status.h 2011-06-17 23:19:54 UTC (rev 312244)
@@ -28,8 +28,7 @@
void fpm_status_set_pm(struct fpm_shm_s *shm, int pm);
void fpm_status_update_max_children_reached(struct fpm_shm_s *shm, unsigned int max_children_reached);
void fpm_status_increment_max_children_reached(struct fpm_shm_s *shm);
-int fpm_status_handle_status(char *uri, char *query_string, char **output, char **content_type);
-char* fpm_status_handle_ping(char *uri);
+int fpm_status_handle_request();
extern struct fpm_shm_s *fpm_status_shm;
Modified: php/php-src/trunk/sapi/fpm/fpm/fpm_main.c
===================================================================
--- php/php-src/trunk/sapi/fpm/fpm/fpm_main.c 2011-06-17 21:42:40 UTC (rev 312243)
+++ php/php-src/trunk/sapi/fpm/fpm/fpm_main.c 2011-06-17 23:19:54 UTC (rev 312244)
@@ -1831,7 +1831,6 @@
zend_first_try {
while (fcgi_accept_request(&request) >= 0) {
- char *status_buffer, *status_content_type;
request_body_fd = -1;
SG(server_context) = (void *) &request;
init_request_info(TSRMLS_C);
@@ -1854,35 +1853,10 @@
goto fastcgi_request_done;
}
- if (!strcasecmp(SG(request_info).request_method, "GET") && fpm_status_handle_status(SG(request_info).request_uri, SG(request_info).query_string, &status_buffer, &status_content_type)) {
- if (status_buffer) {
- if (status_content_type) {
- sapi_add_header_ex(status_content_type, strlen(status_content_type), 1, 1 TSRMLS_CC);
- } else {
- sapi_add_header_ex(ZEND_STRL("Content-Type: text/plain"), 1, 1 TSRMLS_CC);
- }
-
- SG(sapi_headers).http_response_code = 200;
- PUTS(status_buffer);
- efree(status_buffer);
- if (status_content_type) {
- efree(status_content_type);
- }
- } else {
- sapi_add_header_ex(ZEND_STRL("Content-Type: text/plain"), 1, 1 TSRMLS_CC);
- SG(sapi_headers).http_response_code = 500;
- PUTS("Unable to retrieve status\n");
- }
+ if (fpm_status_handle_request()) {
goto fastcgi_request_done;
}
- if (!strcasecmp(SG(request_info).request_method, "GET") && (status_buffer = fpm_status_handle_ping(SG(request_info).request_uri))) {
- sapi_add_header_ex(ZEND_STRL("Content-Type: text/plain"), 1, 1 TSRMLS_CC);
- SG(sapi_headers).http_response_code = 200;
- PUTS(status_buffer);
- goto fastcgi_request_done;
- }
-
/* If path_translated is NULL, terminate here with a 404 */
if (!SG(request_info).path_translated) {
zend_try {
Modified: php/php-src/trunk/sapi/fpm/fpm/fpm_status.c
===================================================================
--- php/php-src/trunk/sapi/fpm/fpm/fpm_status.c 2011-06-17 21:42:40 UTC (rev 312243)
+++ php/php-src/trunk/sapi/fpm/fpm/fpm_status.c 2011-06-17 23:19:54 UTC (rev 312244)
@@ -3,6 +3,7 @@
/* (c) 2009 Jerome Loyet */
#include "php.h"
+#include "SAPI.h"
#include <stdio.h>
#include "fpm_config.h"
@@ -13,8 +14,8 @@
struct fpm_shm_s *fpm_status_shm = NULL;
static char *fpm_status_pool = NULL;
static char *fpm_status_uri = NULL;
-static char *fpm_status_ping= NULL;
-static char *fpm_status_pong= NULL;
+static char *fpm_status_ping_uri = NULL;
+static char *fpm_status_ping_response = NULL;
int fpm_status_init_child(struct fpm_worker_pool_s *wp) /* {{{ */
@@ -40,8 +41,8 @@
zlog(ZLOG_ERROR, "[pool %s] ping is set (%s) but pong is not set.", wp->config->name, wp->config->ping_path);
return -1;
}
- fpm_status_ping = strdup(wp->config->ping_path);
- fpm_status_pong = strdup(wp->config->ping_response);
+ fpm_status_ping_uri = strdup(wp->config->ping_path);
+ fpm_status_ping_response = strdup(wp->config->ping_response);
}
}
return 0;
@@ -159,174 +160,139 @@
}
/* }}} */
-static void fpm_status_handle_status_txt(struct fpm_status_s *status, char **output, char **content_type) /* {{{ */
+int fpm_status_handle_request() /* {{{ */
{
- if (!status || !output || !content_type) {
- return;
+ struct fpm_status_s status;
+ char *buffer, *syntax;
+
+ if (!SG(request_info).request_uri) {
+ return 0;
}
- spprintf(output, 0,
- "pool: %s\n"
- "process manager: %s\n"
- "accepted conn: %lu\n"
-#if HAVE_FPM_LQ
- "listen queue len: %u\n"
- "max listen queue len: %d\n"
-#endif
- "idle processes: %d\n"
- "active processes: %d\n"
- "total processes: %d\n"
- "max children reached: %u\n",
- fpm_status_pool,
- status->pm == PM_STYLE_STATIC ? "static" : "dynamic",
- status->accepted_conn,
-#if HAVE_FPM_LQ
- status->cur_lq,
- status->max_lq,
-#endif
- status->idle,
- status->active,
- status->total,
- status->max_children_reached);
+ /* PING */
+ if (fpm_status_ping_uri && fpm_status_ping_response && !strcmp(fpm_status_ping_uri, SG(request_info).request_uri)) {
+ sapi_add_header_ex(ZEND_STRL("Content-Type: text/plain"), 1, 1 TSRMLS_CC);
+ SG(sapi_headers).http_response_code = 200;
+ PUTS(fpm_status_ping_response);
+ return 1;
+ }
- spprintf(content_type, 0, "Content-Type: text/plain");
-}
-/* }}} */
+ /* STATUS */
+ if (fpm_status_uri && !strcmp(fpm_status_uri, SG(request_info).request_uri)) {
-static void fpm_status_handle_status_html(struct fpm_status_s *status, char **output, char **content_type) /* {{{ */
-{
- if (!status || !output || !content_type) {
- return;
- }
+ if (!fpm_status_shm || !fpm_status_shm->mem) {
+ zlog(ZLOG_ERROR, "[pool %s] unable to find or access status shared memory", fpm_status_pool);
+ SG(sapi_headers).http_response_code = 500;
+ sapi_add_header_ex(ZEND_STRL("Content-Type: text/plain"), 1, 1 TSRMLS_CC);
+ PUTS("Internal error. Please review log file for errors.");
+ return 1;
+ }
- spprintf(output, 0,
- "<table>\n"
- "<tr><th>pool</th><td>%s</td></tr>\n"
- "<tr><th>process manager</th><td>%s</td></tr>\n"
- "<tr><th>accepted conn</th><td>%lu</td></tr>\n"
+ /* one shot operation */
+ status = *(struct fpm_status_s *)fpm_status_shm->mem;
+
+ if (status.idle < 0 || status.active < 0 || status.total < 0) {
+ zlog(ZLOG_ERROR, "[pool %s] invalid status values", fpm_status_pool);
+ SG(sapi_headers).http_response_code = 500;
+ sapi_add_header_ex(ZEND_STRL("Content-Type: text/plain"), 1, 1 TSRMLS_CC);
+ PUTS("Internal error. Please review log file for errors.");
+ return 1;
+ }
+
+ /* HTML */
+ if (SG(request_info).query_string && strstr(SG(request_info).query_string, "html")) {
+ sapi_add_header_ex(ZEND_STRL("Content-Type: text/html"), 1, 1 TSRMLS_CC);
+ syntax =
+ "<table>\n"
+ "<tr><th>pool</th><td>%s</td></tr>\n"
+ "<tr><th>process manager</th><td>%s</td></tr>\n"
+ "<tr><th>accepted conn</th><td>%lu</td></tr>\n"
#if HAVE_FPM_LQ
- "<tr><th>listen queue len</th><td>%u</td></tr>\n"
- "<tr><th>max listen queue len</th><td>%d</td></tr>\n"
+ "<tr><th>listen queue len</th><td>%u</td></tr>\n"
+ "<tr><th>max listen queue len</th><td>%d</td></tr>\n"
#endif
- "<tr><th>idle processes</th><td>%d</td></tr>\n"
- "<tr><th>active processes</th><td>%d</td></tr>\n"
- "<tr><th>total processes</th><td>%d</td></tr>\n"
- "<tr><th>max children reached</th><td>%u</td></tr>\n"
- "</table>",
- fpm_status_pool,
- status->pm == PM_STYLE_STATIC ? "static" : "dynamic",
- status->accepted_conn,
+ "<tr><th>idle processes</th><td>%d</td></tr>\n"
+ "<tr><th>active processes</th><td>%d</td></tr>\n"
+ "<tr><th>total processes</th><td>%d</td></tr>\n"
+ "<tr><th>max children reached</th><td>%u</td></tr>\n"
+ "</table>";
+
+ /* XML */
+ } else if (SG(request_info).request_uri && strstr(SG(request_info).query_string, "xml")) {
+ sapi_add_header_ex(ZEND_STRL("Content-Type: text/xml"), 1, 1 TSRMLS_CC);
+ syntax =
+ "<?xml version=\"1.0\" ?>\n"
+ "<status>\n"
+ "<pool>%s</pool>\n"
+ "<process-manager>%s</process-manager>\n"
+ "<accepted-conn>%lu</accepted-conn>\n"
#if HAVE_FPM_LQ
- status->cur_lq,
- status->max_lq,
+ "<listen-queue-len>%u</listen-queue-len>\n"
+ "<max-listen-queue-len>%d</max-listen-queue-len>\n"
#endif
- status->idle,
- status->active,
- status->total,
- status->max_children_reached);
+ "<idle-processes>%d</idle-processes>\n"
+ "<active-processes>%d</active-processes>\n"
+ "<total-processes>%d</total-processes>\n"
+ "<max-children-reached>%u</max-children-reached>\n"
+ "</status>";
- spprintf(content_type, 0, "Content-Type: text/html");
-}
-/* }}} */
+ /* JSON */
+ } else if (SG(request_info).request_uri && strstr(SG(request_info).query_string, "json")) {
+ sapi_add_header_ex(ZEND_STRL("Content-Type: application/json"), 1, 1 TSRMLS_CC);
-static void fpm_status_handle_status_json(struct fpm_status_s *status, char **output, char **content_type) /* {{{ */
-{
- if (!status || !output || !content_type) {
- return;
- }
+ syntax =
+ "{"
+ "\"pool\":\"%s\","
+ "\"process manager\":\"%s\","
+ "\"accepted conn\":%lu,"
+#if HAVE_FPM_LQ
+ "\"listen queue len\":%u,"
+ "\"max listen queue len\":%d,"
+#endif
+ "\"idle processes\":%d,"
+ "\"active processes\":%d,"
+ "\"total processes\":%d,"
+ "\"max children reached\":%u"
+ "}";
- spprintf(output, 0,
- "{"
- "\"pool\":\"%s\","
- "\"process manager\":\"%s\","
- "\"accepted conn\":%lu,"
+ /* TEXT */
+ } else {
+ sapi_add_header_ex(ZEND_STRL("Content-Type: text/plain"), 1, 1 TSRMLS_CC);
+ syntax =
+ "pool: %s\n"
+ "process manager: %s\n"
+ "accepted conn: %lu\n"
#if HAVE_FPM_LQ
- "\"listen queue len\":%u,"
- "\"max listen queue len\":%d,"
+ "listen queue len: %u\n"
+ "max listen queue len: %d\n"
#endif
- "\"idle processes\":%d,"
- "\"active processes\":%d,"
- "\"total processes\":%d,"
- "\"max children reached\":%u"
- "}",
- fpm_status_pool,
- status->pm == PM_STYLE_STATIC ? "static" : "dynamic",
- status->accepted_conn,
+ "idle processes: %d\n"
+ "active processes: %d\n"
+ "total processes: %d\n"
+ "max children reached: %u\n";
+ }
+
+ spprintf(&buffer, 0, syntax,
+ fpm_status_pool,
+ status.pm == PM_STYLE_STATIC ? "static" : "dynamic",
+ status.accepted_conn,
#if HAVE_FPM_LQ
- status->cur_lq,
- status->max_lq,
+ status.cur_lq,
+ status.max_lq,
#endif
- status->idle,
- status->active,
- status->total,
- status->max_children_reached);
+ status.idle,
+ status.active,
+ status.total,
+ status.max_children_reached);
- spprintf(content_type, 0, "Content-Type: application/json");
-}
-/* }}} */
+ SG(sapi_headers).http_response_code = 200;
+ PUTS(buffer);
+ efree(buffer);
-/* return 0 if it's not the request page
- * return 1 if ouput has been set)
- * *output unchanged: error (return 500)
- * *output changed: no error (return 200)
- */
-int fpm_status_handle_status(char *uri, char *query_string, char **output, char **content_type) /* {{{ */
-{
- struct fpm_status_s status;
-
- if (!fpm_status_uri || !uri) {
- return 0;
- }
-
- /* It's not the status page */
- if (strcmp(fpm_status_uri, uri)) {
- return 0;
- }
-
- if (!output || !content_type || !fpm_status_shm) {
return 1;
}
- if (!fpm_status_shm->mem) {
- return 1;
- }
-
- /* one shot operation */
- status = *(struct fpm_status_s *)fpm_status_shm->mem;
-
- if (status.idle < 0 || status.active < 0 || status.total < 0) {
- return 1;
- }
-
- if (query_string && strstr(query_string, "html")) {
- fpm_status_handle_status_html(&status, output, content_type);
- } else if (query_string && strstr(query_string, "json")) {
- fpm_status_handle_status_json(&status, output, content_type);
- } else {
- fpm_status_handle_status_txt(&status, output, content_type);
- }
-
- if (!*output || !content_type) {
- zlog(ZLOG_ERROR, "[pool %s] unable to allocate status ouput buffer", fpm_status_pool);
- return 1;
- }
-
- return 1;
+ return 0;
}
/* }}} */
-char *fpm_status_handle_ping(char *uri) /* {{{ */
-{
- if (!fpm_status_ping || !fpm_status_pong || !uri) {
- return NULL;
- }
-
- /* It's not the status page */
- if (strcmp(fpm_status_ping, uri)) {
- return NULL;
- }
-
- return fpm_status_pong;
-}
-/* }}} */
-
Modified: php/php-src/trunk/sapi/fpm/fpm/fpm_status.h
===================================================================
--- php/php-src/trunk/sapi/fpm/fpm/fpm_status.h 2011-06-17 21:42:40 UTC (rev 312243)
+++ php/php-src/trunk/sapi/fpm/fpm/fpm_status.h 2011-06-17 23:19:54 UTC (rev 312244)
@@ -28,8 +28,7 @@
void fpm_status_set_pm(struct fpm_shm_s *shm, int pm);
void fpm_status_update_max_children_reached(struct fpm_shm_s *shm, unsigned int max_children_reached);
void fpm_status_increment_max_children_reached(struct fpm_shm_s *shm);
-int fpm_status_handle_status(char *uri, char *query_string, char **output, char **content_type);
-char* fpm_status_handle_ping(char *uri);
+int fpm_status_handle_request();
extern struct fpm_shm_s *fpm_status_shm;
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php