]> jfr.im git - irc/quakenet/newserv.git/commitdiff
irc stats hook
authorPaul <redacted>
Fri, 16 May 2008 17:29:29 +0000 (18:29 +0100)
committerPaul <redacted>
Fri, 16 May 2008 17:29:29 +0000 (18:29 +0100)
irc/irc.c

index 250b0ac5f80031fc97f644298fb6673848c3097b..f4b19735db3b2c1f300985190dc920b52b056e1d 100644 (file)
--- a/irc/irc.c
+++ b/irc/irc.c
@@ -11,6 +11,7 @@
 #include "../lib/base64.h"
 #include "../lib/splitline.h"
 #include "../lib/version.h"
+#include "../lib/irc_string.h"
 #include <sys/poll.h>
 #include <sys/types.h>
 #include <sys/socket.h>
@@ -31,6 +32,7 @@ MODULE_VERSION("");
 #define MAX_NUMERIC          999
 
 void irc_connect(void *arg);
+void ircstats(int hooknum, void *arg);
 
 CommandTree *servercommands;
 Command *numericcommands[MAX_NUMERIC-MIN_NUMERIC];
@@ -70,6 +72,8 @@ void _init() {
   registerserverhandler("SE",&handlesettime,1);
   registerserverhandler("Z",&handlepingreply,1);
   registerserverhandler("SERVER",&irc_handleserver,8);
+
+  registerhook(HOOK_CORE_STATSREQUEST,&ircstats);
 }
 
 void _fini() {
@@ -82,6 +86,8 @@ void _fini() {
   deregisterserverhandler("SE",&handlesettime);
   deregisterserverhandler("Z",&handlepingreply);
   deregisterserverhandler("SERVER",&irc_handleserver);
+
+  deregisterhook(HOOK_CORE_STATSREQUEST,&ircstats);
  
   deleteschedule(NULL,&sendping,NULL);
   deleteschedule(NULL,&irc_connect,NULL);
@@ -449,3 +455,16 @@ int handlepingreply(void *sender, int cargc, char **cargv) {
   awaitingping=0;
   return CMD_OK;
 }
+
+
+void ircstats(int hooknum, void *arg) {
+  long level=(long)arg;
+  char buf[100];
+
+  if (level>5) {
+    sprintf(buf,"irc     : start time %lu (running %s)", starttime,longtoduration(time(NULL)-starttime,0));
+    triggerhook(HOOK_CORE_STATSREPLY,buf);
+    sprintf(buf,"Time    : %lu (current time is %lu, offset %ld)",getnettime(),time(NULL),timeoffset);
+    triggerhook(HOOK_CORE_STATSREPLY,buf);
+  }
+}