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: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]