From f94df998b367329aec1e887090dd28c170b36d33 Mon Sep 17 00:00:00 2001 From: Alex Badea Date: Mon, 15 Apr 2002 20:35:49 +0000 Subject: [PATCH] Author: Alex Badea Log message: Added verbose server reporting (/stats v or /stats V for machine-readable format) (bugzilla bug 52) git-svn-id: file:///home/klmitch/undernet-ircu/undernet-ircu-svn/ircu2/trunk@739 c9e4aea6-c8fd-4c43-8297-357d70d61c8c --- ChangeLog | 11 +++++++++++ include/numeric.h | 1 + ircd/m_stats.c | 42 ++++++++++++++++++++++++++++++++++++++++++ ircd/s_err.c | 2 +- ircd/s_stats.c | 1 + 5 files changed, 56 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index b9bbf99..4efa31a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2002-04-15 Alex Badea + + * ircd/m_stats.c: added verbose server reporting (/stats v + or /stats V for machine-readable format) (bugzilla bug 52) + + * include/numeric.h: added RPL_STATSVERBOSE 236 + + * ircd/s_err.c: added RPL_STATSVERBOSE + + * ircd/s_stats.c: added help for stats 'v' + 2002-04-15 Alex Badea * ircd/class.c (get_client_class): fixed typo which caused diff --git a/include/numeric.h b/include/numeric.h index f4c2f48..ebbb45f 100644 --- a/include/numeric.h +++ b/include/numeric.h @@ -120,6 +120,7 @@ extern const struct Numeric* get_error_numeric(int err); #define RPL_SERVLIST 234 /* unused */ #define RPL_SERVLISTEND 235 /* unused */ +#define RPL_STATSVERBOSE 236 /* Undernet verbose server list */ #define RPL_STATSENGINE 237 /* Undernet engine name */ #define RPL_STATSFLINE 238 /* Undernet feature lines */ /* RPL_STATSIAUTH 239 IRCnet extension */ diff --git a/ircd/m_stats.c b/ircd/m_stats.c index cad559a..4622b12 100644 --- a/ircd/m_stats.c +++ b/ircd/m_stats.c @@ -169,6 +169,39 @@ int report_klines(struct Client* sptr, char* mask, int limit_query) return 1; } +static int report_servers_verbose(struct Client *sptr, char stat) +{ + struct Client *acptr; + int i; + + /* lowercase 'v' is for human-readable, + * uppercase 'V' is for machine-readable */ + if (stat == 'v') + send_reply(sptr, SND_EXPLICIT | RPL_STATSVERBOSE, + "%-20s Burst Hops Numeric Lag Clients/Max Proto " + "%-10s :Info", "Servername", "LinkTS"); + for (i = 0; i <= HighestFd; i++) { + if (!(acptr = LocalClientArray[i]) || !IsServer(acptr)) + continue; + send_reply(sptr, SND_EXPLICIT | RPL_STATSVERBOSE, stat == 'v' ? + "%-20s %c%c %4i %s %-4i %5i %5i %5i P%-2i %Tu :%s" : + "%s %c%c %i %s %i %i %i %i P%i %Tu :%s", + cli_name(acptr), + IsBurst(acptr) ? 'B' : '-', + IsBurstAck(acptr) ? 'A' : '-', + cli_hopcount(acptr), + NumServ(acptr), + base64toint(cli_yxx(acptr)), + cli_serv(acptr)->lag, + cli_serv(acptr)->clients, + cli_serv(acptr)->nn_mask, + cli_serv(acptr)->prot, + cli_serv(acptr)->timestamp, + cli_info(acptr)); + } + return 0; +} + /* * m_stats - generic message handler @@ -731,6 +764,10 @@ int ms_stats(struct Client* cptr, struct Client* sptr, int parc, char* parv[]) send_reply(sptr, RPL_STATSCONN, max_connection_count, max_client_count); break; } + case 'V': + case 'v': + report_servers_verbose(sptr, stat); + break; case 'W': case 'w': calc_load(sptr); @@ -959,6 +996,10 @@ int mo_stats(struct Client* cptr, struct Client* sptr, int parc, char* parv[]) send_reply(sptr, RPL_STATSCONN, max_connection_count, max_client_count); break; } + case 'V': + case 'v': + report_servers_verbose(sptr, stat); + break; case 'W': case 'w': calc_load(sptr); @@ -978,6 +1019,7 @@ int mo_stats(struct Client* cptr, struct Client* sptr, int parc, char* parv[]) case 'z': count_memory(sptr, parv[0]); break; + default: stat = '*'; while (*infotext) diff --git a/ircd/s_err.c b/ircd/s_err.c index 0d91dc6..585cdfe 100644 --- a/ircd/s_err.c +++ b/ircd/s_err.c @@ -504,7 +504,7 @@ static Numeric replyTable[] = { /* 235 */ { RPL_SERVLISTEND, 0, "235" }, /* 236 */ - { 0 }, + { RPL_STATSVERBOSE, "V :Sent as explicit", "236" }, /* 237 */ { RPL_STATSENGINE, "%s :Event loop engine", "237" }, /* 238 */ diff --git a/ircd/s_stats.c b/ircd/s_stats.c index 4b07c81..4ea5094 100644 --- a/ircd/s_stats.c +++ b/ircd/s_stats.c @@ -77,6 +77,7 @@ const char *statsinfo[] = { "f - Feature settings.", "m - Message usage information.", "t - Local connection statistics (Total SND/RCV, etc).", + "v - Server list with verbose information.", "w - Userload statistics.", "M - Memory allocation & leak monitoring.", "z - Memory/Structure allocation information.", -- 2.20.1