X-Git-Url: https://jfr.im/git/irc/quakenet/newserv.git/blobdiff_plain/ad740380e68eca0756c5b869d3e013fb1acc7824..7b002e5b96427a4c859acf0f51f75e0cbb453b37:/chanserv/chanserv.c diff --git a/chanserv/chanserv.c b/chanserv/chanserv.c index 09bcd425..08ad07bd 100644 --- a/chanserv/chanserv.c +++ b/chanserv/chanserv.c @@ -20,6 +20,7 @@ sstring *cs_quitreason; void chanservfreestuff(); void chanservfinishinit(int hooknum, void *arg); +static void cs_hourlyfunc(void *arg); DBModuleIdentifier q9dbid; @@ -83,6 +84,7 @@ void chanservfinishinit(int hooknum, void *arg) { /* Schedule the dumps */ schedulerecurring(time(NULL)+DUMPINTERVAL,0,DUMPINTERVAL,chanservdumpstuff,NULL); + schedulerecurring(time(NULL)+5,0,5,csdb_flushchannelcounters,NULL); chanserv_init_status = CS_INIT_NOUSER; @@ -117,16 +119,24 @@ void chanserv_finalinit() { chanserv_init_status = CS_INIT_READY; triggerhook(HOOK_CHANSERV_RUNNING, NULL); + + /* run every 60 minutes, first one 5 minutes after start */ + schedulerecurring(time(NULL)+60*5,0,3600,cs_hourlyfunc,NULL); + Error("chanserv",ERR_INFO,"Ready to roll."); } void _fini() { + csdb_flushchannelcounters(NULL); + dbfreeid(q9dbid); + deleteallschedules(cs_hourlyfunc); deleteallschedules(cs_timerfunc); deleteallschedules(chanservreguser); deleteallschedules(chanservdumpstuff); deleteallschedules(chanservdgline); + deleteallschedules(csdb_flushchannelcounters); if (chanservext>-1 && chanservnext>-1 && chanservaext>-1) { int i; @@ -181,3 +191,33 @@ void _fini() { cs_closelog(); } + +static void cs_hourlyfunc(void *arg) { + int i, total = 0, touched = 0, toorecent = 0; + chanindex *cip, *ncip; + regchan *rcp; + time_t t = time(NULL); + + for (i=0;inext; + if (!(rcp=cip->exts[chanservext])) + continue; + + total++; + + if(cip->channel && cs_ischannelactive(cip->channel, rcp)) { + rcp->lastactive = t; + if (rcp->lastcountersync < (t - COUNTERSYNCINTERVAL)) { + csdb_updatechannelcounters(rcp); + rcp->lastcountersync=t; + touched++; + } else { + toorecent++; + } + } + + } + } + cs_log(NULL,"hourly update active completed, %d seen, %d touched, %d too recent to update.",total,touched,toorecent); +}