static void display_worker_ajp_details()

in native/common/jk_status.c [1907:2235]


static void display_worker_ajp_details(jk_ws_service_t *s,
                                       status_endpoint_t *p,
                                       ajp_worker_t *aw,
                                       lb_sub_worker_t *wr,
                                       lb_worker_t *lb,
                                       int ms_min,
                                       int ms_max,
                                       int map_count,
                                       jk_log_context_t *l)
{
    char buf[64];
    char buf_rd[32];
    char buf_rd_sec[32];
    char buf_wr[32];
    char buf_wr_sec[32];
    int mime;
    const char *arg;
    time_t now = time(NULL);
    const char *name = NULL;
    const char *sub_name = NULL;
    const char *ajp_name = NULL;
    status_worker_t *w = p->worker;
    int rs_min = 0;
    int rs_max = 0;
    int delta_reset = (int)difftime(now, aw->s->last_reset);
    int delta_error = -1;
    char buf_time[JK_STATUS_TIME_BUF_SZ];
    char buf_tz[JK_STATUS_TIME_BUF_SZ];
    time_t error_time = 0;
    int rc_time = -1;

    JK_TRACE_ENTER(l);

    status_get_string(p, JK_STATUS_ARG_MIME, NULL, &arg, l);
    mime = status_mime_int(arg);

    if (lb) {
        name = lb->name;
        sub_name = wr->name;
        ajp_name = wr->name;
        error_time = wr->s->first_error_time;
        if (wr->s->state == JK_LB_STATE_ERROR) {
            rs_min = lb->recover_wait_time - (int)difftime(now, wr->s->last_error_time);
            if (rs_min < 0) {
                rs_min = 0;
            }
            rs_max = rs_min + lb->maintain_time;
            if (rs_min < ms_min) {
                rs_min = ms_min;
            }
        }
    }
    else {
        name = aw->name;
        sub_name = NULL;
        ajp_name = aw->name;
        error_time = aw->s->error_time;
    }

    if (error_time > 0) {
        delta_error = (int)difftime(now, error_time);
        rc_time = status_strftime(error_time, mime, buf_time, buf_tz, l);
    }

    if (mime == JK_STATUS_MIME_HTML) {

        if (lb)
            jk_printf(s, l, JK_STATUS_SHOW_MEMBER_ROW,
                      sub_name,
                      jk_lb_get_activation(wr, l),
                      jk_lb_get_state(wr, l),
                      wr->distance,
                      wr->lb_factor,
                      wr->lb_mult,
                      wr->s->lb_value,
                      aw->s->used,
                      delta_reset > 0 ? (int)(aw->s->used / delta_reset) : -1,
                      wr->s->sessions,
                      delta_reset > 0 ? (int)(wr->s->sessions / delta_reset) : -1,
                      wr->s->errors,
                      aw->s->client_errors,
                      aw->s->reply_timeouts,
                      status_strfsize(aw->s->transferred, buf_wr),
                      delta_reset > 0 ? status_strfsize(aw->s->transferred / delta_reset, buf_wr_sec) : "-",
                      status_strfsize(aw->s->readed, buf_rd),
                      delta_reset > 0 ? status_strfsize(aw->s->readed / delta_reset , buf_rd_sec) : "-",
                      aw->s->busy,
                      aw->s->max_busy,
                      aw->s->connected,
                      aw->s->max_connected,
                      wr->route,
                      wr->redirect ? (*wr->redirect ? wr->redirect : "&nbsp;") : "&nbsp",
                      wr->domain ? (*wr->domain ? wr->domain : "&nbsp;") : "&nbsp",
                      rs_min,
                      rs_max,
                      delta_reset,
                      rc_time > 0 ? buf_time : "&nbsp;");
        else {
            jk_printf(s, l, JK_STATUS_SHOW_AJP_ROW,
                      jk_ajp_get_state(aw, l),
                      aw->s->used,
                      delta_reset > 0 ? (int)(aw->s->used / delta_reset) : -1,
                      aw->s->errors,
                      aw->s->client_errors,
                      aw->s->reply_timeouts,
                      status_strfsize(aw->s->transferred, buf_wr),
                      delta_reset > 0 ? status_strfsize(aw->s->transferred / delta_reset, buf_wr_sec) : "-",
                      status_strfsize(aw->s->readed, buf_rd),
                      delta_reset > 0 ? status_strfsize(aw->s->readed / delta_reset , buf_rd_sec) : "-",
                      aw->s->busy,
                      aw->s->max_busy,
                      aw->s->connected,
                      aw->s->max_connected,
                      delta_reset,
                      rc_time > 0 ? buf_time : "&nbsp;");
        }

    }
    else if (mime == JK_STATUS_MIME_XML) {

        int off = 2;
        if (lb)
            off = 6;
        if (lb) {
            jk_print_xml_start_elt(s, l, w, off, 0, "member");
            jk_print_xml_att_string(s, l, off+2, "name", sub_name);
            jk_print_xml_att_string(s, l, off+2, "type", status_worker_type(wr->worker->type));
        }
        else {
            jk_print_xml_start_elt(s, l, w, off, 0, "ajp");
            jk_print_xml_att_string(s, l, off+2, "name", ajp_name);
            jk_print_xml_att_string(s, l, off+2, "type", status_worker_type(aw->worker.type));
        }
        jk_print_xml_att_string(s, l, off+2, "host", aw->host);
        jk_print_xml_att_int(s, l, off+2, "port", aw->port);
        jk_print_xml_att_string(s, l, off+2, "address", dump_ajp_addr(aw, buf, sizeof(buf)));
        jk_print_xml_att_string(s, l, off+2, "source", aw->source && *aw->source ? aw->source : "undefined");
        jk_print_xml_att_int(s, l, off+2, "connection_pool_timeout", aw->cache_timeout);
        jk_print_xml_att_int(s, l, off+2, "ping_timeout", aw->ping_timeout);
        jk_print_xml_att_int(s, l, off+2, "connect_timeout", aw->connect_timeout);
        jk_print_xml_att_int(s, l, off+2, "prepost_timeout", aw->prepost_timeout);
        jk_print_xml_att_int(s, l, off+2, "reply_timeout", aw->reply_timeout);
        jk_print_xml_att_int(s, l, off+2, "connection_ping_interval", aw->conn_ping_interval);
        jk_print_xml_att_int(s, l, off+2, "retries", aw->retries);
        jk_print_xml_att_uint(s, l, off+2, "recovery_options", aw->recovery_opts);
        jk_print_xml_att_int(s, l, off+2, "busy_limit", aw->busy_limit);
        jk_print_xml_att_uint(s, l, off+2, "max_packet_size", aw->max_packet_size);
        if (lb) {
            jk_print_xml_att_string(s, l, off+2, "activation", jk_lb_get_activation(wr, l));
            jk_print_xml_att_int(s, l, off+2, "lbfactor", wr->lb_factor);
            jk_print_xml_att_string(s, l, off+2, "route", wr->route);
            jk_print_xml_att_string(s, l, off+2, "redirect", wr->redirect);
            jk_print_xml_att_string(s, l, off+2, "domain", wr->domain);
            jk_print_xml_att_int(s, l, off+2, "distance", wr->distance);
            jk_print_xml_att_string(s, l, off+2, "state", jk_lb_get_state(wr, l));
            jk_print_xml_att_uint64(s, l, off+2, "lbmult", wr->lb_mult);
            jk_print_xml_att_uint64(s, l, off+2, "lbvalue", wr->s->lb_value);
            jk_print_xml_att_uint64(s, l, off+2, "elected", aw->s->used);
            jk_print_xml_att_uint64(s, l, off+2, "sessions", wr->s->sessions);
            jk_print_xml_att_uint32(s, l, off+2, "errors", wr->s->errors);
        }
        else {
            jk_print_xml_att_uint64(s, l, off+2, "used", aw->s->used);
            jk_print_xml_att_uint32(s, l, off+2, "errors", aw->s->errors);
        }
        jk_print_xml_att_uint32(s, l, off+2, "client_errors", aw->s->client_errors);
        jk_print_xml_att_uint32(s, l, off+2, "reply_timeouts", aw->s->reply_timeouts);
        jk_print_xml_att_uint64(s, l, off+2, "transferred", aw->s->transferred);
        jk_print_xml_att_uint64(s, l, off+2, "read", aw->s->readed);
        jk_print_xml_att_int(s, l, off+2, "busy", aw->s->busy);
        jk_print_xml_att_int(s, l, off+2, "max_busy", aw->s->max_busy);
        jk_print_xml_att_int(s, l, off+2, "connected", aw->s->connected);
        jk_print_xml_att_int(s, l, off+2, "max_connected", aw->s->max_connected);
        if (lb) {
            jk_print_xml_att_int(s, l, off+2, "time_to_recover_min", rs_min);
            jk_print_xml_att_int(s, l, off+2, "time_to_recover_max", rs_max);
        }
        else
            jk_print_xml_att_int(s, l, off+2, "map_count", map_count);
        jk_print_xml_att_long(s, l, off+2, "last_reset_at", (long)aw->s->last_reset);
        jk_print_xml_att_int(s, l, off+2, "last_reset_ago", delta_reset);
        if (rc_time > 0) {
            jk_print_xml_att_string(s, l, off+2, "error_time_datetime", buf_time);
            jk_print_xml_att_string(s, l, off+2, "error_time_tz", buf_tz);
            jk_print_xml_att_int(s, l, off+2, "error_time_unix_seconds", (int)error_time);
            jk_print_xml_att_int(s, l, off+2, "error_time_ago", delta_error);
        }
        /* Terminate the tag */
        jk_print_xml_stop_elt(s, l, off, 1);

    }
    else if (mime == JK_STATUS_MIME_TXT) {

        if (lb) {
            jk_puts(s, "Member:");
            jk_printf(s, l, " name=%s", sub_name);
            jk_printf(s, l, " type=%s", status_worker_type(wr->worker->type));
        }
        else {
            jk_puts(s, "AJP Worker:");
            jk_printf(s, l, " name=%s", ajp_name);
            jk_printf(s, l, " type=%s", status_worker_type(aw->worker.type));
        }
        jk_printf(s, l, " host=%s", aw->host);
        jk_printf(s, l, " port=%d", aw->port);
        jk_printf(s, l, " address=%s", dump_ajp_addr(aw, buf, sizeof(buf)));
        jk_printf(s, l, " source=%s", aw->source && *aw->source ? aw->source : "undefined");
        jk_printf(s, l, " connection_pool_timeout=%d", aw->cache_timeout);
        jk_printf(s, l, " ping_timeout=%d", aw->ping_timeout);
        jk_printf(s, l, " connect_timeout=%d", aw->connect_timeout);
        jk_printf(s, l, " prepost_timeout=%d", aw->prepost_timeout);
        jk_printf(s, l, " reply_timeout=%d", aw->reply_timeout);
        jk_printf(s, l, " retries=%d", aw->retries);
        jk_printf(s, l, " connection_ping_interval=%d", aw->conn_ping_interval);
        jk_printf(s, l, " recovery_options=%u", aw->recovery_opts);
        jk_printf(s, l, " busy_limit=%d", aw->busy_limit);
        jk_printf(s, l, " max_packet_size=%u", aw->max_packet_size);
        if (lb) {
            jk_printf(s, l, " activation=%s", jk_lb_get_activation(wr, l));
            jk_printf(s, l, " lbfactor=%d", wr->lb_factor);
            jk_printf(s, l, " route=\"%s\"", wr->route ? wr->route : "");
            jk_printf(s, l, " redirect=\"%s\"", wr->redirect ? wr->redirect : "");
            jk_printf(s, l, " domain=\"%s\"", wr->domain ? wr->domain : "");
            jk_printf(s, l, " distance=%d", wr->distance);
            jk_printf(s, l, " state=%s", jk_lb_get_state(wr, l));
            jk_printf(s, l, " lbmult=%" JK_UINT64_T_FMT, wr->lb_mult);
            jk_printf(s, l, " lbvalue=%" JK_UINT64_T_FMT, wr->s->lb_value);
            jk_printf(s, l, " elected=%" JK_UINT64_T_FMT, aw->s->used);
            jk_printf(s, l, " sessions=%" JK_UINT64_T_FMT, wr->s->sessions);
            jk_printf(s, l, " errors=%" JK_UINT32_T_FMT, wr->s->errors);
        }
        else {
            jk_printf(s, l, " used=%" JK_UINT64_T_FMT, aw->s->used);
            jk_printf(s, l, " errors=%" JK_UINT32_T_FMT, aw->s->errors);
        }
        jk_printf(s, l, " client_errors=%" JK_UINT32_T_FMT, aw->s->client_errors);
        jk_printf(s, l, " reply_timeouts=%" JK_UINT32_T_FMT, aw->s->reply_timeouts);
        jk_printf(s, l, " transferred=%" JK_UINT64_T_FMT, aw->s->transferred);
        jk_printf(s, l, " read=%" JK_UINT64_T_FMT, aw->s->readed);
        jk_printf(s, l, " busy=%d", aw->s->busy);
        jk_printf(s, l, " max_busy=%d", aw->s->max_busy);
        jk_printf(s, l, " connected=%d", aw->s->connected);
        jk_printf(s, l, " max_connected=%d", aw->s->max_connected);
        if (lb) {
            jk_printf(s, l, " time_to_recover_min=%d", rs_min);
            jk_printf(s, l, " time_to_recover_max=%d", rs_max);
        }
        else
            jk_printf(s, l, " map_count=%d", map_count);
        jk_printf(s, l, " last_reset_at=%ld", (long)aw->s->last_reset);
        jk_printf(s, l, " last_reset_ago=%d", delta_reset);
        if (rc_time > 0) {
            jk_printf(s, l, " error_time_datetime=%s", buf_time);
            jk_printf(s, l, " error_time_tz=%s", buf_tz);
            jk_printf(s, l, " error_time_unix_seconds=%d", error_time);
            jk_printf(s, l, " error_time_ago=%d", delta_error);
        }
        jk_puts(s, "\n");

    }
    else if (mime == JK_STATUS_MIME_PROP) {

        if (lb) {
            jk_print_prop_att_string(s, l, w, name, "balance_workers", sub_name);
            jk_print_prop_att_string(s, l, w, ajp_name, "type", status_worker_type(wr->worker->type));
        }
        else {
            jk_print_prop_att_string(s, l, w, name, "list", ajp_name);
            jk_print_prop_att_string(s, l, w, ajp_name, "type", status_worker_type(aw->worker.type));
        }
        jk_print_prop_att_string(s, l, w, ajp_name, "host", aw->host);
        jk_print_prop_att_int(s, l, w, ajp_name, "port", aw->port);
        jk_print_prop_att_string(s, l, w, ajp_name, "address", dump_ajp_addr(aw, buf, sizeof(buf)));
        jk_print_prop_att_string(s, l, w, ajp_name, "source", aw->source && *aw->source ? aw->source : "undefined");
        jk_print_prop_att_int(s, l, w, ajp_name, "connection_pool_timeout", aw->cache_timeout);
        jk_print_prop_att_int(s, l, w, ajp_name, "ping_timeout", aw->ping_timeout);
        jk_print_prop_att_int(s, l, w, ajp_name, "connect_timeout", aw->connect_timeout);
        jk_print_prop_att_int(s, l, w, ajp_name, "prepost_timeout", aw->prepost_timeout);
        jk_print_prop_att_int(s, l, w, ajp_name, "reply_timeout", aw->reply_timeout);
        jk_print_prop_att_int(s, l, w, ajp_name, "retries", aw->retries);
        jk_print_prop_att_int(s, l, w, ajp_name, "connection_ping_interval", aw->conn_ping_interval);
        jk_print_prop_att_uint(s, l, w, ajp_name, "recovery_options", aw->recovery_opts);
        jk_print_prop_att_int(s, l, w, ajp_name, "busy_limit", aw->busy_limit);
        jk_print_prop_att_uint(s, l, w, ajp_name, "max_packet_size", aw->max_packet_size);
        if (lb) {
            jk_print_prop_att_string(s, l, w, ajp_name, "activation", jk_lb_get_activation(wr, l));
            jk_print_prop_att_int(s, l, w, ajp_name, "lbfactor", wr->lb_factor);
            jk_print_prop_att_string(s, l, w, ajp_name, "route", wr->route);
            jk_print_prop_att_string(s, l, w, ajp_name, "redirect", wr->redirect);
            jk_print_prop_att_string(s, l, w, ajp_name, "domain", wr->domain);
            jk_print_prop_att_int(s, l, w, ajp_name, "distance", wr->distance);
            jk_print_prop_att_string(s, l, w, ajp_name, "state", jk_lb_get_state(wr, l));
            jk_print_prop_att_uint64(s, l, w, ajp_name, "lbmult", wr->lb_mult);
            jk_print_prop_att_uint64(s, l, w, ajp_name, "lbvalue", wr->s->lb_value);
            jk_print_prop_att_uint64(s, l, w, ajp_name, "elected", aw->s->used);
            jk_print_prop_att_uint64(s, l, w, ajp_name, "sessions", wr->s->sessions);
            jk_print_prop_att_uint32(s, l, w, ajp_name, "errors", wr->s->errors);
        }
        else {
            jk_print_prop_att_uint64(s, l, w, ajp_name, "used", aw->s->used);
            jk_print_prop_att_uint32(s, l, w, ajp_name, "errors", aw->s->errors);
        }
        jk_print_prop_att_uint32(s, l, w, ajp_name, "client_errors", aw->s->client_errors);
        jk_print_prop_att_uint32(s, l, w, ajp_name, "reply_timeouts", aw->s->reply_timeouts);
        jk_print_prop_att_uint64(s, l, w, ajp_name, "transferred", aw->s->transferred);
        jk_print_prop_att_uint64(s, l, w, ajp_name, "read", aw->s->readed);
        jk_print_prop_att_int(s, l, w, ajp_name, "busy", aw->s->busy);
        jk_print_prop_att_int(s, l, w, ajp_name, "max_busy", aw->s->max_busy);
        jk_print_prop_att_int(s, l, w, ajp_name, "connected", aw->s->connected);
        jk_print_prop_att_int(s, l, w, ajp_name, "max_connected", aw->s->max_connected);
        if (lb) {
            jk_print_prop_att_int(s, l, w, ajp_name, "time_to_recover_min", rs_min);
            jk_print_prop_att_int(s, l, w, ajp_name, "time_to_recover_max", rs_max);
        }
        else
            jk_print_prop_att_int(s, l, w, name, "map_count", map_count);
        jk_print_prop_att_long(s, l, w, name, "last_reset_at", (long)aw->s->last_reset);
        jk_print_prop_att_int(s, l, w, name, "last_reset_ago", delta_reset);
        if (rc_time > 0) {
            jk_print_prop_att_string(s, l, w, name, "error_time_datetime", buf_time);
            jk_print_prop_att_string(s, l, w, name, "error_time_tz", buf_tz);
            jk_print_prop_att_int(s, l, w, name, "error_time_unix seconds", (int)error_time);
            jk_print_prop_att_int(s, l, w, name, "error_time_ago seconds", delta_error);
        }

    }
    JK_TRACE_EXIT(l);

}