costin 2003/02/16 18:09:59 Modified: jk/native2/common jk_worker_status.c Log: Added few simple requests to get/set/list "mbeans" in the web server. Needs to be proxied by a java mbean. Revision Changes Path 1.33 +114 -1 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.32 retrieving revision 1.33 diff -u -r1.32 -r1.33 --- jk_worker_status.c 4 Feb 2003 07:39:58 -0000 1.32 +++ jk_worker_status.c 17 Feb 2003 02:09:58 -0000 1.33 @@ -436,11 +436,124 @@ /** Process the query string. */ if( s->query_string == NULL ) { - s->query_string="get=*"; + s->query_string="all"; } if( strcmp( s->query_string, "scoreboard.reset" ) == 0 ) { jk2_worker_status_resetScoreboard(env, s, s->workerEnv ); + } + + if( strncmp( s->query_string, "get=", 4) == 0 ) { + /* Get a jmx-like attribute. Very inefficient ( only one attribute per req ) - but it doesn't + happen too often. We should do a POST */ + char *cName=s->query_string + 4; + char *attName=rindex(cName, ':' ); + int i; + + if( attName == NULL ) { + s->jkprintf( env, s, "ERROR: no attribute found %s\n", cName); + return JK_OK; + } + *attName='\0'; + attName++; + 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 ); + + if( mbean==NULL ) + continue; + + if( strcmp( name, cName ) == 0 && + mbean->getAttribute != NULL ) { + char *value=mbean->getAttribute( env, mbean, attName ); + if( value!=NULL && (*value != '\0') ) { + s->jkprintf( env, s, "%s", value ); + } else { + s->jkprintf( env, s, "NULL" ); + } + return JK_OK; + } + } + s->jkprintf( env, s, "ERROR: attribute not found %s %s", cName, attName ); + return JK_OK; + } + if( strncmp( s->query_string, "qry=", 4) == 0 ) { + char *cName=s->query_string + 4; + int i,j; + + if( *cName== '\0' ) { + /* No string - list all components */ + 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 ); + char **getAtt=mbean->getAttributeInfo; + char **setAtt=mbean->setAttributeInfo; + + if( mbean==NULL ) + continue; + + s->jkprintf(env, s, "%s %s\n", name, mbean->type ); + } + } else { + /* List all attributes of an object */ + + 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 ); + char **getAtt=mbean->getAttributeInfo; + char **setAtt=mbean->setAttributeInfo; + + if( mbean==NULL || getAtt==NULL ) + continue; + + if( strcmp( name, cName ) == 0 ) { + while( getAtt != NULL && *getAtt != NULL && **getAtt!='\0' ) { + char *attName=*getAtt; + char *val=mbean->getAttribute(env, mbean, *getAtt ); + s->jkprintf(env, s, "%s %s %s\n", name, *getAtt, (val==NULL)? "NULL": val); + getAtt++; + } + } + } + } + return JK_OK; + } + if( strncmp( s->query_string, "set=", 4) == 0 ) { + char *cName=s->query_string + 4; + char *attVal=rindex(cName, ':' ); + char *attName; + int i; + + if( attVal == NULL ) { + s->jkprintf( env, s, "ERROR: no attribute value found %s\n", cName); + return JK_OK; + } + *attVal='\0'; + attVal++; + + attName=rindex( cName, ':' ); + if( attName == NULL ) { + s->jkprintf( env, s, "ERROR: attribute name not found\n", cName); + return JK_OK; + } + *attName='\0'; + attName++; + 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 ); + + if( mbean==NULL ) + continue; + + if( strcmp( name, cName ) == 0 && + mbean->getAttribute != NULL ) { + int res=mbean->setAttribute( env, mbean, attName, attVal ); + s->jkprintf( env, s, "%d", res ); + return JK_OK; + } + } + s->jkprintf( env, s, "ERROR: mbean not found %d\n", cName ); + return JK_OK; } w->workerEnv->config->update( env, w->workerEnv->config, &didUpdate );
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]