costin 02/03/27 10:58:58 Modified: jk/native2/common jk_uriEnv.c jk_worker_ajp13.c jk_worker_status.c Log: Added 'getters' for few common proprties. More will come in the future, for any information that is worth knowing. Modified worker_status to use the new API instead of accessing the fields directly. Now worker status displays 3 kind of information: - the original config ( what the user set in jk2.properties or otherwise ) - the processed config ( include 'default' or 'guessed' values, after $() substitution) - runtime status ( what getAttribute() returns ) We'll add some filters and probably change this to a txt form ( properties-like ) for easy parsing - this is not supposed to become a 'nice' interface, but to be used programatically and maybe wrapped in a nicer GUI. Revision Changes Path 1.7 +11 -5 jakarta-tomcat-connectors/jk/native2/common/jk_uriEnv.c Index: jk_uriEnv.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_uriEnv.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- jk_uriEnv.c 26 Mar 2002 03:03:01 -0000 1.6 +++ jk_uriEnv.c 27 Mar 2002 18:58:57 -0000 1.7 @@ -110,10 +110,14 @@ static void *jk2_uriEnv_getAttribute(jk_env_t *env, jk_bean_t *bean, char *name ) { - if( strcmp( name, "worker" ) ) { - - } else if( strcmp( name, "reqCount" ) ) { - + jk_uriEnv_t *uriEnv=(jk_uriEnv_t *)bean->object; + + if( strcmp( name, "host" )==0 ) { + return (uriEnv->virtual==NULL) ? "*" : uriEnv->virtual; + } else if( strcmp( name, "uri" ) ) { + return uriEnv->uri; + } else if( strcmp( name, "worker" ) ) { + return uriEnv->workerName; } return NULL; } @@ -259,6 +263,7 @@ return JK_TRUE; } +static char *myAttInfo[]={ "host", "uri", "worker", NULL }; int JK_METHOD jk2_uriEnv_factory(jk_env_t *env, jk_pool_t *pool, jk_bean_t *result, @@ -284,7 +289,8 @@ result->getAttribute=&jk2_uriEnv_getAttribute; uriEnv->mbean=result; result->object=uriEnv; - + result->getAttributeInfo=myAttInfo; + /* The name is a path */ if( strchr( name, '/' ) != NULL ) { jk2_uriEnv_setProperty( env, result, "uri", (char *)name ); 1.6 +35 -0 jakarta-tomcat-connectors/jk/native2/common/jk_worker_ajp13.c Index: jk_worker_ajp13.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_worker_ajp13.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- jk_worker_ajp13.c 26 Mar 2002 03:04:24 -0000 1.5 +++ jk_worker_ajp13.c 27 Mar 2002 18:58:57 -0000 1.6 @@ -85,7 +85,39 @@ #define AJP14_DEF_PORT (8011) /* -------------------- Impl -------------------- */ +static char *myAttInfo[]={ "channelName", "route", "errorState", "recovering", + "epCount", NULL }; +static void *jk2_worker_ajp14_getAttribute(jk_env_t *env, jk_bean_t *bean, char *name ) { + jk_worker_t *worker=(jk_worker_t *)bean->object; + + if( strcmp( name, "channelName" )==0 ) { + if( worker->channel != NULL ) + return worker->channel->mbean->name; + else + return worker->channelName; + } else if (strcmp( name, "route" )==0 ) { + return worker->route; + } else if (strcmp( name, "errorState" )==0 ) { + if( worker->in_error_state ) + return "Y"; + else + return NULL; + } else if (strcmp( name, "recovering" )==0 ) { + if( worker->in_recovering ) + return "Y"; + else + return NULL; + } else if (strcmp( name, "epCount" )==0 ) { + char *result; + if( worker->endpointCache==NULL ) return "0"; + result=env->tmpPool->calloc( env, env->tmpPool, 6 ); + sprintf( result, "%d", worker->endpointCache->count ); + return result; + } else { + return NULL; + } +} /* * Initialize the worker. @@ -676,11 +708,14 @@ w->service = jk2_worker_ajp14_service; result->setAttribute= jk2_worker_ajp14_setAttribute; + result->getAttribute= jk2_worker_ajp14_getAttribute; result->object = w; w->mbean=result; w->workerEnv=env->getByName( env, "workerEnv" ); w->workerEnv->addWorker( env, w->workerEnv, w ); + result->getAttributeInfo=myAttInfo; + return JK_TRUE; } 1.13 +52 -118 jakarta-tomcat-connectors/jk/native2/common/jk_worker_status.c Index: jk_worker_status.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_worker_status.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- jk_worker_status.c 26 Mar 2002 03:04:10 -0000 1.12 +++ jk_worker_status.c 27 Mar 2002 18:58:57 -0000 1.13 @@ -74,88 +74,73 @@ #include "jk_requtil.h" #include "jk_registry.h" -static void jk2_worker_status_displayWorkers(jk_env_t *env, jk_ws_service_t *s, - jk_workerEnv_t *wenv) +static void jk2_worker_status_displayActiveProperties(jk_env_t *env, jk_ws_service_t *s, + jk_workerEnv_t *wenv) { - jk_map_t *map=wenv->worker_map; + jk_map_t *map=wenv->initData; int i; - int count=map->size( env, map ); - - s->jkprintf(env, s, "<H2>Active workers</H2>\n" ); - s->jkprintf(env, s, "<table border>\n"); - - s->jkprintf(env, s, "<tr><th>Name</th><th>Type</th>" - "<th>Channel</th><th>Route</th>" - "<th>Error state</th><th>Recovery</th>" - "<th>Endpoint cache</th></tr>"); - - for( i=0; i< count ; i++ ) { - char *name=map->nameAt( env, map, i ); - jk_worker_t *worker=(jk_worker_t *)map->valueAt( env, map,i ); - - s->jkprintf(env, s, "<tr><td>%s</td>", name ); - s->jkprintf(env, s, "<td>%s</td>", worker->mbean->type ); - if( worker->channel != NULL ) { - s->jkprintf(env, s, "<td>%s</td>",worker->channel->mbean->name ); - } else { - s->jkprintf(env, s, "<td> </td>" ); - } - if( worker->route != NULL ) { - s->jkprintf(env, s, "<td>%s</td>",worker->route ); - } else { - s->jkprintf(env, s, "<td> </td>" ); - } - s->jkprintf(env, s, "<td class='in_error'>%d</td>", - worker->in_error_state ); - s->jkprintf(env, s, "<td class='in_recovering'>%d</td>", - worker->in_recovering ); - s->jkprintf(env, s, "<td class='epCount'>%d</td>", - ( worker->endpointCache == NULL ? 0 : - worker->endpointCache->count )); - /* Endpoint cache ? */ + s->jkprintf(env, s, "<H3>Processed config</H3>\n"); + s->jkprintf(env, s, "<p>All settings ( automatic and configured ), after substitution</p>\n"); - /* special case for status worker */ - - s->jkprintf(env, s, "</tr>" ); + s->jkprintf(env, s, "<table border>\n"); + s->jkprintf(env, s, "<tr><th>Name</th><th>Value</td></tr>\n"); + for( i=0; i< map->size( env, map ) ; i++ ) { + char *name=map->nameAt( env, map, i ); + char *value=(char *)map->valueAt( env, map,i ); + s->jkprintf(env, s, "<tr><td>%s</td><td>%s</td></tr>", name, + value); } s->jkprintf(env, s, "</table>\n"); + } -static void jk2_worker_status_displayWorkerEnv(jk_env_t *env, jk_ws_service_t *s, - jk_workerEnv_t *wenv) +static void jk2_worker_status_displayRuntimeProperties(jk_env_t *env, jk_ws_service_t *s, + jk_workerEnv_t *wenv) { jk_map_t *map=wenv->initData; int i; - s->jkprintf(env, s, "<H2>Worker Env Info</H2>\n"); + s->jkprintf(env, s, "<H3>getAttribute() info</H3>\n"); + s->jkprintf(env, s, "<p>Information extracted at runtime, using getAttribute() </p>\n"); s->jkprintf(env, s, "<table border>\n"); - /* Could be modified dynamically */ - s->jkprintf(env, s, "<tr><th>LogLevel</th>" - "<td id='logLevel'>%d</td></tr>\n", - env->l->level); - - s->jkprintf(env, s, "</table>\n"); - - s->jkprintf(env, s, "<H3>Active Properties ( after substitution )</H3>\n"); - s->jkprintf(env, s, "<table border>\n"); s->jkprintf(env, s, "<tr><th>Name</th><th>Value</td></tr>\n"); - for( i=0; i< map->size( env, map ) ; i++ ) { - char *name=map->nameAt( env, map, i ); - char *value=(char *)map->valueAt( env, map,i ); - /* Don't display worker properties or uris, those are displayed separately - for each worker */ -/* if( strncmp( name, "worker", 6 ) !=0 && */ -/* name[0] != '/' ) { */ - s->jkprintf(env, s, "<tr><td>%s</td><td>%s</td></tr>", name, - value); -/* } */ - } - s->jkprintf(env, s, "</table>\n"); + for( i=0; i < env->_objects->size( env, env->_objects ); i++ ) { + char *name=env->_objects->nameAt( env, env->_objects, i ); + jk_bean_t *mbean=env->_objects->valueAt( env, env->_objects, i ); + int j; + int propCount; + /* Don't display aliases */ + if( strchr(name, ':')==NULL ) + continue; + + if( mbean==NULL || mbean->getAttributeInfo==NULL ) + continue; + + if( mbean->getAttribute == NULL ) + continue; + + for( j=0; mbean->getAttributeInfo[j] != NULL; j++ ) { + char *pname=mbean->getAttributeInfo[j]; + + + s->jkprintf(env, s, "<tr><td>%s</td><td>%s</td><td>%s</td></tr>", + name, pname, + mbean->getAttribute( env, mbean, pname)); + } + } + s->jkprintf( env,s , "</table>\n" ); +} +static void jk2_worker_status_displayConfigProperties(jk_env_t *env, jk_ws_service_t *s, + jk_workerEnv_t *wenv) +{ + int i; + s->jkprintf(env, s, "<H3>Configured Properties</H3>\n"); + s->jkprintf(env, s, "<p>Original data set by user</p>\n"); s->jkprintf(env, s, "<table border>\n"); s->jkprintf(env, s, "<tr><th>Object name</th><th>Property</th><th>Value</td></tr>\n"); @@ -189,58 +174,8 @@ } } s->jkprintf( env,s , "</table>\n" ); - } -static void jk2_worker_status_displayMappings(jk_env_t *env, jk_ws_service_t *s, - jk_workerEnv_t *wenv) -{ - jk_uriEnv_t **maps=wenv->uriMap->maps; - int size=wenv->uriMap->size; - int i; - - s->jkprintf(env, s, "<H2>Mappings</H2>\n"); - - if( maps==NULL ) { - s->jkprintf(env, s, "None\n"); - return; - } - - s->jkprintf(env, s, "<table class='mappings' border>\n"); - - s->jkprintf(env, s, "<tr><th>Host</th><th>Uri</th>" - "<th>Worker</th></tr>"); - - for( i=0; i< size ; i++ ) { - jk_uriEnv_t *uriEnv=maps[i]; - - s->jkprintf(env, s, "<tr>" ); - s->jkprintf(env, s, "<td class='host'>%s</td>", - (uriEnv->virtual==NULL) ? "*" : uriEnv->virtual ); - s->jkprintf(env, s, "<td class='uri'>%s</td>", - uriEnv->uri); - s->jkprintf(env, s, "<td class='worker'>%s</td>", - (uriEnv->workerName==NULL) ? "DEFAULT" : uriEnv->workerName ); - s->jkprintf(env, s, "</tr>" ); - } - - - s->jkprintf(env, s, "</table>\n"); -} - -/* Channels and connections, including 'pooled' ones - */ -static void jk2_worker_status_displayConnections(jk_env_t *env, jk_ws_service_t *s, - jk_workerEnv_t *wenv) -{ - s->jkprintf(env, s, "<H2>Active connections</H2>\n"); - s->jkprintf(env, s, "<table border>\n"); - - - s->jkprintf(env, s, "</table>\n"); - -} - static int JK_METHOD jk2_worker_status_service(jk_env_t *env, jk_worker_t *w, jk_ws_service_t *s) @@ -266,10 +201,9 @@ } /* Body */ - jk2_worker_status_displayWorkerEnv(env, s, s->workerEnv ); - jk2_worker_status_displayWorkers(env, s, s->workerEnv ); - jk2_worker_status_displayMappings(env, s, s->workerEnv ); - jk2_worker_status_displayConnections(env, s, s->workerEnv ); + jk2_worker_status_displayConfigProperties(env, s, s->workerEnv ); + jk2_worker_status_displayActiveProperties(env, s, s->workerEnv ); + jk2_worker_status_displayRuntimeProperties(env, s, s->workerEnv ); s->afterRequest( env, s); fprintf(stderr, "After req %s \n", s);
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>