⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jk_worker_status.c

📁 Tomcat 4.1与WebServer集成组件的源代码包.
💻 C
📖 第 1 页 / 共 2 页
字号:
    }    s->jkprintf(env, s, "</table>\n");    jk2_worker_status_displayAggregate( env, s,                                         totalReq, totalErr, totalTime, maxTime);}/** 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;    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;        /* Don't display aliases */        if( strchr(name, ':')==NULL )            continue;                if( mbean==NULL || mbean->getAttributeInfo==NULL )             continue;        if( mbean->getAttribute == NULL )            continue;        if( strncmp( type, mbean->type, 5 ) != 0 )            continue;        if( needHeader ) {            s->jkprintf(env, s, "<H3>%s runtime info</H3>\n", JK_CHECK_NULL(type) );            s->jkprintf(env, s, "<p>%s information, using getAttribute() </p>\n", JK_CHECK_NULL(type) );                        s->jkprintf(env, s, "<table border>\n");            s->jkprintf(env, s, "<tr><th>id</th>\n");            s->jkprintf(env, s, "<th>name</th>\n");            for( j=0; mbean->getAttributeInfo[j] != NULL; j++ ) {                char *pname=mbean->getAttributeInfo[j];                                s->jkprintf(env, s, "<th>%s</th>", JK_CHECK_NULL(pname) );            }            needHeader = JK_FALSE;        }                 s->jkprintf(env, s, "</tr><tr><td>%d</td><td>%s</td>\n", mbean->id,                    JK_CHECK_NULL(mbean->localName));        for( j=0; mbean->getAttributeInfo[j] != NULL; j++ ) {            char *pname=mbean->getAttributeInfo[j];            s->jkprintf(env, s, "<td>%s</td>",                        JK_CHECK_NULL(mbean->getAttribute( env, mbean, pname)));        }    }    if( ! needHeader ) {        s->jkprintf( env,s , "</table>\n" );    }}static void jk2_worker_status_resetScoreboard(jk_env_t *env, jk_ws_service_t *s,                                              jk_workerEnv_t *wenv){    int i, j;        if( wenv->shm==NULL || wenv->shm->head==NULL) {        return;    }        for( i=1; i < wenv->shm->head->lastSlot; i++ ) {        jk_shm_slot_t *slot= wenv->shm->getSlot( env, wenv->shm, i );                if( slot==NULL ) continue;                if( strncmp( slot->name, "epStat", 6 ) == 0 ) {            /* This is an endpoint slot */            void *data=slot->data;            for( j=0; j<slot->structCnt ; j++ ) {                jk_stat_t *statArray=(jk_stat_t *)data;                jk_stat_t *stat=statArray + j;                stat->reqCnt=0;                stat->errCnt=0;#ifdef HAS_APR                stat->totalTime=0;                stat->maxTime=0;#endif            }        }    }    }/** 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>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>", JK_CHECK_NULL(name),                    JK_CHECK_NULL(value));    }    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){    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");    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->settings==NULL )             continue;                propCount=mbean->settings->size( env, mbean->settings );        if( propCount==0 ) {            s->jkprintf(env, s, "<tr><th>%s</th><td></td></tr>", JK_CHECK_NULL(mbean->name) );        } else {            s->jkprintf(env, s, "<tr><th rowspan='%d'>%s</th><td>%s</td><td>%s</td></tr>",                        propCount, JK_CHECK_NULL(mbean->name),                        JK_CHECK_NULL(mbean->settings->nameAt( env, mbean->settings, 0)),                        JK_CHECK_NULL(mbean->settings->valueAt( env, mbean->settings, 0)));            for( j=1; 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></tr>",                                JK_CHECK_NULL(pname),                                JK_CHECK_NULL(mbean->settings->valueAt( env, mbean->settings, j)));                }            }        }    }    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){    char *uri=s->req_uri;    int didUpdate;    if( w->mbean->debug > 0 )         env->l->jkLog(env, env->l, JK_LOG_DEBUG, "status.service() %s %s\n",                      JK_CHECK_NULL(uri), JK_CHECK_NULL(s->query_string));    /* Generate the header */    s->status=200;    s->msg="OK";    s->headers_out->put(env, s->headers_out,                        "Content-Type", "text/html", NULL);    s->head(env, s );    /** Process the query string.     */    if( s->query_string == NULL ) {        s->query_string="get=*";    }    if( strcmp( s->query_string, "scoreboard.reset" ) == 0 ) {        jk2_worker_status_resetScoreboard(env, s, s->workerEnv );    }    w->workerEnv->config->update( env, w->workerEnv->config, &didUpdate );    if( didUpdate ) {        jk_shm_t *shm=w->workerEnv->shm;                /* Update the scoreboard's version - all other           jk2 processes will see this and update        */        if( shm!=NULL && shm->head!=NULL )            shm->head->lbVer++;        s->jkprintf(env, s, "Updated config %d", shm->head->lbVer  );    }        s->jkprintf(env, s, "Status information for child %d", s->workerEnv->childId  );        /* Body */    jk2_worker_status_displayRuntimeType(env, s, s->workerEnv, "ajp13" );    jk2_worker_status_displayScoreboardInfo(env, s, s->workerEnv );    jk2_worker_status_displayEndpointInfo( env, s, s->workerEnv );    jk2_worker_status_displayRuntimeType(env, s, s->workerEnv, "uri" );    jk2_worker_status_displayConfigProperties(env, s, s->workerEnv );    jk2_worker_status_displayActiveProperties(env, s, s->workerEnv );        s->afterRequest( env, s);    return JK_OK;}int JK_METHOD jk2_worker_status_factory(jk_env_t *env, jk_pool_t *pool,                                        jk_bean_t *result,                                        const char *type, const char *name){    jk_worker_t *_this;        _this = (jk_worker_t *)pool->calloc(env, pool, sizeof(jk_worker_t));    if(_this==NULL) {        env->l->jkLog(env, env->l, JK_LOG_ERROR,                      "status_worker.factory() OutOfMemoryException\n");        return JK_ERR;    }    _this->service        = jk2_worker_status_service;    result->object=_this;    _this->mbean=result;    _this->workerEnv=env->getByName( env, "workerEnv" );    _this->workerEnv->addWorker( env, _this->workerEnv, _this );    return JK_OK;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -