]>
Commit | Line | Data |
---|---|---|
8186335d CP |
1 | #include "../nterfacer/library.h" |
2 | #include "../nterfacer/nterfacer.h" | |
3 | ||
4 | #include "graphing.h" | |
5 | ||
6 | #include <time.h> | |
7 | ||
8 | #define ERR_SERVER_NOT_MONITORED 0x01 | |
9 | #define ERR_BAD_PARAMETERS 0x02 | |
10 | #define ERR_BAD_ENTRY 0x03 | |
11 | ||
12 | int handle_servernames(struct rline *li, int argc, char **argv); | |
13 | int handle_serverdata(struct rline *li, int argc, char **argv); | |
14 | ||
15 | static struct service_node *g_node; | |
16 | ||
17 | void _init(void) { | |
18 | g_node = register_service("graphing"); | |
19 | if(!g_node) | |
20 | return; | |
21 | ||
22 | register_handler(g_node, "servernames", 0, handle_servernames); | |
23 | register_handler(g_node, "serverdata", 3, handle_serverdata); | |
24 | } | |
25 | ||
26 | void _fini(void) { | |
27 | if(g_node) | |
28 | deregister_service(g_node); | |
29 | } | |
30 | ||
31 | int handle_servernames(struct rline *li, int argc, char **argv) { | |
32 | int i; | |
33 | ||
34 | for(i=0;i<MAXSERVERS;i++) { | |
35 | if((serverlist[i].linkstate != LS_INVALID) && servermonitored(i)) { | |
36 | if(ri_append(li, "%d:%s", i, serverlist[i].name->content) == BF_OVER) | |
37 | return ri_error(li, BF_OVER, "Buffer overflow"); | |
38 | } | |
39 | } | |
40 | ||
41 | return ri_final(li); | |
42 | } | |
43 | ||
44 | int handle_serverdata(struct rline *li, int argc, char **argv) { | |
45 | int servernum = atoi(argv[0]); | |
46 | unsigned int entry = atoi(argv[1]); | |
47 | fsample_t count = atoi(argv[2]); | |
48 | time_t t = time(NULL) / GRAPHING_RESOLUTION; | |
b88719fa | 49 | int i, ret; |
8186335d CP |
50 | fsample_m *m; |
51 | ||
52 | if(!servermonitored(servernum)) | |
53 | return ri_error(li, ERR_SERVER_NOT_MONITORED, "Server not monitored"); | |
54 | ||
55 | m = servergraphs[servernum]; | |
56 | ||
57 | if(entry > m->pos) /* not inclusive as 0 is used for for the base index */ | |
58 | return ri_error(li, ERR_BAD_PARAMETERS, "Bad parameters"); | |
59 | ||
60 | for(i=0;i<count;i++) { | |
61 | fsample_t v; | |
62 | if(fsget_m(m, entry, t - m->entry[entry].freq * i, &v)) { | |
b88719fa | 63 | ret = ri_append(li, "%d", v); |
8186335d | 64 | } else { |
b88719fa | 65 | ret = ri_append(li, "-1", v); |
8186335d | 66 | } |
b88719fa CP |
67 | if(ret == BF_OVER) |
68 | return ri_error(li, BF_OVER, "Buffer overflow"); | |
8186335d CP |
69 | } |
70 | ||
71 | return ri_final(li); | |
72 | } | |
73 |