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 : " ") : " ",
wr->domain ? (*wr->domain ? wr->domain : " ") : " ",
rs_min,
rs_max,
delta_reset,
rc_time > 0 ? buf_time : " ");
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 : " ");
}
}
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);
}