From: Daniel Schultze Date: Fri, 23 Mar 2012 17:53:36 +0000 (-0700) Subject: MINOR: cli: display the 4 IP addresses and ports on "show sess XXX" X-Git-Tag: v1.5-dev9~103 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=90690c7aca6353236779dba23859ea0cf67329d0;p=thirdparty%2Fhaproxy.git MINOR: cli: display the 4 IP addresses and ports on "show sess XXX" I have modified dumpstats.c to show additional information for the show session command on the statistics socket. This will dump the public, frontend, backend, and server ip/tcp addresses and port. We found it useful to have this information available in real time and could not find another way of getting this information. --- diff --git a/src/dumpstats.c b/src/dumpstats.c index 88a5285bf1..eeba7b4743 100644 --- a/src/dumpstats.c +++ b/src/dumpstats.c @@ -3252,20 +3252,74 @@ static int stats_dump_full_sess_to_buffer(struct stream_interface *si) sess->flags, sess->si[1].conn_retries, sess->srv_conn, sess->pend_pos); chunk_printf(&msg, - " frontend=%s (id=%u mode=%s), listener=%s (id=%u)\n", + " frontend=%s (id=%u mode=%s), listener=%s (id=%u)", sess->fe->id, sess->fe->uuid, sess->fe->mode ? "http" : "tcp", sess->listener ? sess->listener->name ? sess->listener->name : "?" : "?", sess->listener ? sess->listener->luid : 0); + stream_sock_get_to_addr(&sess->si[0]); + switch (addr_to_str(&sess->si[0].addr.to, pn, sizeof(pn))) { + case AF_INET: + case AF_INET6: + chunk_printf(&msg, " addr=%s:%d\n", + pn, get_host_port(&sess->si[0].addr.to)); + break; + case AF_UNIX: + chunk_printf(&msg, " addr=unix:%d\n", sess->listener->luid); + break; + default: + /* no more information to print right now */ + chunk_printf(&msg, "\n"); + break; + } + if (sess->be->cap & PR_CAP_BE) chunk_printf(&msg, - " backend=%s (id=%u mode=%s) server=%s (id=%u)\n", + " backend=%s (id=%u mode=%s)", sess->be->id, - sess->be->uuid, sess->be->mode ? "http" : "tcp", + sess->be->uuid, sess->be->mode ? "http" : "tcp"); + else + chunk_printf(&msg, " backend= (id=-1 mode=-)"); + + stream_sock_get_from_addr(&sess->si[1]); + switch (addr_to_str(&sess->si[1].addr.from, pn, sizeof(pn))) { + case AF_INET: + case AF_INET6: + chunk_printf(&msg, " addr=%s:%d\n", + pn, get_host_port(&sess->si[1].addr.from)); + break; + case AF_UNIX: + chunk_printf(&msg, " addr=unix\n"); + break; + default: + /* no more information to print right now */ + chunk_printf(&msg, "\n"); + break; + } + + if (sess->be->cap & PR_CAP_BE) + chunk_printf(&msg, + " server=%s (id=%u)", target_srv(&sess->target) ? target_srv(&sess->target)->id : "", target_srv(&sess->target) ? target_srv(&sess->target)->puid : 0); else - chunk_printf(&msg, " backend= (id=-1 mode=-) server= (id=-1)\n"); + chunk_printf(&msg, " server= (id=-1)"); + + stream_sock_get_to_addr(&sess->si[1]); + switch (addr_to_str(&sess->si[1].addr.to, pn, sizeof(pn))) { + case AF_INET: + case AF_INET6: + chunk_printf(&msg, " addr=%s:%d\n", + pn, get_host_port(&sess->si[1].addr.to)); + break; + case AF_UNIX: + chunk_printf(&msg, " addr=unix\n"); + break; + default: + /* no more information to print right now */ + chunk_printf(&msg, "\n"); + break; + } chunk_printf(&msg, " task=%p (state=0x%02x nice=%d calls=%d exp=%s%s)\n",