diff options
author | geniusdex geniusdex@31f1291d-b8d6-0310-a050-a5561fc1590b <geniusdex geniusdex@31f1291d-b8d6-0310-a050-a5561fc1590b@5417fbe8-f217-4b02-8779-1006273d7864> | 2005-10-01 18:58:56 +0000 |
---|---|---|
committer | geniusdex geniusdex@31f1291d-b8d6-0310-a050-a5561fc1590b <geniusdex geniusdex@31f1291d-b8d6-0310-a050-a5561fc1590b@5417fbe8-f217-4b02-8779-1006273d7864> | 2005-10-01 18:58:56 +0000 |
commit | f835ac55cbc35e011823240e93b91426b060fa7a (patch) | |
tree | 24ba5ce3198c6178f14d998a5b048a59646cef4c /src | |
parent | 9602733b2f16b6a678f8c7865907914ff98521b2 (diff) |
BUILD : 1.7.11 (906) BUGS : NOTES : Added information on the uplink server via /os stats uplink
git-svn-id: svn://svn.anope.org/anope/trunk@906 31f1291d-b8d6-0310-a050-a5561fc1590b
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@652 5417fbe8-f217-4b02-8779-1006273d7864
Diffstat (limited to 'src')
-rw-r--r-- | src/core/os_stats.c | 276 | ||||
-rw-r--r-- | src/servers.c | 4 |
2 files changed, 207 insertions, 73 deletions
diff --git a/src/core/os_stats.c b/src/core/os_stats.c index f621c56d1..9171287f8 100644 --- a/src/core/os_stats.c +++ b/src/core/os_stats.c @@ -71,6 +71,24 @@ void myOperServHelp(User * u) } /** + * Count servers connected to server s + * @param s The server to start counting from + * @return Amount of servers connected to server s + **/ +int stats_count_servers(Server *s) +{ + int count = 1; + + while (s) { + if (s->links) + count += stats_count_servers(s->links); + s = s->next; + } + + return count; +} + +/** * The /os stats command. * @param u The user who issued the command * @param MOD_CONT to continue processing other modules, MOD_STOP to stop processing. @@ -83,6 +101,8 @@ int do_stats(User * u) mins = (uptime / 60) % 60, secs = uptime % 60; struct tm *tm; char timebuf[64]; + char buf[512]; + int buflen; if (extra && stricmp(extra, "ALL") != 0) { if (stricmp(extra, "AKILL") == 0) { @@ -207,81 +227,195 @@ int do_stats(User * u) notice_lang(s_OperServ, u, PERMISSION_DENIED); } return MOD_CONT; - } else { + } else if (stricmp(extra, "MEMORY") && stricmp(extra, "UPLINK")) { notice_lang(s_OperServ, u, OPER_STATS_UNKNOWN_OPTION, extra); } } - - notice_lang(s_OperServ, u, OPER_STATS_CURRENT_USERS, usercnt, opcnt); - tm = localtime(&maxusertime); - strftime_lang(timebuf, sizeof(timebuf), u, STRFTIME_DATE_TIME_FORMAT, - tm); - notice_lang(s_OperServ, u, OPER_STATS_MAX_USERS, maxusercnt, timebuf); - if (days > 1) { - notice_lang(s_OperServ, u, OPER_STATS_UPTIME_DHMS, - days, hours, mins, secs); - } else if (days == 1) { - notice_lang(s_OperServ, u, OPER_STATS_UPTIME_1DHMS, - days, hours, mins, secs); - } else { - if (hours > 1) { - if (mins != 1) { - if (secs != 1) { - notice_lang(s_OperServ, u, OPER_STATS_UPTIME_HMS, - hours, mins, secs); - } else { - notice_lang(s_OperServ, u, OPER_STATS_UPTIME_HM1S, - hours, mins, secs); - } - } else { - if (secs != 1) { - notice_lang(s_OperServ, u, OPER_STATS_UPTIME_H1MS, - hours, mins, secs); - } else { - notice_lang(s_OperServ, u, OPER_STATS_UPTIME_H1M1S, - hours, mins, secs); - } - } - } else if (hours == 1) { - if (mins != 1) { - if (secs != 1) { - notice_lang(s_OperServ, u, OPER_STATS_UPTIME_1HMS, - hours, mins, secs); - } else { - notice_lang(s_OperServ, u, OPER_STATS_UPTIME_1HM1S, - hours, mins, secs); - } - } else { - if (secs != 1) { - notice_lang(s_OperServ, u, OPER_STATS_UPTIME_1H1MS, - hours, mins, secs); - } else { - notice_lang(s_OperServ, u, OPER_STATS_UPTIME_1H1M1S, - hours, mins, secs); - } - } - } else { - if (mins != 1) { - if (secs != 1) { - notice_lang(s_OperServ, u, OPER_STATS_UPTIME_MS, - mins, secs); - } else { - notice_lang(s_OperServ, u, OPER_STATS_UPTIME_M1S, - mins, secs); - } - } else { - if (secs != 1) { - notice_lang(s_OperServ, u, OPER_STATS_UPTIME_1MS, - mins, secs); - } else { - notice_lang(s_OperServ, u, OPER_STATS_UPTIME_1M1S, - mins, secs); - } - } - } + + if ((stricmp(extra, "MEMORY") != 0) && (stricmp(extra, "UPLINK") != 0)) { + notice_lang(s_OperServ, u, OPER_STATS_CURRENT_USERS, usercnt, opcnt); + tm = localtime(&maxusertime); + strftime_lang(timebuf, sizeof(timebuf), u, STRFTIME_DATE_TIME_FORMAT, + tm); + notice_lang(s_OperServ, u, OPER_STATS_MAX_USERS, maxusercnt, timebuf); + if (days > 1) { + notice_lang(s_OperServ, u, OPER_STATS_UPTIME_DHMS, + days, hours, mins, secs); + } else if (days == 1) { + notice_lang(s_OperServ, u, OPER_STATS_UPTIME_1DHMS, + days, hours, mins, secs); + } else { + if (hours > 1) { + if (mins != 1) { + if (secs != 1) { + notice_lang(s_OperServ, u, OPER_STATS_UPTIME_HMS, + hours, mins, secs); + } else { + notice_lang(s_OperServ, u, OPER_STATS_UPTIME_HM1S, + hours, mins, secs); + } + } else { + if (secs != 1) { + notice_lang(s_OperServ, u, OPER_STATS_UPTIME_H1MS, + hours, mins, secs); + } else { + notice_lang(s_OperServ, u, OPER_STATS_UPTIME_H1M1S, + hours, mins, secs); + } + } + } else if (hours == 1) { + if (mins != 1) { + if (secs != 1) { + notice_lang(s_OperServ, u, OPER_STATS_UPTIME_1HMS, + hours, mins, secs); + } else { + notice_lang(s_OperServ, u, OPER_STATS_UPTIME_1HM1S, + hours, mins, secs); + } + } else { + if (secs != 1) { + notice_lang(s_OperServ, u, OPER_STATS_UPTIME_1H1MS, + hours, mins, secs); + } else { + notice_lang(s_OperServ, u, OPER_STATS_UPTIME_1H1M1S, + hours, mins, secs); + } + } + } else { + if (mins != 1) { + if (secs != 1) { + notice_lang(s_OperServ, u, OPER_STATS_UPTIME_MS, + mins, secs); + } else { + notice_lang(s_OperServ, u, OPER_STATS_UPTIME_M1S, + mins, secs); + } + } else { + if (secs != 1) { + notice_lang(s_OperServ, u, OPER_STATS_UPTIME_1MS, + mins, secs); + } else { + notice_lang(s_OperServ, u, OPER_STATS_UPTIME_1M1S, + mins, secs); + } + } + } + } } - - if (extra && stricmp(extra, "ALL") == 0 && is_services_admin(u)) { + + if (extra && ((stricmp(extra, "ALL") == 0) || (stricmp(extra, "UPLINK") == 0)) && is_services_admin(u)) { + notice_lang(s_OperServ, u, OPER_STATS_UPLINK_SERVER, serv_uplink->name); + buf[0] = '\0'; + buflen = 511; /* How confusing, this is the amount of space left! */ + if (uplink_capab & CAPAB_NOQUIT) { + strncat(buf, " NOQUIT", buflen); + buflen -= 7; + } + if (uplink_capab & CAPAB_TSMODE) { + strncat(buf, " TSMODE", buflen); + buflen -= 7; + } + if (uplink_capab & CAPAB_UNCONNECT) { + strncat(buf, " UNCONNECT", buflen); + buflen -= 10; + } + if (uplink_capab & CAPAB_NICKIP) { + strncat(buf, " NICKIP", buflen); + buflen -= 7; + } + if (uplink_capab & CAPAB_NSJOIN) { + strncat(buf, " SSJOIN", buflen); + buflen -= 7; + } + if (uplink_capab & CAPAB_ZIP) { + strncat(buf, " ZIP", buflen); + buflen -= 4; + } + if (uplink_capab & CAPAB_BURST) { + strncat(buf, " BURST", buflen); + buflen -= 6; + } + if (uplink_capab & CAPAB_TS5) { + strncat(buf, " TS5", buflen); + buflen -= 4; + } + if (uplink_capab & CAPAB_TS3) { + strncat(buf, " TS3", buflen); + buflen -= 4; + } + if (uplink_capab & CAPAB_DKEY) { + strncat(buf, " DKEY", buflen); + buflen -= 5; + } + if (uplink_capab & CAPAB_PT4) { + strncat(buf, " PT4", buflen); + buflen -= 4; + } + if (uplink_capab & CAPAB_SCS) { + strncat(buf, " SCS", buflen); + buflen -= 4; + } + if (uplink_capab & CAPAB_QS) { + strncat(buf, " QS", buflen); + buflen -= 3; + } + if (uplink_capab & CAPAB_UID) { + strncat(buf, " UID", buflen); + buflen -= 4; + } + if (uplink_capab & CAPAB_KNOCK) { + strncat(buf, " KNOCK", buflen); + buflen -= 6; + } + if (uplink_capab & CAPAB_CLIENT) { + strncat(buf, " CLIENT", buflen); + buflen -= 7; + } + if (uplink_capab & CAPAB_IPV6) { + strncat(buf, " IPV6", buflen); + buflen -= 5; + } + if (uplink_capab & CAPAB_SSJ5) { + strncat(buf, " SSJ5", buflen); + buflen -= 5; + } + if (uplink_capab & CAPAB_SN2) { + strncat(buf, " SN2", buflen); + buflen -= 5; + } + if (uplink_capab & CAPAB_TOKEN) { + strncat(buf, " TOKEN", buflen); + buflen -= 6; + } + if (uplink_capab & CAPAB_VHOST) { + strncat(buf, " VHOST", buflen); + buflen -= 6; + } + if (uplink_capab & CAPAB_SSJ3) { + strncat(buf, " SSJ3", buflen); + buflen -= 5; + } + if (uplink_capab & CAPAB_SJB64) { + strncat(buf, " SJB64", buflen); + buflen -= 6; + } + if (uplink_capab & CAPAB_CHANMODE) { + strncat(buf, " CHANMODES=", buflen); + buflen -= 11; + strncat(buf, ircd->chanmodes, buflen); + buflen -= strlen(ircd->chanmodes); + } + if (uplink_capab & CAPAB_NICKCHARS) { + strncat(buf, " NICKCHARS=", buflen); + buflen -= 11; + strncat(buf, ircd->nickchars, buflen); + buflen -= strlen(ircd->nickchars); + } + notice_lang(s_OperServ, u, OPER_STATS_UPLINK_CAPAB, buf); + notice_lang(s_OperServ, u, OPER_STATS_UPLINK_SERVER_COUNT, stats_count_servers(serv_uplink)); + } + + if (extra && ((stricmp(extra, "ALL") == 0) || (stricmp(extra, "MEMORY") == 0)) && is_services_admin(u)) { long count, mem; notice_lang(s_OperServ, u, OPER_STATS_BYTES_READ, diff --git a/src/servers.c b/src/servers.c index 2fe928318..0a076c334 100644 --- a/src/servers.c +++ b/src/servers.c @@ -188,7 +188,7 @@ static void delete_server(Server * serv, const char *quitreason) } u = unext; } - if (debug >= 2) + if (debug) alog("debug: delete_server() cleared all users"); } } @@ -200,7 +200,7 @@ static void delete_server(Server * serv, const char *quitreason) s = snext; } - if (debug >= 2) + if (debug) alog("debug: delete_server() cleared all servers"); free(serv->name); |