mturk       2005/02/20 04:21:51

  Modified:    jk/native/common jk_status.c
  Log:
  Display uri mappings with type and status for each worker.
  
  Revision  Changes    Path
  1.19      +72 -4     jakarta-tomcat-connectors/jk/native/common/jk_status.c
  
  Index: jk_status.c
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_status.c,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- jk_status.c       19 Feb 2005 08:12:29 -0000      1.18
  +++ jk_status.c       20 Feb 2005 12:21:51 -0000      1.19
  @@ -32,6 +32,7 @@
   #include "jk_ajp13_worker.h"
   #include "jk_ajp14_worker.h"
   #include "jk_connect.h"
  +#include "jk_uri_worker_map.h"
   
   #define HUGE_BUFFER_SIZE (8*1024)
   
  @@ -213,6 +214,28 @@
           return "OK";
   }
   
  +static const char *status_val_match(unsigned int match)
  +{
  +    if (match & MATCH_TYPE_DISABLED)
  +        return "Disabled";
  +    else if (match & MATCH_TYPE_NO_MATCH)
  +        return "Unmount";
  +    else if (match & MATCH_TYPE_EXACT)
  +        return "Exact";
  +    else if (match & MATCH_TYPE_CONTEXT)
  +        return "Context";
  +    else if (match & MATCH_TYPE_CONTEXT_PATH)
  +        return "Context Path";
  +    else if (match & MATCH_TYPE_SUFFIX)
  +        return "Suffix";
  +    else if (match & MATCH_TYPE_GENERAL_SUFFIX)
  +        return "General Suffix";
  +    else if (match & MATCH_TYPE_WILDCHAR_PATH)
  +        return "Wildchar";
  +    else
  +        return "Error";
  +}
  +
   static void jk_puts(jk_ws_service_t *s, const char *str)
   {
       if (str)
  @@ -294,6 +317,28 @@
       return rv;
   }
   
  +static void display_maps(jk_ws_service_t *s, status_worker_t *sw,
  +                         jk_uri_worker_map_t *uwmap,
  +                         const char *worker, jk_logger_t *l)
  +{
  +    unsigned int i;
  +    
  +    jk_puts(s, "<tr><td collpan=\"2\">Uri mappings</td></tr>\n");
  +    for (i = 0; i < uwmap->size; i++) {
  +        uri_worker_record_t *uwr = uwmap->maps[i];
  +        if (strcmp(uwr->worker_name, worker))
  +            continue;
  +        jk_printf(s, "<tr><td><input name=\"mi%d\" type=checkbox", i);
  +        if (uwr->s->match_type & MATCH_TYPE_DISABLED)
  +            jk_puts(s, " checked");
  +        jk_putv(s, ">", status_val_match(uwr->s->match_type),
  +                "</td><td>", NULL);
  +        jk_puts(s, uwr->uri);
  +        jk_puts(s, "</td></tr>\n");
  +    }
  +}
  +
  +
   /**
    * Command line reference:
    * cmd=list (default) display configuration
  @@ -421,6 +466,7 @@
                   if (wr->s->is_disabled)
                       jk_puts(s, " checked");
                   jk_puts(s, "></td></tr>\n");
  +                display_maps(s, sw, s->uw_map, wr->s->name, l);
   
                   jk_puts(s, "<tr><td colspan=2>&nbsp;</td></tr>\n");
                   jk_puts(s, "<tr><td colspan=2><input type=submit 
value=\"Update Worker\">");
  @@ -453,7 +499,7 @@
                       jk_puts(s, " checked");
                   jk_puts(s, "></td></tr>\n");
   
  -                /* TODO: display uri mappings with checkbox for disable */
  +                display_maps(s, sw, s->uw_map, dworker, l);
   
                   jk_puts(s, "<tr><td colspan=2>&nbsp;</td></tr>\n");
                   jk_puts(s, "<tr><td colspan=2><input type=submit 
value=\"Update Balancer\">");
  @@ -494,6 +540,7 @@
                             const char *dworker, jk_logger_t *l)
   {
       int i;
  +    unsigned int j;
       char buf[1024];
       const char *b;
       lb_worker_t *lb;
  @@ -509,6 +556,17 @@
               lb->s->recover_wait_time = i;
           lb->s->sticky_session = status_bool("ls", s->query_string);
           lb->s->sticky_session_force = status_bool("lf", s->query_string);
  +        for (j = 0; j < s->uw_map->size; j++) {
  +            uri_worker_record_t *uwr = s->uw_map->maps[j];
  +            if (strcmp(uwr->worker_name, dworker))
  +                continue;
  +            sprintf(buf, "mi%d", j);
  +            if (status_bool(buf, s->query_string))
  +                uwr->s->match_type |= MATCH_TYPE_DISABLED;
  +            else
  +                uwr->s->match_type &= ~MATCH_TYPE_DISABLED;
  +                
  +        }
       }
       else  {
           int n = status_int("lb", s->query_string, -1);
  @@ -552,7 +610,6 @@
           if (i > 0)
               wr->s->lb_factor = i;
       }
  -
   }
   
   static int status_cmd_type(const char *req)
  @@ -598,8 +655,19 @@
           cmd = status_cmd_type(s->query_string);
           if (cmd > 0 && (status_cmd("w", s->query_string, buf, sizeof(buf)) 
!= NULL))
               worker = strdup(buf);
  -        if (cmd == 2 && worker)
  +        if (cmd == 2 && worker) {
  +            /* lock shared memory */
  +            jk_shm_lock();
               update_worker(s, p->s_worker, worker, l);
  +            /* update modification time to reflect the current config */
  +            jk_shm_set_workers_time(time(NULL));
  +            /* Since we updated the config no need to reload
  +             * on the next request
  +             */
  +            jk_shm_sync_access_time();
  +            /* unlock the shared memory */
  +            jk_shm_unlock();
  +        }
           /* Step 2: Display configuration */
           display_workers(s, p->s_worker, worker, l);
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to