You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by mt...@apache.org on 2006/11/26 19:42:41 UTC
svn commit: r479400 - in /tomcat/connectors/trunk/jk/native/common:
jk_status.c jk_util.c jk_util.h
Author: mturk
Date: Sun Nov 26 10:42:41 2006
New Revision: 479400
URL: http://svn.apache.org/viewvc?view=rev&rev=479400
Log:
Make status worker XML constants user configurable.
Added ns, xmlns and doctype properties that user
can set to create custom xml.
Modified:
tomcat/connectors/trunk/jk/native/common/jk_status.c
tomcat/connectors/trunk/jk/native/common/jk_util.c
tomcat/connectors/trunk/jk/native/common/jk_util.h
Modified: tomcat/connectors/trunk/jk/native/common/jk_status.c
URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_status.c?view=diff&rev=479400&r1=479399&r2=479400
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_status.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_status.c Sun Nov 26 10:42:41 2006
@@ -121,10 +121,9 @@
#define JK_STATUS_HEND "</head>\n<body>\n"
#define JK_STATUS_BEND "</body>\n</html>\n"
-#define JK_STATUS_XMLH "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" \
- "<jk:status xmlns:jk=\"http://tomcat.apache.org\">\n"
-
-#define JK_STATUS_XMLE "</jk:status>\n"
+#define JK_STATUS_XMLH "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"
+#define JK_NSDEF "jk:"
+#define JK_XMLNSDEF "xmlns:jk=\"http://tomcat.apache.org\""
typedef struct status_worker status_worker_t;
@@ -143,6 +142,9 @@
jk_pool_atom_t buf[TINY_POOL_SIZE];
const char *name;
const char *css;
+ const char *ns;
+ const char *xmlns;
+ const char *doctype;
int read_only;
char **user_names;
int num_of_users;
@@ -599,6 +601,7 @@
static void display_maps_xml(jk_ws_service_t *s,
jk_uri_worker_map_t *uwmap,
+ status_worker_t *sw,
const char *worker, jk_logger_t *l)
{
char buf[64];
@@ -612,7 +615,7 @@
continue;
}
count++;
- jk_printf(s, " <jk:map\n");
+ jk_putv(s, " <", sw->ns, "map\n", NULL);
jk_printf(s, " type=\"%s\"\n", uri_worker_map_get_match(uwr, buf, l));
jk_printf(s, " uri=\"%s\"\n", uwr->uri);
jk_printf(s, " source=\"%s\"/>\n", uri_worker_map_get_source(uwr, l));
@@ -689,7 +692,7 @@
if (single) {
jk_puts(s, "<hr/>\n");
status_write_uri(s, "Back to full worker list", JK_STATUS_CMD_LIST,
- 0, 0, refresh, NULL, NULL);
+ 0, 0, refresh, NULL, NULL);
jk_puts(s, "<br/>\n");
from = JK_STATUS_CMD_SHOW;
}
@@ -712,14 +715,14 @@
}
else {
status_write_uri(s, "S", JK_STATUS_CMD_SHOW,
- 0, 0, refresh, name, NULL);
+ 0, 0, refresh, name, NULL);
}
jk_puts(s, "|");
status_write_uri(s, "E", JK_STATUS_CMD_EDIT,
- 0, from, refresh, name, NULL);
+ 0, from, refresh, name, NULL);
jk_puts(s, "|");
status_write_uri(s, "R", JK_STATUS_CMD_RESET,
- 0, from, refresh, name, NULL);
+ 0, from, refresh, name, NULL);
jk_puts(s, "] ");
jk_putv(s, "Worker Status for ", name, "<h3/>\n", NULL);
jk_putv(s, "<table><tr>"
@@ -763,24 +766,27 @@
jk_printf(s, "<td>%d</td>", lb->s->busy);
jk_printf(s, "<td>%d</td>", lb->s->max_busy);
jk_puts(s, "</tr>\n</table>\n<br/>\n");
-
+ jk_puts(s, "<p><h4>Balancer Members</h4></p>\n");
jk_putv(s, "<table><tr>"
- "<th>Name</th><th>Type</th><th>", JK_STATUS_ARG_LBM_TEXT_ROUTE,
- "</th><th>Host</th><th>Addr</th>"
- "<th>Act</th><th>Stat</th><th>D</th><th>F</th><th>M</th><th>V</th><th>Acc</th><th>Err</th><th>CE</th>"
- "<th>Wr</th><th>Rd</th><th>Busy</th><th>Max</th><th>RR</th><th>Cd</th><th>Rs</th></tr>\n", NULL);
+ "<th> </th><th>Name</th><th>Type</th>"
+ "<th>Host</th><th>Addr</th>"
+ "<th>Act</th><th>Stat</th><th>D</th><th>F</th><th>M</th>"
+ "<th>V</th><th>Acc</th><th>Err</th><th>CE</th>"
+ "<th>Wr</th><th>Rd</th><th>Busy</th><th>Max</th><th>",
+ JK_STATUS_ARG_LBM_TEXT_ROUTE,
+ "</th><th>RR</th><th>Cd</th><th>Rs</th></tr>\n", NULL);
for (j = 0; j < lb->num_of_workers; j++) {
worker_record_t *wr = &(lb->lb_workers[j]);
ajp_worker_t *a = (ajp_worker_t *)wr->w->worker_private;
jk_puts(s, "<tr>\n<td>[");
status_write_uri(s, "E", JK_STATUS_CMD_EDIT,
- 0, from, refresh, name, wr->s->name);
+ 0, from, refresh, name, wr->s->name);
jk_puts(s, "|");
status_write_uri(s, "R", JK_STATUS_CMD_RESET,
- 0, from, refresh, name, wr->s->name);
- jk_putv(s, "] ", wr->s->name, "</td>\n", NULL);
+ 0, from, refresh, name, wr->s->name);
+ jk_puts(s, "] </td>");
+ jk_putv(s, "<td>", wr->s->name, "</td>", NULL);
jk_putv(s, "<td>", status_worker_type(wr->w->type), "</td>", NULL);
- jk_putv(s, "<td>", wr->s->jvm_route, "</td>", NULL);
jk_printf(s, "<td>%s:%d</td>", a->host, a->port);
jk_putv(s, "<td>", jk_dump_hinfo(&a->worker_inet_addr, buf),
"</td>", NULL);
@@ -799,17 +805,18 @@
jk_putv(s, "<td>", status_strfsize(wr->s->readed, buf),
"</td>", NULL);
jk_printf(s, "<td>%u</td>", wr->s->busy);
- jk_printf(s, "<td>%u</td>\n<td>", wr->s->max_busy);
+ jk_printf(s, "<td>%u</td>", wr->s->max_busy);
+ jk_putv(s, "<td>", wr->s->jvm_route, "</td><td>", NULL);
if (wr->s->redirect && *wr->s->redirect)
jk_puts(s, wr->s->redirect);
else
jk_puts(s," ");
- jk_puts(s, "</td>\n<td>");
+ jk_puts(s, "</td><td>");
if (wr->s->domain && *wr->s->domain)
jk_puts(s, wr->s->domain);
else
jk_puts(s," ");
- jk_puts(s, "</td>\n<td>");
+ jk_puts(s, "</td><td>");
if (wr->s->state == JK_LB_STATE_ERROR) {
int rs = lb->maintain_time - (int)difftime(now, lb->s->last_maintain_time);
if (rs < lb->recover_wait_time - (int)difftime(now, wr->s->error_time))
@@ -828,7 +835,7 @@
jk_puts(s, "S");
else
status_write_uri(s, "S", JK_STATUS_CMD_SHOW,
- 0, from, refresh, name, NULL);
+ 0, from, refresh, name, NULL);
jk_puts(s, "] ");
jk_putv(s, "Worker Status for ", name, "<h3/>\n", NULL);
jk_puts(s, "\n\n<table><tr>"
@@ -846,8 +853,8 @@
}
static void display_worker_xml(jk_ws_service_t *s, jk_worker_t *w,
- int single,
- jk_logger_t *l)
+ status_worker_t *sw, int single,
+ jk_logger_t *l)
{
char buf[32];
const char *name = NULL;
@@ -905,7 +912,7 @@
good++;
}
- jk_printf(s, " <jk:balancer\n");
+ jk_putv(s, " <", sw->ns, "balancer\n", NULL);
jk_printf(s, " name=\"%s\"\n", name);
jk_printf(s, " type=\"%s\"\n", status_worker_type(w->type));
jk_printf(s, " sticky=\"%s\"\n", status_val_bool(lb->sticky_session));
@@ -925,7 +932,7 @@
ajp_worker_t *a = (ajp_worker_t *)wr->w->worker_private;
int rs = 0;
/* TODO: descriptive status */
- jk_printf(s, " <jk:member\n");
+ jk_putv(s, " <", sw->ns, "member\n", NULL);
jk_printf(s, " name=\"%s\"\n", wr->s->name);
jk_printf(s, " type=\"%s\"\n", status_worker_type(wr->w->type));
jk_printf(s, " host=\"%s\"\n", a->host);
@@ -955,19 +962,19 @@
jk_printf(s, " time-to-recover=\"%u\"/>\n", rs < 0 ? 0 : rs);
}
if (name)
- display_maps_xml(s, s->uw_map, name, l);
- jk_puts(s, " </jk:balancer>\n");
+ display_maps_xml(s, s->uw_map, sw, name, l);
+ jk_putv(s, " </", sw->ns, "balancer>\n", NULL);
}
else if (aw) {
- jk_printf(s, "<jk:ajp\n");
+ jk_putv(s, "<", sw->ns, "ajp\n", NULL);
jk_printf(s, " name=\"%s\"\n", name);
jk_printf(s, " type=\"%s\"\n", status_worker_type(w->type));
jk_printf(s, " host=\"%s\"\n", aw->host);
jk_printf(s, " port=\"%d\"\n", aw->port);
jk_printf(s, " address=\"%s\"/>\n", jk_dump_hinfo(&aw->worker_inet_addr, buf));
if (name)
- display_maps_xml(s, s->uw_map, name, l);
- jk_puts(s, "</jk:ajp>\n");
+ display_maps_xml(s, s->uw_map, sw, name, l);
+ jk_putv(s, "</", sw->ns, "ajp>\n", NULL);
}
JK_TRACE_EXIT(l);
}
@@ -1200,37 +1207,37 @@
name, "</h3>\n", NULL);
jk_puts(s, "[<a href=\"");
status_write_uri(s, NULL, JK_STATUS_CMD_EDIT,
- 0, from, refresh, name, NULL);
+ 0, from, refresh, name, NULL);
jk_putv(s, "&", JK_STATUS_ARG_LB_MEMBER_ATT, "=",
JK_STATUS_ARG_LBM_ACTIVATION, "\">",
JK_STATUS_ARG_LBM_TEXT_ACTIVATION, "</a>\n", NULL);
jk_puts(s, "|<a href=\"");
status_write_uri(s, NULL, JK_STATUS_CMD_EDIT,
- 0, from, refresh, name, NULL);
+ 0, from, refresh, name, NULL);
jk_putv(s, "&", JK_STATUS_ARG_LB_MEMBER_ATT, "=",
JK_STATUS_ARG_LBM_FACTOR, "\">",
JK_STATUS_ARG_LBM_TEXT_FACTOR, "</a>\n", NULL);
jk_puts(s, "|<a href=\"");
status_write_uri(s, NULL, JK_STATUS_CMD_EDIT,
- 0, from, refresh, name, NULL);
+ 0, from, refresh, name, NULL);
jk_putv(s, "&", JK_STATUS_ARG_LB_MEMBER_ATT, "=",
JK_STATUS_ARG_LBM_ROUTE, "\">",
JK_STATUS_ARG_LBM_TEXT_ROUTE, "</a>\n", NULL);
jk_puts(s, "|<a href=\"");
status_write_uri(s, NULL, JK_STATUS_CMD_EDIT,
- 0, from, refresh, name, NULL);
+ 0, from, refresh, name, NULL);
jk_putv(s, "&", JK_STATUS_ARG_LB_MEMBER_ATT, "=",
JK_STATUS_ARG_LBM_REDIRECT, "\">",
JK_STATUS_ARG_LBM_TEXT_REDIRECT, "</a>\n", NULL);
jk_puts(s, "|<a href=\"");
status_write_uri(s, NULL, JK_STATUS_CMD_EDIT,
- 0, from, refresh, name, NULL);
+ 0, from, refresh, name, NULL);
jk_putv(s, "&", JK_STATUS_ARG_LB_MEMBER_ATT, "=",
JK_STATUS_ARG_LBM_DOMAIN, "\">",
JK_STATUS_ARG_LBM_TEXT_DOMAIN, "</a>\n", NULL);
jk_puts(s, "|<a href=\"");
status_write_uri(s, NULL, JK_STATUS_CMD_EDIT,
- 0, from, refresh, name, NULL);
+ 0, from, refresh, name, NULL);
jk_putv(s, "&", JK_STATUS_ARG_LB_MEMBER_ATT, "=",
JK_STATUS_ARG_LBM_DISTANCE, "\">",
JK_STATUS_ARG_LBM_TEXT_DISTANCE, "</a>\n", NULL);
@@ -1507,7 +1514,7 @@
lb->lblock = i;
}
lb->sequence++;
- jk_lb_push(lb, l);
+ jk_lb_push(lb, l);
}
static int commit_member(jk_ws_service_t *s, worker_record_t *wr,
@@ -1842,13 +1849,13 @@
}
if (w->type == JK_LB_WORKER_TYPE) {
if (!has_lb)
- jk_puts(s, "<jk:balancers>\n");
+ jk_putv(s, "<", sw->ns, "balancers>\n", NULL);
has_lb = 1;
- display_worker_xml(s, w, 0, l);
+ display_worker_xml(s, w, sw, 0, l);
}
}
if (has_lb)
- jk_puts(s, "</jk:balancers>\n");
+ jk_putv(s, "</", sw->ns, "balancers>\n", NULL);
for (i = 0; i < sw->we->num_of_workers; i++) {
w = wc_get_worker_for_name(sw->we->worker_list[i], l);
@@ -1859,7 +1866,7 @@
continue;
}
if (w->type != JK_LB_WORKER_TYPE) {
- display_worker_xml(s, w, 0, l);
+ display_worker_xml(s, w, sw, 0, l);
}
}
JK_TRACE_EXIT(l);
@@ -1963,7 +1970,7 @@
JK_TRACE_EXIT(l);
return JK_FALSE;
}
- display_worker_xml(s, w, 1, l);
+ display_worker_xml(s, w, sw, 1, l);
JK_TRACE_EXIT(l);
return JK_TRUE;
}
@@ -2293,6 +2300,13 @@
else if (mime == JK_STATUS_MIME_XML) {
s->start_response(s, 200, "OK", headers_names, headers_vxml, 3);
s->write(s, JK_STATUS_XMLH, sizeof(JK_STATUS_XMLH) - 1);
+ if (w->doctype) {
+ jk_putv(s, w->doctype, "\n", NULL);
+ }
+ jk_putv(s, "<", w->ns, "status", NULL);
+ if (w->xmlns && strlen(w->xmlns))
+ jk_putv(s, " ", w->xmlns, NULL);
+ jk_puts(s, ">\n");
}
else {
s->start_response(s, 200, "OK", headers_names, headers_vtxt, 3);
@@ -2388,7 +2402,7 @@
}
else {
if (mime == JK_STATUS_MIME_XML) {
- jk_printf(s, "<jk:server\n");
+ jk_putv(s, "<", w->ns, "server\n", NULL);
jk_printf(s, " name=\"%s\"\n", s->server_name);
jk_printf(s, " port=\"%d\"\n", s->server_port);
jk_printf(s, " software=\"%s\"\n", s->server_software);
@@ -2464,7 +2478,7 @@
int result = 0;
int scan = 0;
int len = strlen(JK_STATUS_ARG_REFRESH);
-
+
while (str[scan] != 0) {
if (strncmp(&str[scan], JK_STATUS_ARG_REFRESH, len) == 0 &&
str[scan+len] == '=') {
@@ -2489,7 +2503,7 @@
}
}
buf[result] = '\0';
-
+
jk_putv(s, "[<a href=\"", s->req_uri, NULL);
if (buf && buf[0])
jk_putv(s, "?", buf, NULL);
@@ -2554,7 +2568,7 @@
s->write(s, JK_STATUS_BEND, sizeof(JK_STATUS_BEND) - 1);
}
else if (mime == JK_STATUS_MIME_XML) {
- s->write(s, JK_STATUS_XMLE, sizeof(JK_STATUS_XMLE) - 1);
+ jk_putv(s, "</", w->ns, "status>\n", NULL);
}
JK_TRACE_EXIT(l);
return JK_TRUE;
@@ -2601,6 +2615,9 @@
int i;
p->we = we;
p->css = jk_get_worker_style_sheet(props, p->name, NULL);
+ p->ns = jk_get_worker_name_space(props, p->name, JK_NSDEF);
+ p->xmlns = jk_get_worker_xmlns(props, p->name, JK_XMLNSDEF);
+ p->doctype = jk_get_worker_xml_doctype(props, p->name, NULL);
p->read_only = jk_get_is_read_only(props, p->name);
if (JK_IS_DEBUG_LEVEL(log))
jk_log(log, JK_LOG_DEBUG,
Modified: tomcat/connectors/trunk/jk/native/common/jk_util.c
URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_util.c?view=diff&rev=479400&r1=479399&r2=479400
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_util.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_util.c Sun Nov 26 10:42:41 2006
@@ -77,6 +77,10 @@
#define WORKER_RECOVER_TIME ("recover_time")
#define WORKER_MAX_PACKET_SIZE ("max_packet_size")
#define STYLE_SHEET_OF_WORKER ("css")
+#define NAMESPACE_OF_WORKER ("ns")
+#define XML_NAMESPACE_OF_WORKER ("xmlns")
+#define XML_DOCTYPE_OF_WORKER ("doctype")
+
#define READ_ONLY_OF_WORKER ("read_only")
#define USER_OF_WORKER ("user")
@@ -165,6 +169,9 @@
READ_ONLY_OF_WORKER,
RETRIES_OF_WORKER,
WORKER_MAINTAIN_PROPERTY_NAME,
+ NAMESPACE_OF_WORKER,
+ XML_NAMESPACE_OF_WORKER,
+ XML_DOCTYPE_OF_WORKER,
NULL
};
@@ -975,7 +982,7 @@
sz = DEF_BUFFER_SZ;
else if (sz > 64*1024)
sz = 64*1024;
-
+
return sz;
}
@@ -989,6 +996,46 @@
MAKE_WORKER_PARAM(STYLE_SHEET_OF_WORKER);
+ return jk_map_get_string(m, buf, def);
+}
+
+const char *jk_get_worker_name_space(jk_map_t *m, const char *wname, const char *def)
+{
+ const char *rc;
+ char buf[1024];
+ if (!m || !wname) {
+ return NULL;
+ }
+ MAKE_WORKER_PARAM(NAMESPACE_OF_WORKER);
+ rc = jk_map_get_string(m, buf, def);
+ if (*rc == '-')
+ return "";
+ else
+ return rc;
+}
+
+const char *jk_get_worker_xmlns(jk_map_t *m, const char *wname, const char *def)
+{
+ const char *rc;
+ char buf[1024];
+ if (!m || !wname) {
+ return NULL;
+ }
+ MAKE_WORKER_PARAM(XML_NAMESPACE_OF_WORKER);
+ rc = jk_map_get_string(m, buf, def);
+ if (*rc == '-')
+ return "";
+ else
+ return rc;
+}
+
+const char *jk_get_worker_xml_doctype(jk_map_t *m, const char *wname, const char *def)
+{
+ char buf[1024];
+ if (!m || !wname) {
+ return NULL;
+ }
+ MAKE_WORKER_PARAM(XML_DOCTYPE_OF_WORKER);
return jk_map_get_string(m, buf, def);
}
Modified: tomcat/connectors/trunk/jk/native/common/jk_util.h
URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_util.h?view=diff&rev=479400&r1=479399&r2=479400
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_util.h (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_util.h Sun Nov 26 10:42:41 2006
@@ -177,6 +177,12 @@
const char *wname,
char ***list, unsigned int *num_of_users);
+const char *jk_get_worker_name_space(jk_map_t *m, const char *wname, const char *def);
+
+const char *jk_get_worker_xmlns(jk_map_t *m, const char *wname, const char *def);
+
+const char *jk_get_worker_xml_doctype(jk_map_t *m, const char *wname, const char *def);
+
#define TC32_BRIDGE_TYPE 32
#define TC33_BRIDGE_TYPE 33
#define TC40_BRIDGE_TYPE 40
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org