costin 02/05/09 14:09:41 Modified: jk/native2/common jk_worker_status.c Log: Much cleaner and easier to read report, remove duplicated code and generalize a bit. We'll display a table for each object type ( that we care about ): - ajp workers - uris - endpoints For each object we display all we can get via 'getters' ( if you want more info, just add a new attribute for getAttribute ). The workers are the important piece - the state and counters. Note that at this moment we display only the info in the apache instance that is active. It'll change to use the shmem scoreboard. Revision Changes Path 1.18 +37 -114 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.17 retrieving revision 1.18 diff -u -r1.17 -r1.18 --- jk_worker_status.c 3 May 2002 18:10:58 -0000 1.17 +++ jk_worker_status.c 9 May 2002 21:09:41 -0000 1.18 @@ -74,38 +74,16 @@ #include "jk_requtil.h" #include "jk_registry.h" -static void jk2_worker_status_displayActiveProperties(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, "<H3>Processed config</H3>\n"); - s->jkprintf(env, s, "<p>All settings ( automatic and configured ), after substitution</p>\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 ); - 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_displayRuntimeWorkers(jk_env_t *env, jk_ws_service_t *s, - jk_workerEnv_t *wenv) +/** Use 'introspection' data to find what getters an type support, + * and display the information in a table + */ +static void jk2_worker_status_displayRuntimeType(jk_env_t *env, jk_ws_service_t *s, + jk_workerEnv_t *wenv, char *type) { jk_map_t *map=wenv->initData; int i; int needHeader=JK_TRUE; - s->jkprintf(env, s, "<H3>Worker runtime info</H3>\n"); - s->jkprintf(env, s, "<p>Worker information, using getAttribute() </p>\n"); - - s->jkprintf(env, s, "<table border>\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 ); @@ -122,10 +100,14 @@ if( mbean->getAttribute == NULL ) continue; - if( strncmp( "ajp13", mbean->type, 5 ) != 0 ) + if( strncmp( type, mbean->type, 5 ) != 0 ) continue; if( needHeader ) { + s->jkprintf(env, s, "<H3>%s runtime info</H3>\n", type); + s->jkprintf(env, s, "<p>%s information, using getAttribute() </p>\n", type); + + s->jkprintf(env, s, "<table border>\n"); s->jkprintf(env, s, "<tr><th>name</th>\n"); for( j=0; mbean->getAttributeInfo[j] != NULL; j++ ) { char *pname=mbean->getAttributeInfo[j]; @@ -143,95 +125,35 @@ mbean->getAttribute( env, mbean, pname)); } } - s->jkprintf( env,s , "</table>\n" ); -} - -static void jk2_worker_status_displayRuntimeUris(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, "<H3>URI info</H3>\n"); - s->jkprintf(env, s, "<p>Information about uri mappings. " - "Will include some statistics ( for the active process )</p>\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 < 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; - - if( strncmp( "uri", mbean->type, 3 ) != 0 ) - 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>", - mbean->localName, pname, - mbean->getAttribute( env, mbean, pname)); - } + if( ! needHeader ) { + s->jkprintf( env,s , "</table>\n" ); } - s->jkprintf( env,s , "</table>\n" ); } -static void jk2_worker_status_displayRuntimeProperties(jk_env_t *env, jk_ws_service_t *s, - jk_workerEnv_t *wenv) +/** That's the 'bulk' data - everything that was configured, after substitution + */ +static void jk2_worker_status_displayActiveProperties(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, "<H3>getAttribute() info</H3>\n"); - s->jkprintf(env, s, "<p>Information extracted at runtime, using getAttribute() </p>\n"); + s->jkprintf(env, s, "<H3>Processed config</H3>\n"); + s->jkprintf(env, s, "<p>All settings ( automatic and configured ), after substitution</p>\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 < 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; - - if( strncmp( "uri", mbean->type, 3 ) == 0 || - strncmp( "ajp13", mbean->type, 5 ) == 0 ) { - 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)); - } + 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" ); + s->jkprintf(env, s, "</table>\n"); } +/** persistent configuration + */ static void jk2_worker_status_displayConfigProperties(jk_env_t *env, jk_ws_service_t *s, jk_workerEnv_t *wenv) { @@ -258,15 +180,15 @@ propCount=mbean->settings->size( env, mbean->settings ); if( propCount==0 ) { - s->jkprintf(env, s, "<tr><td>%s</td></tr>", mbean->name ); + s->jkprintf(env, s, "<tr><th>%s</th><td></td></tr>", mbean->name ); } else { + s->jkprintf(env, s, "<tr><th rowspan='%d'>%s</th></tr>", propCount, mbean->name ); for( j=0; j < propCount ; j++ ) { char *pname=mbean->settings->nameAt( env, mbean->settings, j); /* Don't save redundant information */ if( strcmp( pname, "name" ) != 0 ) { - s->jkprintf(env, s, "<tr><td>%s</td><td>%s</td><td>%s</td></tr>", - name, pname, - mbean->settings->valueAt( env, mbean->settings, j)); + s->jkprintf(env, s, "<tr><td>%s</td><td>%s</td></tr>", + pname, mbean->settings->valueAt( env, mbean->settings, j)); } } } @@ -280,9 +202,10 @@ { char *uri=s->req_uri; jk_map_t *queryMap; - - env->l->jkLog(env, env->l, JK_LOG_INFO, "status.service() %s %s\n", - uri, s->query_string); + + if( w->mbean->debug > 0 ) + env->l->jkLog(env, env->l, JK_LOG_INFO, "status.service() %s %s\n", + uri, s->query_string); /* Generate the header */ s->status=200; @@ -298,10 +221,10 @@ } /* Body */ - jk2_worker_status_displayRuntimeWorkers(env, s, s->workerEnv ); - jk2_worker_status_displayRuntimeUris(env, s, s->workerEnv ); + jk2_worker_status_displayRuntimeType(env, s, s->workerEnv, "ajp13" ); + jk2_worker_status_displayRuntimeType(env, s, s->workerEnv, "endpoint" ); + jk2_worker_status_displayRuntimeType(env, s, s->workerEnv, "uri" ); jk2_worker_status_displayConfigProperties(env, s, s->workerEnv ); - jk2_worker_status_displayRuntimeProperties(env, s, s->workerEnv ); jk2_worker_status_displayActiveProperties(env, s, s->workerEnv ); s->afterRequest( env, s);
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>