]> jfr.im git - irc/quakenet/newserv.git/blame - nterface/nterfacer_chanstats.c
Sigh
[irc/quakenet/newserv.git] / nterface / nterfacer_chanstats.c
CommitLineData
504f62c7
CP
1/*
2 nterfacer newserv chanstats module
3 Copyright (C) 2004 Chris Porter.
4*/
5
6#include "../chanstats/chanstats.h"
16d29ce2 7#include "../core/error.h"
87698d77 8#include "../lib/version.h"
504f62c7
CP
9
10#include "library.h"
11#include "nterfacer_control.h"
12
0a55e401 13MODULE_VERSION("$Id: nterfacer_chanstats.c 663 2006-05-16 17:27:36Z newserv $")
87698d77 14
504f62c7
CP
15int handle_chanstats(struct rline *li, int argc, char **argv);
16struct handler *hl = NULL;
17
18void _init(void) {
16d29ce2
CP
19 if(!n_node) {
20 Error("nterfacer_chanstats", ERR_ERROR, "Unable to register chanstats as nterfacer_control isn't loaded!");
21 return;
22 }
504f62c7
CP
23 hl = register_handler(n_node, "chanstats", 1, handle_chanstats);
24}
25
26void _fini(void) {
27 if(hl)
28 deregister_handler(hl);
29}
30
31int handle_chanstats(struct rline *li, int argc, char **argv) {
32 chanstats *csp;
33 chanindex *cip;
34 int i,j,k,l;
35 int tot,emp;
36 int themax;
37 float details[13];
38
39 cip=findchanindex(argv[0]);
40
41 if (cip==NULL)
42 return ri_error(li, ERR_TARGET_NOT_FOUND, "Channel not found");
43
44 csp=cip->exts[csext];
45
46 if (csp==NULL)
47 return ri_error(li, ERR_CHANSTATS_STATS_NOT_FOUND, "Stats not found");
48
49 if (uponehour==0) {
50 details[0] = -1;
51 details[1] = -1;
52 } else {
53 tot=0; emp=0;
54 for(i=0;i<SAMPLEHISTORY;i++) {
55 tot+=csp->lastsamples[i];
56 if (csp->lastsamples[i]==0) {
57 emp++;
58 }
59 }
60 details[0] = tot/SAMPLEHISTORY;
61 details[1] = emp/SAMPLEHISTORY * 100;
62
63 }
64
65 details[2] = csp->todayusers/todaysamples;
66 details[3] = ((float)(todaysamples-csp->todaysamples)/todaysamples)*100;
67 details[4] = csp->todaymax;
68
69 themax=csp->lastmax[0];
70
71 details[5] = csp->lastdays[0]/10;
72 details[6] = ((float)(lastdaysamples[0]-csp->lastdaysamples[0])/lastdaysamples[0])*100;
73 details[7] = themax;
74
75 /* 7-day average */
76 j=k=l=0;
77 for (i=0;i<7;i++) {
78 j+=csp->lastdays[i];
79 k+=csp->lastdaysamples[i];
80 l+=lastdaysamples[i];
81 if (csp->lastmax[i]>themax) {
82 themax=csp->lastmax[i];
83 }
84 }
85
86 details[8] = j/70;
87 details[9] = ((l-k)*100)/l;
88 details[10] = themax;
89
90 /* 14-day average: continuation of last loop */
91 for (;i<14;i++) {
92 j+=csp->lastdays[i];
93 k+=csp->lastdaysamples[i];
94 l+=lastdaysamples[i];
95 if (csp->lastmax[i]>themax) {
96 themax=csp->lastmax[i];
97 }
98 }
99
100 details[11] = j/140;
101 details[12] = ((l-k)*100)/l;
102 details[13] = themax;
103
104 ri_append(li, "%.1f", details[0]);
105 ri_append(li, "%.1f%%", details[1]);
106 for(j=2;j<14;) {
107 ri_append(li, "%.1f", details[j++]);
108 ri_append(li, "%.1f%%", details[j++]);
109 ri_append(li, "%d%%", details[j++]);
110 }
111
112 return ri_final(li);
113}