Author: rjung Date: Sat Jan 27 07:15:48 2007 New Revision: 500543 URL: http://svn.apache.org/viewvc?view=rev&rev=500543 Log: - Allow a user of a read/write status worker to switch it to and from read_only mode temporarily. - Do not show read/write commands in a read_only status worker.
Modified: tomcat/connectors/trunk/jk/native/common/jk_status.c tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml tomcat/connectors/trunk/jk/xdocs/reference/status.xml tomcat/connectors/trunk/jk/xdocs/reference/workers.xml 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=500543&r1=500542&r2=500543 ============================================================================== --- tomcat/connectors/trunk/jk/native/common/jk_status.c (original) +++ tomcat/connectors/trunk/jk/native/common/jk_status.c Sat Jan 27 07:15:48 2007 @@ -69,6 +69,7 @@ #define JK_STATUS_ARG_OPTION_NO_LEGEND 0x0004 #define JK_STATUS_ARG_OPTION_NO_LB 0x0008 #define JK_STATUS_ARG_OPTION_NO_AJP 0x0010 +#define JK_STATUS_ARG_OPTION_READ_ONLY 0x0020 #define JK_STATUS_ARG_LB_RETRIES ("lr") #define JK_STATUS_ARG_LB_RECOVER_TIME ("lt") @@ -1150,6 +1151,7 @@ char buf_wr[32]; int cmd; int mime; + int read_only = 0; int single = 0; unsigned int hide_members; const char *arg; @@ -1169,6 +1171,13 @@ mime = status_mime_int(arg); hide_members = status_get_int(p, JK_STATUS_ARG_OPTIONS, 0, l) & JK_STATUS_ARG_OPTION_NO_MEMBERS; + if (w->read_only) { + read_only = 1; + } + else { + read_only = status_get_int(p, JK_STATUS_ARG_OPTIONS, 0, l) & + JK_STATUS_ARG_OPTION_READ_ONLY; + } if (cmd == JK_STATUS_CMD_SHOW) { single = 1; } @@ -1202,12 +1211,14 @@ status_write_uri(s, p, "S", JK_STATUS_CMD_SHOW, JK_STATUS_MIME_UNKNOWN, name, "", 0, 0, "", l); } - jk_puts(s, "|"); - status_write_uri(s, p, "E", JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN, - name, "", 0, 0, "", l); - jk_puts(s, "|"); - status_write_uri(s, p, "R", JK_STATUS_CMD_RESET, JK_STATUS_MIME_UNKNOWN, - name, "", 0, 0, "", l); + if (!read_only) { + jk_puts(s, "|"); + status_write_uri(s, p, "E", JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN, + name, "", 0, 0, "", l); + jk_puts(s, "|"); + status_write_uri(s, p, "R", JK_STATUS_CMD_RESET, JK_STATUS_MIME_UNKNOWN, + name, "", 0, 0, "", l); + } jk_puts(s, "] "); jk_putv(s, "Worker Status for ", name, "</h3>\n", NULL); jk_puts(s, "<table>" JK_STATUS_SHOW_LB_HEAD); @@ -1324,18 +1335,22 @@ if (mime == JK_STATUS_MIME_HTML) { - jk_puts(s, "<tr>\n<td>["); - status_write_uri(s, p, "E", JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN, - name, wr->s->name, 0, 0, "", l); - jk_puts(s, "|"); - status_write_uri(s, p, "R", JK_STATUS_CMD_RESET, JK_STATUS_MIME_UNKNOWN, - name, wr->s->name, 0, 0, "", l); - if (wr->s->state == JK_LB_STATE_ERROR) { + jk_puts(s, "<tr>\n<td>"); + if (!read_only) { + jk_puts(s, "["); + status_write_uri(s, p, "E", JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN, + name, wr->s->name, 0, 0, "", l); jk_puts(s, "|"); - status_write_uri(s, p, "T", JK_STATUS_CMD_RECOVER, JK_STATUS_MIME_UNKNOWN, + status_write_uri(s, p, "R", JK_STATUS_CMD_RESET, JK_STATUS_MIME_UNKNOWN, name, wr->s->name, 0, 0, "", l); + if (wr->s->state == JK_LB_STATE_ERROR) { + jk_puts(s, "|"); + status_write_uri(s, p, "T", JK_STATUS_CMD_RECOVER, JK_STATUS_MIME_UNKNOWN, + name, wr->s->name, 0, 0, "", l); + } + jk_puts(s, "]"); } - jk_puts(s, "] </td>"); + jk_puts(s, " </td>"); jk_printf(s, JK_STATUS_SHOW_MEMBER_ROW, wr->s->name, status_worker_type(wr->w->type), @@ -1448,25 +1463,27 @@ if (mime == JK_STATUS_MIME_HTML) { jk_puts(s, "</table><br/>\n"); - jk_puts(s, "<b>E</b>dit one attribute for all members: ["); - status_write_uri(s, p, JK_STATUS_ARG_LBM_TEXT_ACTIVATION, JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN, - name, "", 0, 0, JK_STATUS_ARG_LBM_ACTIVATION, l); - jk_puts(s, "\n|"); - status_write_uri(s, p, JK_STATUS_ARG_LBM_TEXT_FACTOR, JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN, - name, "", 0, 0, JK_STATUS_ARG_LBM_FACTOR, l); - jk_puts(s, "\n|"); - status_write_uri(s, p, JK_STATUS_ARG_LBM_TEXT_ROUTE, JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN, - name, "", 0, 0, JK_STATUS_ARG_LBM_ROUTE, l); - jk_puts(s, "\n|"); - status_write_uri(s, p, JK_STATUS_ARG_LBM_TEXT_REDIRECT, JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN, - name, "", 0, 0, JK_STATUS_ARG_LBM_REDIRECT, l); - jk_puts(s, "\n|"); - status_write_uri(s, p, JK_STATUS_ARG_LBM_TEXT_DOMAIN, JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN, - name, "", 0, 0, JK_STATUS_ARG_LBM_DOMAIN, l); - jk_puts(s, "\n|"); - status_write_uri(s, p, JK_STATUS_ARG_LBM_TEXT_DISTANCE, JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN, - name, "", 0, 0, JK_STATUS_ARG_LBM_DISTANCE, l); - jk_puts(s, "\n]<br/>\n"); + if (!read_only) { + jk_puts(s, "<b>E</b>dit one attribute for all members: ["); + status_write_uri(s, p, JK_STATUS_ARG_LBM_TEXT_ACTIVATION, JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN, + name, "", 0, 0, JK_STATUS_ARG_LBM_ACTIVATION, l); + jk_puts(s, "\n|"); + status_write_uri(s, p, JK_STATUS_ARG_LBM_TEXT_FACTOR, JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN, + name, "", 0, 0, JK_STATUS_ARG_LBM_FACTOR, l); + jk_puts(s, "\n|"); + status_write_uri(s, p, JK_STATUS_ARG_LBM_TEXT_ROUTE, JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN, + name, "", 0, 0, JK_STATUS_ARG_LBM_ROUTE, l); + jk_puts(s, "\n|"); + status_write_uri(s, p, JK_STATUS_ARG_LBM_TEXT_REDIRECT, JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN, + name, "", 0, 0, JK_STATUS_ARG_LBM_REDIRECT, l); + jk_puts(s, "\n|"); + status_write_uri(s, p, JK_STATUS_ARG_LBM_TEXT_DOMAIN, JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN, + name, "", 0, 0, JK_STATUS_ARG_LBM_DOMAIN, l); + jk_puts(s, "\n|"); + status_write_uri(s, p, JK_STATUS_ARG_LBM_TEXT_DISTANCE, JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN, + name, "", 0, 0, JK_STATUS_ARG_LBM_DISTANCE, l); + jk_puts(s, "\n]<br/>\n"); + } } @@ -2919,6 +2936,7 @@ int cmd; int mime; int refresh; + int read_only = 0; const char *arg; char *err = NULL; status_endpoint_t *p; @@ -2963,6 +2981,13 @@ status_get_string(p, JK_STATUS_ARG_MIME, NULL, &arg, l); mime = status_mime_int(arg); refresh = status_get_int(p, JK_STATUS_ARG_REFRESH, 0, l); + if (w->read_only) { + read_only = 1; + } + else { + read_only = status_get_int(p, JK_STATUS_ARG_OPTIONS, 0, l) & + JK_STATUS_ARG_OPTION_READ_ONLY; + } if (mime == JK_STATUS_MIME_HTML) { s->start_response(s, 200, "OK", headers_names, headers_vhtml, 3); @@ -3021,7 +3046,7 @@ } if (!err) { - if (w->read_only && + if (read_only && (cmd == JK_STATUS_CMD_EDIT || cmd == JK_STATUS_CMD_UPDATE || cmd == JK_STATUS_CMD_RESET || @@ -3195,6 +3220,9 @@ jk_puts(s, "<h1>JK Status Manager for "); jk_puts(s, s->server_name); jk_printf(s, ":%d", s->server_port); + if (read_only) { + jk_puts(s, " (read only)"); + } jk_puts(s, "</h1>\n\n"); if ((cmd == JK_STATUS_CMD_LIST) || (cmd == JK_STATUS_CMD_SHOW) || @@ -3289,12 +3317,26 @@ jk_puts(s, "] "); } if (cmd == JK_STATUS_CMD_LIST || cmd == JK_STATUS_CMD_SHOW) { + if (!w->read_only) { + jk_puts(s, "["); + if (read_only) { + status_write_uri(s, p, "Read/Write", 0, JK_STATUS_MIME_UNKNOWN, + NULL, NULL, 0, JK_STATUS_ARG_OPTION_READ_ONLY, NULL, l); + } + else { + status_write_uri(s, p, "Read Only", 0, JK_STATUS_MIME_UNKNOWN, + NULL, NULL, JK_STATUS_ARG_OPTION_READ_ONLY, 0, NULL, l); + } + jk_puts(s, "] \n"); + } + } + if (cmd == JK_STATUS_CMD_LIST || cmd == JK_STATUS_CMD_SHOW) { jk_puts(s, "["); if (cmd == JK_STATUS_CMD_LIST) jk_puts(s, "<b>S</b>=Show only this worker"); - if (!w->read_only && cmd == JK_STATUS_CMD_LIST) + if (!read_only && cmd == JK_STATUS_CMD_LIST) jk_puts(s, ", "); - if (!w->read_only) + if (!read_only) jk_puts(s, "<b>E</b>=Edit worker, <b>R</b>=Reset worker state, <b>T</b>=Try worker recovery"); jk_puts(s, "]\n"); } Modified: tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml?view=diff&rev=500543&r1=500542&r2=500543 ============================================================================== --- tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml (original) +++ tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml Sat Jan 27 07:15:48 2007 @@ -27,6 +27,13 @@ <subsection name="Native"> <changelog> <add> + JkStatus: Allow a user of a read/write status worker to switch it + to and from read_only mode temporarily. (rjung) + </add> + <fix> + JkStatus: Do not show read/write commands in a read_only status worker. (rjung) + </fix> + <add> JkStatus: Allow lb sub workers in error state to be marked for recovery administratively from the status worker. (rjung) </add> Modified: tomcat/connectors/trunk/jk/xdocs/reference/status.xml URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/xdocs/reference/status.xml?view=diff&rev=500543&r1=500542&r2=500543 ============================================================================== --- tomcat/connectors/trunk/jk/xdocs/reference/status.xml (original) +++ tomcat/connectors/trunk/jk/xdocs/reference/status.xml Sat Jan 27 07:15:48 2007 @@ -242,7 +242,7 @@ attributes of status workers are helpful. The attribute "read_only" disables all features of the status worker, that can be used to change configurations or runtime status of the other workers. A read_only status worker will not allow access to the edit, update, reset or recover actions. -The default value is "False", ie. read-write. To enable read_only you need to set it to "True". +The default value is "False", ie. read/write. To enable read_only you need to set it to "True". </p> <p> You could configure two status workers, one has read_only and will be made available to a larger @@ -369,6 +369,9 @@ </li> <li> <b>0x0010</b>: hide ajp workers +</li> +<li> +<b>0x0020</b>: only allow read_only actions for a read/write status worker. </li> </ul> </p> Modified: tomcat/connectors/trunk/jk/xdocs/reference/workers.xml URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/xdocs/reference/workers.xml?view=diff&rev=500543&r1=500542&r2=500543 ============================================================================== --- tomcat/connectors/trunk/jk/xdocs/reference/workers.xml (original) +++ tomcat/connectors/trunk/jk/xdocs/reference/workers.xml Sat Jan 27 07:15:48 2007 @@ -375,7 +375,7 @@ <directive name="read_only" default="False" required="false"> A status worker with read_only=True will not allow any operations, that change the runtime state or configuration of the other workers. -These are edit/update/reset. +These are edit/update/reset/recover. <p> This feature has been added in <b>jk 1.2.20</b>. </p> --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]