X-Git-Url: https://jfr.im/git/irc/quakenet/newserv.git/blobdiff_plain/cf7ac0498e16225bd806871da7e6c63fc699a6f8..3cb05e5640b4a5dd4e8d078aff0fc1dbae87544c:/chanserv/chanserv.c?ds=sidebyside diff --git a/chanserv/chanserv.c b/chanserv/chanserv.c index 09bcd425..f8cc9bc1 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; @@ -117,12 +118,17 @@ 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() { dbfreeid(q9dbid); + deleteallschedules(cs_hourlyfunc); deleteallschedules(cs_timerfunc); deleteallschedules(chanservreguser); deleteallschedules(chanservdumpstuff); @@ -181,3 +187,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); +}