X-Git-Url: https://jfr.im/git/irc/rqf/shadowircd.git/blobdiff_plain/68ff929f3d4d614c131b8e3b67052ba0a2bbec8e..0328101a9b1638099e69e42cb26ba69c43cd84eb:/src/s_stats.c diff --git a/src/s_stats.c b/src/s_stats.c index f1918a2..42e4dec 100644 --- a/src/s_stats.c +++ b/src/s_stats.c @@ -30,9 +30,7 @@ #include "irc_string.h" #include "ircd.h" #include "numeric.h" -#include "commio.h" #include "send.h" -#include "memory.h" #include "s_conf.h" #include "s_newconf.h" #include "whowas.h" @@ -43,13 +41,12 @@ /* * stats stuff */ -static struct ServerStatistics ircst; -struct ServerStatistics *ServerStats = &ircst; +struct ServerStatistics ServerStats; void init_stats() { - memset(&ircst, 0, sizeof(ircst)); + /* XXX nothing to do - was ServerStats init -- dwr */ } /* @@ -59,106 +56,73 @@ init_stats() * output - NONE * side effects - */ -void -tstats(struct Client *source_p) -{ - struct Client *target_p; - struct ServerStatistics *sp; - struct ServerStatistics tmp; - dlink_node *ptr; - - sp = &tmp; - memcpy(sp, ServerStats, sizeof(struct ServerStatistics)); - - DLINK_FOREACH(ptr, serv_list.head) - { - target_p = ptr->data; - - sp->is_sbs += target_p->localClient->sendB; - sp->is_sbr += target_p->localClient->receiveB; - sp->is_sks += target_p->localClient->sendK; - sp->is_skr += target_p->localClient->receiveK; - sp->is_sti += CurrentTime - target_p->localClient->firsttime; - sp->is_sv++; - if(sp->is_sbs > 1023) - { - sp->is_sks += (sp->is_sbs >> 10); - sp->is_sbs &= 0x3ff; - } - if(sp->is_sbr > 1023) - { - sp->is_skr += (sp->is_sbr >> 10); - sp->is_sbr &= 0x3ff; - } - } - - DLINK_FOREACH(ptr, lclient_list.head) - { - target_p = ptr->data; - - sp->is_cbs += target_p->localClient->sendB; - sp->is_cbr += target_p->localClient->receiveB; - sp->is_cks += target_p->localClient->sendK; - sp->is_ckr += target_p->localClient->receiveK; - sp->is_cti += CurrentTime - target_p->localClient->firsttime; - sp->is_cl++; - if(sp->is_cbs > 1023) - { - sp->is_cks += (sp->is_cbs >> 10); - sp->is_cbs &= 0x3ff; - } - if(sp->is_cbr > 1023) - { - sp->is_ckr += (sp->is_cbr >> 10); - sp->is_cbr &= 0x3ff; - } - - } - - DLINK_FOREACH(ptr, unknown_list.head) - { - sp->is_ni++; - } - - sendto_one_numeric(source_p, RPL_STATSDEBUG, - "T :accepts %u refused %u", sp->is_ac, sp->is_ref); - sendto_one_numeric(source_p, RPL_STATSDEBUG, - "T :rejected %u delaying %lu", - sp->is_rej, dlink_list_length(&delay_exit)); - sendto_one_numeric(source_p, RPL_STATSDEBUG, - "T :nicks being delayed %lu", - get_nd_count()); - sendto_one_numeric(source_p, RPL_STATSDEBUG, - "T :unknown commands %u prefixes %u", - sp->is_unco, sp->is_unpf); - sendto_one_numeric(source_p, RPL_STATSDEBUG, - "T :nick collisions %u saves %u unknown closes %u", - sp->is_kill, sp->is_save, sp->is_ni); - sendto_one_numeric(source_p, RPL_STATSDEBUG, - "T :wrong direction %u empty %u", - sp->is_wrdi, sp->is_empt); - sendto_one_numeric(source_p, RPL_STATSDEBUG, - "T :numerics seen %u", sp->is_num); - sendto_one_numeric(source_p, RPL_STATSDEBUG, - "T :auth successes %u fails %u", - sp->is_asuc, sp->is_abad); - sendto_one_numeric(source_p, RPL_STATSDEBUG, - "T :sasl successes %u fails %u", - sp->is_ssuc, sp->is_sbad); - sendto_one_numeric(source_p, RPL_STATSDEBUG, "T :Client Server"); - sendto_one_numeric(source_p, RPL_STATSDEBUG, - "T :connected %u %u", sp->is_cl, sp->is_sv); - sendto_one_numeric(source_p, RPL_STATSDEBUG, - "T :bytes sent %d.%uK %d.%uK", - (int) sp->is_cks, sp->is_cbs, - (int) sp->is_sks, sp->is_sbs); - sendto_one_numeric(source_p, RPL_STATSDEBUG, - "T :bytes recv %d.%uK %d.%uK", - (int) sp->is_ckr, sp->is_cbr, - (int) sp->is_skr, sp->is_sbr); - sendto_one_numeric(source_p, RPL_STATSDEBUG, - "T :time connected %d %d", - (int) sp->is_cti, (int) sp->is_sti); +void +tstats(struct Client *source_p) +{ + struct Client *target_p; + struct ServerStatistics sp; + rb_dlink_node *ptr; + + memcpy(&sp, &ServerStats, sizeof(struct ServerStatistics)); + + RB_DLINK_FOREACH(ptr, serv_list.head) + { + target_p = ptr->data; + + sp.is_sbs += target_p->localClient->sendB; + sp.is_sbr += target_p->localClient->receiveB; + sp.is_sti += rb_current_time() - target_p->localClient->firsttime; + sp.is_sv++; + } + + RB_DLINK_FOREACH(ptr, lclient_list.head) + { + target_p = ptr->data; + + sp.is_cbs += target_p->localClient->sendB; + sp.is_cbr += target_p->localClient->receiveB; + sp.is_cti += rb_current_time() - target_p->localClient->firsttime; + sp.is_cl++; + } + + sendto_one_numeric(source_p, RPL_STATSDEBUG, + "T :accepts %u refused %u", + sp.is_ac, sp.is_ref); + sendto_one_numeric(source_p, RPL_STATSDEBUG, + "T :rejected %u delaying %lu", + sp.is_rej, delay_exit_length()); + sendto_one_numeric(source_p, RPL_STATSDEBUG, + "T :nicks being delayed %lu", get_nd_count()); + sendto_one_numeric(source_p, RPL_STATSDEBUG, + "T :unknown commands %u prefixes %u", + sp.is_unco, sp.is_unpf); + sendto_one_numeric(source_p, RPL_STATSDEBUG, + "T :nick collisions %u saves %u unknown closes %u", + sp.is_kill, sp.is_save, sp.is_ni); + sendto_one_numeric(source_p, RPL_STATSDEBUG, + "T :wrong direction %u empty %u", + sp.is_wrdi, sp.is_empt); + sendto_one_numeric(source_p, RPL_STATSDEBUG, + "T :numerics seen %u", + sp.is_num); + sendto_one_numeric(source_p, RPL_STATSDEBUG, + "T :auth successes %u fails %u", + sp.is_asuc, sp.is_abad); + sendto_one_numeric(source_p, RPL_STATSDEBUG, "T :Client Server"); + sendto_one_numeric(source_p, RPL_STATSDEBUG, + "T :connected %u %u", + sp.is_cl, sp.is_sv); + sendto_one_numeric(source_p, RPL_STATSDEBUG, + "T :bytes sent %lluK %lluK", + sp.is_cbs / 1024, + sp.is_sbs / 1024); + sendto_one_numeric(source_p, RPL_STATSDEBUG, + "T :bytes recv %lluK %lluK", + sp.is_cbr / 1024, + sp.is_sbr / 1024); + sendto_one_numeric(source_p, RPL_STATSDEBUG, + "T :time connected %lu %lu", + sp.is_cti, sp.is_sti); } void @@ -167,8 +131,8 @@ count_memory(struct Client *source_p) struct Client *target_p; struct Channel *chptr; struct Ban *actualBan; - dlink_node *dlink; - dlink_node *ptr; + rb_dlink_node *rb_dlink; + rb_dlink_node *ptr; int channel_count = 0; int local_client_conf_count = 0; /* local client conf links */ int users_counted = 0; /* user structs */ @@ -180,7 +144,6 @@ count_memory(struct Client *source_p) int channel_invex = 0; int channel_quiets = 0; - size_t wwu = 0; /* whowas users */ int class_count = 0; /* classes */ int conf_count = 0; /* conf lines */ int users_invited_count = 0; /* users invited */ @@ -195,6 +158,7 @@ count_memory(struct Client *source_p) size_t channel_quiet_memory = 0; size_t away_memory = 0; /* memory used by aways */ + size_t ww = 0; /* whowas array count */ size_t wwm = 0; /* whowas array memory used */ size_t conf_memory = 0; /* memory used by conf lines */ size_t mem_servers_cached; /* memory used by scache */ @@ -213,9 +177,9 @@ count_memory(struct Client *source_p) size_t total_memory = 0; - count_whowas_memory(&wwu, &wwm); + count_whowas_memory(&ww, &wwm); - DLINK_FOREACH(ptr, global_client_list.head) + RB_DLINK_FOREACH(ptr, global_client_list.head) { target_p = ptr->data; if(MyConnect(target_p)) @@ -226,8 +190,8 @@ count_memory(struct Client *source_p) if(target_p->user) { users_counted++; - users_invited_count += dlink_list_length(&target_p->user->invited); - user_channels += dlink_list_length(&target_p->user->channel); + users_invited_count += rb_dlink_list_length(&target_p->user->invited); + user_channels += rb_dlink_list_length(&target_p->user->channel); if(target_p->user->away) { aways_counted++; @@ -237,71 +201,71 @@ count_memory(struct Client *source_p) } /* Count up all channels, ban lists, except lists, Invex lists */ - DLINK_FOREACH(ptr, global_channel_list.head) + RB_DLINK_FOREACH(ptr, global_channel_list.head) { chptr = ptr->data; channel_count++; channel_memory += (strlen(chptr->chname) + sizeof(struct Channel)); - channel_users += dlink_list_length(&chptr->members); - channel_invites += dlink_list_length(&chptr->invites); + channel_users += rb_dlink_list_length(&chptr->members); + channel_invites += rb_dlink_list_length(&chptr->invites); - DLINK_FOREACH(dlink, chptr->banlist.head) + RB_DLINK_FOREACH(rb_dlink, chptr->banlist.head) { - actualBan = dlink->data; + actualBan = rb_dlink->data; channel_bans++; - channel_ban_memory += sizeof(dlink_node) + sizeof(struct Ban); + channel_ban_memory += sizeof(rb_dlink_node) + sizeof(struct Ban); } - DLINK_FOREACH(dlink, chptr->exceptlist.head) + RB_DLINK_FOREACH(rb_dlink, chptr->exceptlist.head) { - actualBan = dlink->data; + actualBan = rb_dlink->data; channel_except++; - channel_except_memory += (sizeof(dlink_node) + sizeof(struct Ban)); + channel_except_memory += (sizeof(rb_dlink_node) + sizeof(struct Ban)); } - DLINK_FOREACH(dlink, chptr->invexlist.head) + RB_DLINK_FOREACH(rb_dlink, chptr->invexlist.head) { - actualBan = dlink->data; + actualBan = rb_dlink->data; channel_invex++; - channel_invex_memory += (sizeof(dlink_node) + sizeof(struct Ban)); + channel_invex_memory += (sizeof(rb_dlink_node) + sizeof(struct Ban)); } - DLINK_FOREACH(dlink, chptr->quietlist.head) + RB_DLINK_FOREACH(rb_dlink, chptr->quietlist.head) { - actualBan = dlink->data; + actualBan = rb_dlink->data; channel_quiets++; - channel_quiet_memory += (sizeof(dlink_node) + sizeof(struct Ban)); + channel_quiet_memory += (sizeof(rb_dlink_node) + sizeof(struct Ban)); } } /* count up all classes */ - class_count = dlink_list_length(&class_list) + 1; + class_count = rb_dlink_list_length(&class_list) + 1; - count_linebuf_memory(&linebuf_count, &linebuf_memory_used); + rb_count_rb_linebuf_memory(&linebuf_count, &linebuf_memory_used); sendto_one_numeric(source_p, RPL_STATSDEBUG, "z :Users %u(%lu) Invites %u(%lu)", users_counted, (unsigned long) users_counted * sizeof(struct User), users_invited_count, - (unsigned long) users_invited_count * sizeof(dlink_node)); + (unsigned long) users_invited_count * sizeof(rb_dlink_node)); sendto_one_numeric(source_p, RPL_STATSDEBUG, "z :User channels %u(%lu) Aways %u(%d)", user_channels, - (unsigned long) user_channels * sizeof(dlink_node), + (unsigned long) user_channels * sizeof(rb_dlink_node), aways_counted, (int) away_memory); sendto_one_numeric(source_p, RPL_STATSDEBUG, "z :Attached confs %u(%lu)", local_client_conf_count, - (unsigned long) local_client_conf_count * sizeof(dlink_node)); + (unsigned long) local_client_conf_count * sizeof(rb_dlink_node)); sendto_one_numeric(source_p, RPL_STATSDEBUG, "z :Conflines %u(%d)", conf_count, (int) conf_memory); @@ -325,28 +289,24 @@ count_memory(struct Client *source_p) sendto_one_numeric(source_p, RPL_STATSDEBUG, "z :Channel members %u(%lu) invite %u(%lu)", channel_users, - (unsigned long) channel_users * sizeof(dlink_node), + (unsigned long) channel_users * sizeof(rb_dlink_node), channel_invites, - (unsigned long) channel_invites * sizeof(dlink_node)); + (unsigned long) channel_invites * sizeof(rb_dlink_node)); total_channel_memory = channel_memory + channel_ban_memory + - channel_users * sizeof(dlink_node) + channel_invites * sizeof(dlink_node); - - sendto_one_numeric(source_p, RPL_STATSDEBUG, - "z :Whowas users %ld(%ld)", - (long)wwu, (long) (wwu * sizeof(struct User))); + channel_users * sizeof(rb_dlink_node) + channel_invites * sizeof(rb_dlink_node); sendto_one_numeric(source_p, RPL_STATSDEBUG, - "z :Whowas array %u(%d)", - NICKNAMEHISTORYLENGTH, (int) wwm); + "z :Whowas array %ld(%ld)", + (long)ww, (long)wwm); - totww = wwu * sizeof(struct User) + wwm; + totww = wwm; sendto_one_numeric(source_p, RPL_STATSDEBUG, "z :Hash: client %u(%ld) chan %u(%ld)", - U_MAX, (long)(U_MAX * sizeof(dlink_list)), - CH_MAX, (long)(CH_MAX * sizeof(dlink_list))); + U_MAX, (long)(U_MAX * sizeof(rb_dlink_list)), + CH_MAX, (long)(CH_MAX * sizeof(rb_dlink_list))); sendto_one_numeric(source_p, RPL_STATSDEBUG, "z :linebuf %ld(%ld)", @@ -360,7 +320,7 @@ count_memory(struct Client *source_p) sendto_one_numeric(source_p, RPL_STATSDEBUG, "z :hostname hash %d(%ld)", - HOST_MAX, (long)HOST_MAX * sizeof(dlink_list)); + HOST_MAX, (long)HOST_MAX * sizeof(rb_dlink_list)); total_memory = totww + total_channel_memory + conf_memory + class_count * sizeof(struct Class);