Blame


1 f0f4401f 2004-04-23 devnull #include <u.h>
2 f0f4401f 2004-04-23 devnull #include <libc.h>
3 f0f4401f 2004-04-23 devnull #include <bio.h>
4 f0f4401f 2004-04-23 devnull #include "dat.h"
5 f0f4401f 2004-04-23 devnull
6 f0f4401f 2004-04-23 devnull void xapm(int);
7 f0f4401f 2004-04-23 devnull void xloadavg(int);
8 f0f4401f 2004-04-23 devnull void xmeminfo(int);
9 f0f4401f 2004-04-23 devnull void xnet(int);
10 f0f4401f 2004-04-23 devnull void xstat(int);
11 f0f4401f 2004-04-23 devnull
12 f0f4401f 2004-04-23 devnull void (*statfn[])(int) =
13 f0f4401f 2004-04-23 devnull {
14 f0f4401f 2004-04-23 devnull xapm,
15 f0f4401f 2004-04-23 devnull xloadavg,
16 f0f4401f 2004-04-23 devnull xmeminfo,
17 f0f4401f 2004-04-23 devnull xnet,
18 f0f4401f 2004-04-23 devnull xstat,
19 f0f4401f 2004-04-23 devnull 0
20 f0f4401f 2004-04-23 devnull };
21 f0f4401f 2004-04-23 devnull
22 f0f4401f 2004-04-23 devnull void
23 f0f4401f 2004-04-23 devnull xapm(int first)
24 f0f4401f 2004-04-23 devnull {
25 f0f4401f 2004-04-23 devnull static int fd = -1;
26 f0f4401f 2004-04-23 devnull
27 f0f4401f 2004-04-23 devnull if(first){
28 f0f4401f 2004-04-23 devnull fd = open("/proc/apm", OREAD);
29 f0f4401f 2004-04-23 devnull return;
30 f0f4401f 2004-04-23 devnull }
31 f0f4401f 2004-04-23 devnull readfile(fd);
32 f0f4401f 2004-04-23 devnull tokens(0);
33 f0f4401f 2004-04-23 devnull if(ntok >= 7 && atoi(tok[6]) != -1)
34 f0f4401f 2004-04-23 devnull Bprint(&bout, "battery =%d 100\n", atoi(tok[6]));
35 f0f4401f 2004-04-23 devnull }
36 f0f4401f 2004-04-23 devnull
37 f0f4401f 2004-04-23 devnull void
38 f0f4401f 2004-04-23 devnull xloadavg(int first)
39 f0f4401f 2004-04-23 devnull {
40 f0f4401f 2004-04-23 devnull static int fd = -1;
41 f0f4401f 2004-04-23 devnull
42 f0f4401f 2004-04-23 devnull if(first){
43 f0f4401f 2004-04-23 devnull fd = open("/proc/loadavg", OREAD);
44 f0f4401f 2004-04-23 devnull return;
45 f0f4401f 2004-04-23 devnull }
46 f0f4401f 2004-04-23 devnull
47 f0f4401f 2004-04-23 devnull readfile(fd);
48 f0f4401f 2004-04-23 devnull tokens(0);
49 f0f4401f 2004-04-23 devnull if(ntok >= 1)
50 f0f4401f 2004-04-23 devnull Bprint(&bout, "load =%d 1000\n", (int)(atof(tok[0])*1000));
51 f0f4401f 2004-04-23 devnull }
52 f0f4401f 2004-04-23 devnull
53 f0f4401f 2004-04-23 devnull void
54 f0f4401f 2004-04-23 devnull xmeminfo(int first)
55 f0f4401f 2004-04-23 devnull {
56 f0f4401f 2004-04-23 devnull int i;
57 f0f4401f 2004-04-23 devnull vlong tot, used;
58 78802e69 2004-04-24 devnull vlong mtot, mfree;
59 f0f4401f 2004-04-23 devnull static int fd = -1;
60 f0f4401f 2004-04-23 devnull
61 f0f4401f 2004-04-23 devnull if(first){
62 f0f4401f 2004-04-23 devnull fd = open("/proc/meminfo", OREAD);
63 f0f4401f 2004-04-23 devnull return;
64 f0f4401f 2004-04-23 devnull }
65 f0f4401f 2004-04-23 devnull
66 f0f4401f 2004-04-23 devnull readfile(fd);
67 78802e69 2004-04-24 devnull mtot = 0;
68 f0f4401f 2004-04-23 devnull for(i=0; i<nline; i++){
69 f0f4401f 2004-04-23 devnull tokens(i);
70 78802e69 2004-04-24 devnull if(ntok < 3)
71 f0f4401f 2004-04-23 devnull continue;
72 f0f4401f 2004-04-23 devnull tot = atoll(tok[1]);
73 f0f4401f 2004-04-23 devnull used = atoll(tok[2]);
74 f0f4401f 2004-04-23 devnull if(strcmp(tok[0], "Mem:") == 0)
75 f0f4401f 2004-04-23 devnull Bprint(&bout, "mem =%lld %lld\n", used/1024, tot/1024);
76 f0f4401f 2004-04-23 devnull else if(strcmp(tok[0], "Swap:") == 0)
77 f0f4401f 2004-04-23 devnull Bprint(&bout, "swap =%lld %lld\n", used/1024, tot/1024);
78 78802e69 2004-04-24 devnull else if(strcmp(tok[0], "MemTotal:") == 0)
79 78802e69 2004-04-24 devnull mtot = atoll(tok[1]); /* kb */
80 78802e69 2004-04-24 devnull else if(strcmp(tok[0], "MemFree:") == 0){
81 78802e69 2004-04-24 devnull mfree = atoll(tok[1]);
82 78802e69 2004-04-24 devnull if(mtot < mfree)
83 78802e69 2004-04-24 devnull continue;
84 78802e69 2004-04-24 devnull Bprint(&bout, "mem =%lld %lld\n", mtot-mfree, mtot);
85 78802e69 2004-04-24 devnull }
86 f0f4401f 2004-04-23 devnull }
87 f0f4401f 2004-04-23 devnull }
88 f0f4401f 2004-04-23 devnull
89 f0f4401f 2004-04-23 devnull void
90 f0f4401f 2004-04-23 devnull xnet(int first)
91 f0f4401f 2004-04-23 devnull {
92 f0f4401f 2004-04-23 devnull int i, n;
93 f0f4401f 2004-04-23 devnull vlong totb, totp, tote, totin, totou, totinb, totoub, b, p, e, in, ou, inb, oub;
94 f0f4401f 2004-04-23 devnull char *q;
95 f0f4401f 2004-04-23 devnull static int fd = -1;
96 f0f4401f 2004-04-23 devnull
97 f0f4401f 2004-04-23 devnull if(first){
98 f0f4401f 2004-04-23 devnull fd = open("/proc/net/dev", OREAD);
99 f0f4401f 2004-04-23 devnull return;
100 f0f4401f 2004-04-23 devnull }
101 f0f4401f 2004-04-23 devnull
102 f0f4401f 2004-04-23 devnull readfile(fd);
103 f0f4401f 2004-04-23 devnull n = 0;
104 f0f4401f 2004-04-23 devnull totb = 0;
105 f0f4401f 2004-04-23 devnull tote = 0;
106 f0f4401f 2004-04-23 devnull totp = 0;
107 f0f4401f 2004-04-23 devnull totin = 0;
108 f0f4401f 2004-04-23 devnull totou = 0;
109 f0f4401f 2004-04-23 devnull totinb = 0;
110 f0f4401f 2004-04-23 devnull totoub = 0;
111 f0f4401f 2004-04-23 devnull for(i=0; i<nline; i++){
112 be36ff68 2004-04-29 devnull if((q = strchr(line[i], ':')) != nil)
113 be36ff68 2004-04-29 devnull *q = ' ';
114 f0f4401f 2004-04-23 devnull tokens(i);
115 f0f4401f 2004-04-23 devnull if(ntok < 8+8)
116 f0f4401f 2004-04-23 devnull continue;
117 f0f4401f 2004-04-23 devnull if(strncmp(tok[0], "eth", 3) != 0)
118 f0f4401f 2004-04-23 devnull continue;
119 be36ff68 2004-04-29 devnull inb = atoll(tok[1]);
120 be36ff68 2004-04-29 devnull oub = atoll(tok[9]);
121 be36ff68 2004-04-29 devnull in = atoll(tok[2]);
122 be36ff68 2004-04-29 devnull ou = atoll(tok[10]);
123 f0f4401f 2004-04-23 devnull b = inb+oub;
124 f0f4401f 2004-04-23 devnull p = in+ou;
125 be36ff68 2004-04-29 devnull e = atoll(tok[3])+atoll(tok[11]);
126 f0f4401f 2004-04-23 devnull totb += b;
127 f0f4401f 2004-04-23 devnull totp += p;
128 f0f4401f 2004-04-23 devnull tote += e;
129 f0f4401f 2004-04-23 devnull totin += in;
130 f0f4401f 2004-04-23 devnull totou += ou;
131 f0f4401f 2004-04-23 devnull totinb += inb;
132 f0f4401f 2004-04-23 devnull totoub += oub;
133 f0f4401f 2004-04-23 devnull n++;
134 f0f4401f 2004-04-23 devnull }
135 f0f4401f 2004-04-23 devnull Bprint(&bout, "etherb %lld %d\n", totb, n*1000000);
136 f0f4401f 2004-04-23 devnull Bprint(&bout, "ether %lld %d\n", totp, n*1000);
137 f0f4401f 2004-04-23 devnull Bprint(&bout, "ethererr %lld %d\n", tote, n*1000);
138 f0f4401f 2004-04-23 devnull Bprint(&bout, "etherin %lld %d\n", totin, n*1000);
139 f0f4401f 2004-04-23 devnull Bprint(&bout, "etherout %lld %d\n", totou, n*1000);
140 f0f4401f 2004-04-23 devnull Bprint(&bout, "etherinb %lld %d\n", totinb, n*1000);
141 f0f4401f 2004-04-23 devnull Bprint(&bout, "etheroutb %lld %d\n", totoub, n*1000);
142 f0f4401f 2004-04-23 devnull }
143 f0f4401f 2004-04-23 devnull
144 f0f4401f 2004-04-23 devnull void
145 f0f4401f 2004-04-23 devnull xstat(int first)
146 f0f4401f 2004-04-23 devnull {
147 f0f4401f 2004-04-23 devnull static int fd = -1;
148 f0f4401f 2004-04-23 devnull int i;
149 f0f4401f 2004-04-23 devnull
150 f0f4401f 2004-04-23 devnull if(first){
151 f0f4401f 2004-04-23 devnull fd = open("/proc/stat", OREAD);
152 f0f4401f 2004-04-23 devnull return;
153 f0f4401f 2004-04-23 devnull }
154 f0f4401f 2004-04-23 devnull
155 f0f4401f 2004-04-23 devnull readfile(fd);
156 f0f4401f 2004-04-23 devnull for(i=0; i<nline; i++){
157 f0f4401f 2004-04-23 devnull tokens(i);
158 f0f4401f 2004-04-23 devnull if(ntok < 2)
159 f0f4401f 2004-04-23 devnull continue;
160 f0f4401f 2004-04-23 devnull if(strcmp(tok[0], "cpu") == 0 && ntok >= 5){
161 f0f4401f 2004-04-23 devnull Bprint(&bout, "user %lld 100\n", atoll(tok[1]));
162 f0f4401f 2004-04-23 devnull Bprint(&bout, "sys %lld 100\n", atoll(tok[3]));
163 f0f4401f 2004-04-23 devnull Bprint(&bout, "cpu %lld 100\n", atoll(tok[1])+atoll(tok[3]));
164 f0f4401f 2004-04-23 devnull Bprint(&bout, "idle %lld\n", atoll(tok[4]));
165 f0f4401f 2004-04-23 devnull }
166 f0f4401f 2004-04-23 devnull /*
167 f0f4401f 2004-04-23 devnull if(strcmp(tok[0], "page") == 0 && ntok >= 3){
168 f0f4401f 2004-04-23 devnull Bprint(&bout, "pagein %lld 500\n", atoll(tok[1]));
169 f0f4401f 2004-04-23 devnull Bprint(&bout, "pageout %lld 500\n", atoll(tok[2]));
170 f0f4401f 2004-04-23 devnull Bprint(&bout, "page %lld 1000\n", atoll(tok[1])+atoll(tok[2]));
171 f0f4401f 2004-04-23 devnull }
172 f0f4401f 2004-04-23 devnull if(strcmp(tok[0], "swap") == 0 && ntok >= 3){
173 f0f4401f 2004-04-23 devnull Bprint(&bout, "swapin %lld 500\n", atoll(tok[1]));
174 f0f4401f 2004-04-23 devnull Bprint(&bout, "swapout %lld 500\n", atoll(tok[2]));
175 f0f4401f 2004-04-23 devnull Bprint(&bout, "swap %lld 1000\n", atoll(tok[1])+atoll(tok[2]));
176 f0f4401f 2004-04-23 devnull }
177 f0f4401f 2004-04-23 devnull */
178 f0f4401f 2004-04-23 devnull if(strcmp(tok[0], "intr") == 0)
179 f0f4401f 2004-04-23 devnull Bprint(&bout, "interrupt %lld 1000\n", atoll(tok[1]));
180 f0f4401f 2004-04-23 devnull if(strcmp(tok[0], "ctxt") == 0)
181 f0f4401f 2004-04-23 devnull Bprint(&bout, "context %lld 1000\n", atoll(tok[1]));
182 f0f4401f 2004-04-23 devnull if(strcmp(tok[0], "processes") == 0)
183 f0f4401f 2004-04-23 devnull Bprint(&bout, "fork %lld 1000\n", atoll(tok[1]));
184 f0f4401f 2004-04-23 devnull }
185 f0f4401f 2004-04-23 devnull }
186 f0f4401f 2004-04-23 devnull