mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-08 08:07:10 +02:00
MINOR: stats: add a few more information on session dump
We also report fd.spec_p, fd.updt and a few names instead of the values.
This commit is contained in:
parent
0ede5a3318
commit
55e4ecd928
@ -37,6 +37,17 @@ static inline enum obj_type obj_type(enum obj_type *t)
|
|||||||
return *t;
|
return *t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline const char *obj_type_name(enum obj_type *t)
|
||||||
|
{
|
||||||
|
switch (obj_type(t)) {
|
||||||
|
case OBJ_TYPE_LISTENER: return "LISTENER";
|
||||||
|
case OBJ_TYPE_PROXY: return "PROXY";
|
||||||
|
case OBJ_TYPE_SERVER: return "SERVER";
|
||||||
|
case OBJ_TYPE_APPLET: return "APPLET";
|
||||||
|
default: return "NONE";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static inline struct listener *objt_listener(enum obj_type *t)
|
static inline struct listener *objt_listener(enum obj_type *t)
|
||||||
{
|
{
|
||||||
if (!t || *t != OBJ_TYPE_LISTENER)
|
if (!t || *t != OBJ_TYPE_LISTENER)
|
||||||
@ -65,6 +76,17 @@ static inline struct si_applet *objt_applet(enum obj_type *t)
|
|||||||
return container_of(t, struct si_applet, obj_type);
|
return container_of(t, struct si_applet, obj_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void *obj_base_ptr(enum obj_type *t)
|
||||||
|
{
|
||||||
|
switch (obj_type(t)) {
|
||||||
|
case OBJ_TYPE_LISTENER: return objt_listener(t);
|
||||||
|
case OBJ_TYPE_PROXY: return objt_proxy(t);
|
||||||
|
case OBJ_TYPE_SERVER: return objt_server(t);
|
||||||
|
case OBJ_TYPE_APPLET: return objt_applet(t);
|
||||||
|
default: return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* _PROTO_OBJ_TYPE_H */
|
#endif /* _PROTO_OBJ_TYPE_H */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -132,6 +132,24 @@ static inline int si_connect(struct stream_interface *si)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* for debugging, reports the stream interface state name */
|
||||||
|
static inline const char *si_state_str(int state)
|
||||||
|
{
|
||||||
|
switch (state) {
|
||||||
|
case SI_ST_INI: return "INI";
|
||||||
|
case SI_ST_REQ: return "REQ";
|
||||||
|
case SI_ST_QUE: return "QUE";
|
||||||
|
case SI_ST_TAR: return "TAR";
|
||||||
|
case SI_ST_ASS: return "ASS";
|
||||||
|
case SI_ST_CON: return "CON";
|
||||||
|
case SI_ST_CER: return "CER";
|
||||||
|
case SI_ST_EST: return "EST";
|
||||||
|
case SI_ST_DIS: return "DIS";
|
||||||
|
case SI_ST_CLO: return "CLO";
|
||||||
|
default: return "???";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* _PROTO_STREAM_INTERFACE_H */
|
#endif /* _PROTO_STREAM_INTERFACE_H */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -3487,9 +3487,12 @@ static int stats_dump_full_sess_to_buffer(struct stream_interface *si, struct se
|
|||||||
/* fall through */
|
/* fall through */
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
|
get_localtime(sess->logs.accept_date.tv_sec, &tm);
|
||||||
chunk_appendf(&trash,
|
chunk_appendf(&trash,
|
||||||
"%p: id=%u, proto=%s",
|
"%p: [%02d/%s/%04d:%02d:%02d:%02d.%06d] id=%u proto=%s",
|
||||||
sess,
|
sess,
|
||||||
|
tm.tm_mday, monthname[tm.tm_mon], tm.tm_year+1900,
|
||||||
|
tm.tm_hour, tm.tm_min, tm.tm_sec, (int)(sess->logs.accept_date.tv_usec),
|
||||||
sess->uniq_id,
|
sess->uniq_id,
|
||||||
sess->listener->proto->name);
|
sess->listener->proto->name);
|
||||||
|
|
||||||
@ -3583,7 +3586,7 @@ static int stats_dump_full_sess_to_buffer(struct stream_interface *si, struct se
|
|||||||
}
|
}
|
||||||
|
|
||||||
chunk_appendf(&trash,
|
chunk_appendf(&trash,
|
||||||
" task=%p (state=0x%02x nice=%d calls=%d exp=%s%s)\n",
|
" task=%p (state=0x%02x nice=%d calls=%d exp=%s%s",
|
||||||
sess->task,
|
sess->task,
|
||||||
sess->task->state,
|
sess->task->state,
|
||||||
sess->task->nice, sess->task->calls,
|
sess->task->nice, sess->task->calls,
|
||||||
@ -3593,17 +3596,19 @@ static int stats_dump_full_sess_to_buffer(struct stream_interface *si, struct se
|
|||||||
TICKS_TO_MS(1000)) : "<NEVER>",
|
TICKS_TO_MS(1000)) : "<NEVER>",
|
||||||
task_in_rq(sess->task) ? ", running" : "");
|
task_in_rq(sess->task) ? ", running" : "");
|
||||||
|
|
||||||
get_localtime(sess->logs.accept_date.tv_sec, &tm);
|
|
||||||
chunk_appendf(&trash,
|
chunk_appendf(&trash,
|
||||||
" task created [%02d/%s/%04d:%02d:%02d:%02d.%06d] (age=%s)\n",
|
" age=%s)\n",
|
||||||
tm.tm_mday, monthname[tm.tm_mon], tm.tm_year+1900,
|
|
||||||
tm.tm_hour, tm.tm_min, tm.tm_sec, (int)(sess->logs.accept_date.tv_usec),
|
|
||||||
human_time(now.tv_sec - sess->logs.accept_date.tv_sec, 1));
|
human_time(now.tv_sec - sess->logs.accept_date.tv_sec, 1));
|
||||||
|
|
||||||
chunk_appendf(&trash,
|
chunk_appendf(&trash,
|
||||||
" si[0]=%p (state=%d flags=0x%02x conn=%p exp=%s, et=0x%03x)\n",
|
" txn=%p flags=0x%x meth=%d status=%d req.st=%s rsp.st=%s\n",
|
||||||
|
&sess->txn, sess->txn.flags, sess->txn.meth, sess->txn.status,
|
||||||
|
http_msg_state_str(sess->txn.req.msg_state), http_msg_state_str(sess->txn.rsp.msg_state));
|
||||||
|
|
||||||
|
chunk_appendf(&trash,
|
||||||
|
" si[0]=%p (state=%s flags=0x%02x conn0=%p exp=%s, et=0x%03x)\n",
|
||||||
&sess->si[0],
|
&sess->si[0],
|
||||||
sess->si[0].state,
|
si_state_str(sess->si[0].state),
|
||||||
sess->si[0].flags,
|
sess->si[0].flags,
|
||||||
sess->si[0].conn,
|
sess->si[0].conn,
|
||||||
sess->si[0].exp ?
|
sess->si[0].exp ?
|
||||||
@ -3613,9 +3618,9 @@ static int stats_dump_full_sess_to_buffer(struct stream_interface *si, struct se
|
|||||||
sess->si[0].err_type);
|
sess->si[0].err_type);
|
||||||
|
|
||||||
chunk_appendf(&trash,
|
chunk_appendf(&trash,
|
||||||
" si[1]=%p (state=%d flags=0x%02x conn=%p exp=%s, et=0x%03x)\n",
|
" si[1]=%p (state=%s flags=0x%02x conn1=%p exp=%s, et=0x%03x)\n",
|
||||||
&sess->si[1],
|
&sess->si[1],
|
||||||
sess->si[1].state,
|
si_state_str(sess->si[1].state),
|
||||||
sess->si[1].flags,
|
sess->si[1].flags,
|
||||||
sess->si[1].conn,
|
sess->si[1].conn,
|
||||||
sess->si[1].exp ?
|
sess->si[1].exp ?
|
||||||
@ -3625,38 +3630,38 @@ static int stats_dump_full_sess_to_buffer(struct stream_interface *si, struct se
|
|||||||
sess->si[1].err_type);
|
sess->si[1].err_type);
|
||||||
|
|
||||||
chunk_appendf(&trash,
|
chunk_appendf(&trash,
|
||||||
" lconn=%p ctrl=%s xprt=%s data=%s\n",
|
" co0=%p ctrl=%s xprt=%s data=%s target=%s:%p\n",
|
||||||
sess->si[0].conn,
|
sess->si[0].conn,
|
||||||
get_conn_ctrl_name(sess->si[0].conn),
|
get_conn_ctrl_name(sess->si[0].conn),
|
||||||
get_conn_xprt_name(sess->si[0].conn),
|
get_conn_xprt_name(sess->si[0].conn),
|
||||||
get_conn_data_name(sess->si[0].conn));
|
get_conn_data_name(sess->si[0].conn),
|
||||||
|
obj_type_name(sess->si[0].conn->target),
|
||||||
|
obj_base_ptr(sess->si[0].conn->target));
|
||||||
|
|
||||||
chunk_appendf(&trash,
|
chunk_appendf(&trash,
|
||||||
" target=%d flags=0x%08x fd=%d fd_spec=%02x\n",
|
" flags=0x%08x fd=%d fd_spec_e=%02x fd_spec_p=%d updt=%d\n",
|
||||||
sess->si[0].conn->target ? *sess->si[0].conn->target : 0,
|
|
||||||
sess->si[0].conn->flags,
|
sess->si[0].conn->flags,
|
||||||
sess->si[0].conn->t.sock.fd,
|
sess->si[0].conn->t.sock.fd,
|
||||||
sess->si[0].conn->t.sock.fd >= 0 ? fdtab[sess->si[0].conn->t.sock.fd].spec_e : 0);
|
sess->si[0].conn->t.sock.fd >= 0 ? fdtab[sess->si[0].conn->t.sock.fd].spec_e : 0,
|
||||||
|
sess->si[0].conn->t.sock.fd >= 0 ? fdtab[sess->si[0].conn->t.sock.fd].spec_p : 0,
|
||||||
|
sess->si[0].conn->t.sock.fd >= 0 ? fdtab[sess->si[0].conn->t.sock.fd].updated : 0);
|
||||||
|
|
||||||
chunk_appendf(&trash,
|
chunk_appendf(&trash,
|
||||||
" rconn=%p ctrl=%s xprt=%s data=%s\n",
|
" co1=%p ctrl=%s xprt=%s data=%s target=%s:%p\n",
|
||||||
sess->si[1].conn,
|
sess->si[1].conn,
|
||||||
get_conn_ctrl_name(sess->si[1].conn),
|
get_conn_ctrl_name(sess->si[1].conn),
|
||||||
get_conn_xprt_name(sess->si[1].conn),
|
get_conn_xprt_name(sess->si[1].conn),
|
||||||
get_conn_data_name(sess->si[1].conn));
|
get_conn_data_name(sess->si[1].conn),
|
||||||
|
obj_type_name(sess->si[1].conn->target),
|
||||||
|
obj_base_ptr(sess->si[1].conn->target));
|
||||||
|
|
||||||
chunk_appendf(&trash,
|
chunk_appendf(&trash,
|
||||||
" target=%d flags=0x%08x fd=%d fd_spec=%02x\n",
|
" flags=0x%08x fd=%d fd_spec_e=%02x fd_spec_p=%d updt=%d\n",
|
||||||
sess->si[1].conn->target ? *sess->si[1].conn->target : 0,
|
|
||||||
sess->si[1].conn->flags,
|
sess->si[1].conn->flags,
|
||||||
sess->si[1].conn->t.sock.fd,
|
sess->si[1].conn->t.sock.fd,
|
||||||
sess->si[1].conn->t.sock.fd >= 0 ? fdtab[sess->si[1].conn->t.sock.fd].spec_e : 0);
|
sess->si[1].conn->t.sock.fd >= 0 ? fdtab[sess->si[1].conn->t.sock.fd].spec_e : 0,
|
||||||
|
sess->si[1].conn->t.sock.fd >= 0 ? fdtab[sess->si[1].conn->t.sock.fd].spec_p : 0,
|
||||||
chunk_appendf(&trash,
|
sess->si[1].conn->t.sock.fd >= 0 ? fdtab[sess->si[1].conn->t.sock.fd].updated : 0);
|
||||||
" txn=%p flags=0x%x meth=%d status=%d req.st=%s rsp.st=%s\n",
|
|
||||||
&sess->txn, sess->txn.flags, sess->txn.meth, sess->txn.status,
|
|
||||||
http_msg_state_str(sess->txn.req.msg_state), http_msg_state_str(sess->txn.rsp.msg_state));
|
|
||||||
|
|
||||||
|
|
||||||
chunk_appendf(&trash,
|
chunk_appendf(&trash,
|
||||||
" req=%p (f=0x%06x an=0x%x pipe=%d tofwd=%d total=%lld)\n"
|
" req=%p (f=0x%06x an=0x%x pipe=%d tofwd=%d total=%lld)\n"
|
||||||
|
Loading…
Reference in New Issue
Block a user