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 3c6ab185 2009-08-08 fshahriar void xvmstat(int);
12 3c6ab185 2009-08-08 fshahriar void xwireless(int);
13 f0f4401f 2004-04-23 devnull
14 f0f4401f 2004-04-23 devnull void (*statfn[])(int) =
15 f0f4401f 2004-04-23 devnull {
16 f0f4401f 2004-04-23 devnull xapm,
17 f0f4401f 2004-04-23 devnull xloadavg,
18 f0f4401f 2004-04-23 devnull xmeminfo,
19 f0f4401f 2004-04-23 devnull xnet,
20 f0f4401f 2004-04-23 devnull xstat,
21 3c6ab185 2009-08-08 fshahriar xvmstat,
22 3c6ab185 2009-08-08 fshahriar xwireless,
23 f0f4401f 2004-04-23 devnull 0
24 f0f4401f 2004-04-23 devnull };
25 f0f4401f 2004-04-23 devnull
26 f0f4401f 2004-04-23 devnull void
27 f0f4401f 2004-04-23 devnull xapm(int first)
28 f0f4401f 2004-04-23 devnull {
29 7be768e7 2007-09-15 rsc static int fd = -1, fdb = -1;
30 7be768e7 2007-09-15 rsc int i, last = -1, curr = -1;
31 f0f4401f 2004-04-23 devnull
32 f0f4401f 2004-04-23 devnull if(first){
33 7be768e7 2007-09-15 rsc fd = open("/proc/acpi/battery/BAT0/info", OREAD);
34 7be768e7 2007-09-15 rsc fdb = open("/proc/acpi/battery/BAT0/state", OREAD);
35 f0f4401f 2004-04-23 devnull return;
36 f0f4401f 2004-04-23 devnull }
37 7be768e7 2007-09-15 rsc if(fd == -1 || fdb == -1)
38 7be768e7 2007-09-15 rsc return;
39 7be768e7 2007-09-15 rsc
40 f0f4401f 2004-04-23 devnull readfile(fd);
41 7be768e7 2007-09-15 rsc for(i=0; i<nline; i++){
42 7be768e7 2007-09-15 rsc tokens(i);
43 7be768e7 2007-09-15 rsc if(ntok < 3)
44 7be768e7 2007-09-15 rsc continue;
45 7be768e7 2007-09-15 rsc if(strcmp(tok[0], "last") == 0 && strcmp(tok[1], "full") == 0)
46 7be768e7 2007-09-15 rsc last = atoi(tok[3]);
47 7be768e7 2007-09-15 rsc }
48 7be768e7 2007-09-15 rsc readfile(fdb);
49 7be768e7 2007-09-15 rsc for(i = 0; i < nline; i++) {
50 7be768e7 2007-09-15 rsc tokens(i);
51 7be768e7 2007-09-15 rsc if(ntok < 3)
52 7be768e7 2007-09-15 rsc continue;
53 7be768e7 2007-09-15 rsc if(strcmp(tok[0], "remaining") == 0 && strcmp(tok[1], "capacity:") == 0)
54 7be768e7 2007-09-15 rsc curr = atoi(tok[2]);
55 7be768e7 2007-09-15 rsc }
56 7be768e7 2007-09-15 rsc
57 7be768e7 2007-09-15 rsc if(curr != -1 && last != -1)
58 7be768e7 2007-09-15 rsc Bprint(&bout, "battery =%d 100\n", (int)(((float)curr/(float)last)*100.0));
59 7be768e7 2007-09-15 rsc
60 f0f4401f 2004-04-23 devnull }
61 f0f4401f 2004-04-23 devnull
62 f0f4401f 2004-04-23 devnull void
63 f0f4401f 2004-04-23 devnull xloadavg(int first)
64 f0f4401f 2004-04-23 devnull {
65 f0f4401f 2004-04-23 devnull static int fd = -1;
66 f0f4401f 2004-04-23 devnull
67 f0f4401f 2004-04-23 devnull if(first){
68 f0f4401f 2004-04-23 devnull fd = open("/proc/loadavg", OREAD);
69 f0f4401f 2004-04-23 devnull return;
70 f0f4401f 2004-04-23 devnull }
71 f0f4401f 2004-04-23 devnull
72 f0f4401f 2004-04-23 devnull readfile(fd);
73 f0f4401f 2004-04-23 devnull tokens(0);
74 f0f4401f 2004-04-23 devnull if(ntok >= 1)
75 f0f4401f 2004-04-23 devnull Bprint(&bout, "load =%d 1000\n", (int)(atof(tok[0])*1000));
76 f0f4401f 2004-04-23 devnull }
77 f0f4401f 2004-04-23 devnull
78 f0f4401f 2004-04-23 devnull void
79 f0f4401f 2004-04-23 devnull xmeminfo(int first)
80 f0f4401f 2004-04-23 devnull {
81 f0f4401f 2004-04-23 devnull int i;
82 f0f4401f 2004-04-23 devnull vlong tot, used;
83 78802e69 2004-04-24 devnull vlong mtot, mfree;
84 3c6ab185 2009-08-08 fshahriar vlong stot, sfree;
85 f0f4401f 2004-04-23 devnull static int fd = -1;
86 f0f4401f 2004-04-23 devnull
87 f0f4401f 2004-04-23 devnull if(first){
88 f0f4401f 2004-04-23 devnull fd = open("/proc/meminfo", OREAD);
89 f0f4401f 2004-04-23 devnull return;
90 f0f4401f 2004-04-23 devnull }
91 f0f4401f 2004-04-23 devnull
92 f0f4401f 2004-04-23 devnull readfile(fd);
93 78802e69 2004-04-24 devnull mtot = 0;
94 3c6ab185 2009-08-08 fshahriar stot = 0;
95 3c6ab185 2009-08-08 fshahriar mfree = 0;
96 3c6ab185 2009-08-08 fshahriar sfree = 0;
97 f0f4401f 2004-04-23 devnull for(i=0; i<nline; i++){
98 f0f4401f 2004-04-23 devnull tokens(i);
99 78802e69 2004-04-24 devnull if(ntok < 3)
100 f0f4401f 2004-04-23 devnull continue;
101 f0f4401f 2004-04-23 devnull tot = atoll(tok[1]);
102 f0f4401f 2004-04-23 devnull used = atoll(tok[2]);
103 f0f4401f 2004-04-23 devnull if(strcmp(tok[0], "Mem:") == 0)
104 f0f4401f 2004-04-23 devnull Bprint(&bout, "mem =%lld %lld\n", used/1024, tot/1024);
105 f0f4401f 2004-04-23 devnull else if(strcmp(tok[0], "Swap:") == 0)
106 f0f4401f 2004-04-23 devnull Bprint(&bout, "swap =%lld %lld\n", used/1024, tot/1024);
107 78802e69 2004-04-24 devnull else if(strcmp(tok[0], "MemTotal:") == 0)
108 78802e69 2004-04-24 devnull mtot = atoll(tok[1]); /* kb */
109 3c6ab185 2009-08-08 fshahriar else if(strcmp(tok[0], "MemFree:") == 0)
110 3c6ab185 2009-08-08 fshahriar mfree += atoll(tok[1]);
111 3c6ab185 2009-08-08 fshahriar else if(strcmp(tok[0], "Buffers:") == 0)
112 3c6ab185 2009-08-08 fshahriar mfree += atoll(tok[1]);
113 3c6ab185 2009-08-08 fshahriar else if(strcmp(tok[0], "Cached:") == 0){
114 3c6ab185 2009-08-08 fshahriar mfree += atoll(tok[1]);
115 78802e69 2004-04-24 devnull if(mtot < mfree)
116 78802e69 2004-04-24 devnull continue;
117 78802e69 2004-04-24 devnull Bprint(&bout, "mem =%lld %lld\n", mtot-mfree, mtot);
118 3c6ab185 2009-08-08 fshahriar }else if(strcmp(tok[0], "SwapTotal:") == 0)
119 3c6ab185 2009-08-08 fshahriar stot = atoll(tok[1]); /* kb */
120 3c6ab185 2009-08-08 fshahriar else if(strcmp(tok[0], "SwapFree:") == 0){
121 3c6ab185 2009-08-08 fshahriar sfree = atoll(tok[1]);
122 3c6ab185 2009-08-08 fshahriar if(stot < sfree)
123 3c6ab185 2009-08-08 fshahriar continue;
124 3c6ab185 2009-08-08 fshahriar Bprint(&bout, "swap =%lld %lld\n", stot-sfree, stot);
125 78802e69 2004-04-24 devnull }
126 f0f4401f 2004-04-23 devnull }
127 f0f4401f 2004-04-23 devnull }
128 f0f4401f 2004-04-23 devnull
129 f0f4401f 2004-04-23 devnull void
130 f0f4401f 2004-04-23 devnull xnet(int first)
131 f0f4401f 2004-04-23 devnull {
132 f0f4401f 2004-04-23 devnull int i, n;
133 f0f4401f 2004-04-23 devnull vlong totb, totp, tote, totin, totou, totinb, totoub, b, p, e, in, ou, inb, oub;
134 f0f4401f 2004-04-23 devnull char *q;
135 f0f4401f 2004-04-23 devnull static int fd = -1;
136 f0f4401f 2004-04-23 devnull
137 f0f4401f 2004-04-23 devnull if(first){
138 f0f4401f 2004-04-23 devnull fd = open("/proc/net/dev", OREAD);
139 f0f4401f 2004-04-23 devnull return;
140 f0f4401f 2004-04-23 devnull }
141 f0f4401f 2004-04-23 devnull
142 f0f4401f 2004-04-23 devnull readfile(fd);
143 f0f4401f 2004-04-23 devnull n = 0;
144 f0f4401f 2004-04-23 devnull totb = 0;
145 f0f4401f 2004-04-23 devnull tote = 0;
146 f0f4401f 2004-04-23 devnull totp = 0;
147 f0f4401f 2004-04-23 devnull totin = 0;
148 f0f4401f 2004-04-23 devnull totou = 0;
149 f0f4401f 2004-04-23 devnull totinb = 0;
150 f0f4401f 2004-04-23 devnull totoub = 0;
151 f0f4401f 2004-04-23 devnull for(i=0; i<nline; i++){
152 be36ff68 2004-04-29 devnull if((q = strchr(line[i], ':')) != nil)
153 be36ff68 2004-04-29 devnull *q = ' ';
154 f0f4401f 2004-04-23 devnull tokens(i);
155 f0f4401f 2004-04-23 devnull if(ntok < 8+8)
156 f0f4401f 2004-04-23 devnull continue;
157 3c6ab185 2009-08-08 fshahriar if(strncmp(tok[0], "eth", 3) != 0 && strncmp(tok[0], "wlan", 4) != 0)
158 f0f4401f 2004-04-23 devnull continue;
159 be36ff68 2004-04-29 devnull inb = atoll(tok[1]);
160 be36ff68 2004-04-29 devnull oub = atoll(tok[9]);
161 be36ff68 2004-04-29 devnull in = atoll(tok[2]);
162 be36ff68 2004-04-29 devnull ou = atoll(tok[10]);
163 f0f4401f 2004-04-23 devnull b = inb+oub;
164 f0f4401f 2004-04-23 devnull p = in+ou;
165 be36ff68 2004-04-29 devnull e = atoll(tok[3])+atoll(tok[11]);
166 f0f4401f 2004-04-23 devnull totb += b;
167 f0f4401f 2004-04-23 devnull totp += p;
168 f0f4401f 2004-04-23 devnull tote += e;
169 f0f4401f 2004-04-23 devnull totin += in;
170 f0f4401f 2004-04-23 devnull totou += ou;
171 f0f4401f 2004-04-23 devnull totinb += inb;
172 f0f4401f 2004-04-23 devnull totoub += oub;
173 f0f4401f 2004-04-23 devnull n++;
174 f0f4401f 2004-04-23 devnull }
175 f0f4401f 2004-04-23 devnull Bprint(&bout, "etherb %lld %d\n", totb, n*1000000);
176 f0f4401f 2004-04-23 devnull Bprint(&bout, "ether %lld %d\n", totp, n*1000);
177 f0f4401f 2004-04-23 devnull Bprint(&bout, "ethererr %lld %d\n", tote, n*1000);
178 f0f4401f 2004-04-23 devnull Bprint(&bout, "etherin %lld %d\n", totin, n*1000);
179 f0f4401f 2004-04-23 devnull Bprint(&bout, "etherout %lld %d\n", totou, n*1000);
180 f0f4401f 2004-04-23 devnull Bprint(&bout, "etherinb %lld %d\n", totinb, n*1000);
181 f0f4401f 2004-04-23 devnull Bprint(&bout, "etheroutb %lld %d\n", totoub, n*1000);
182 f0f4401f 2004-04-23 devnull }
183 f0f4401f 2004-04-23 devnull
184 f0f4401f 2004-04-23 devnull void
185 f0f4401f 2004-04-23 devnull xstat(int first)
186 f0f4401f 2004-04-23 devnull {
187 f0f4401f 2004-04-23 devnull static int fd = -1;
188 f0f4401f 2004-04-23 devnull int i;
189 f0f4401f 2004-04-23 devnull
190 f0f4401f 2004-04-23 devnull if(first){
191 f0f4401f 2004-04-23 devnull fd = open("/proc/stat", OREAD);
192 f0f4401f 2004-04-23 devnull return;
193 f0f4401f 2004-04-23 devnull }
194 f0f4401f 2004-04-23 devnull
195 f0f4401f 2004-04-23 devnull readfile(fd);
196 f0f4401f 2004-04-23 devnull for(i=0; i<nline; i++){
197 f0f4401f 2004-04-23 devnull tokens(i);
198 f0f4401f 2004-04-23 devnull if(ntok < 2)
199 f0f4401f 2004-04-23 devnull continue;
200 f0f4401f 2004-04-23 devnull if(strcmp(tok[0], "cpu") == 0 && ntok >= 5){
201 f0f4401f 2004-04-23 devnull Bprint(&bout, "user %lld 100\n", atoll(tok[1]));
202 f0f4401f 2004-04-23 devnull Bprint(&bout, "sys %lld 100\n", atoll(tok[3]));
203 f0f4401f 2004-04-23 devnull Bprint(&bout, "cpu %lld 100\n", atoll(tok[1])+atoll(tok[3]));
204 3c6ab185 2009-08-08 fshahriar Bprint(&bout, "idle %lld 100\n", atoll(tok[4]));
205 f0f4401f 2004-04-23 devnull }
206 f0f4401f 2004-04-23 devnull /*
207 f0f4401f 2004-04-23 devnull if(strcmp(tok[0], "page") == 0 && ntok >= 3){
208 f0f4401f 2004-04-23 devnull Bprint(&bout, "pagein %lld 500\n", atoll(tok[1]));
209 f0f4401f 2004-04-23 devnull Bprint(&bout, "pageout %lld 500\n", atoll(tok[2]));
210 f0f4401f 2004-04-23 devnull Bprint(&bout, "page %lld 1000\n", atoll(tok[1])+atoll(tok[2]));
211 f0f4401f 2004-04-23 devnull }
212 f0f4401f 2004-04-23 devnull if(strcmp(tok[0], "swap") == 0 && ntok >= 3){
213 f0f4401f 2004-04-23 devnull Bprint(&bout, "swapin %lld 500\n", atoll(tok[1]));
214 f0f4401f 2004-04-23 devnull Bprint(&bout, "swapout %lld 500\n", atoll(tok[2]));
215 f0f4401f 2004-04-23 devnull Bprint(&bout, "swap %lld 1000\n", atoll(tok[1])+atoll(tok[2]));
216 f0f4401f 2004-04-23 devnull }
217 f0f4401f 2004-04-23 devnull */
218 f0f4401f 2004-04-23 devnull if(strcmp(tok[0], "intr") == 0)
219 3c6ab185 2009-08-08 fshahriar Bprint(&bout, "intr %lld 1000\n", atoll(tok[1]));
220 f0f4401f 2004-04-23 devnull if(strcmp(tok[0], "ctxt") == 0)
221 3c6ab185 2009-08-08 fshahriar Bprint(&bout, "context %lld 10000\n", atoll(tok[1]));
222 f0f4401f 2004-04-23 devnull if(strcmp(tok[0], "processes") == 0)
223 f0f4401f 2004-04-23 devnull Bprint(&bout, "fork %lld 1000\n", atoll(tok[1]));
224 f0f4401f 2004-04-23 devnull }
225 f0f4401f 2004-04-23 devnull }
226 f0f4401f 2004-04-23 devnull
227 3c6ab185 2009-08-08 fshahriar void
228 3c6ab185 2009-08-08 fshahriar xvmstat(int first)
229 3c6ab185 2009-08-08 fshahriar {
230 3c6ab185 2009-08-08 fshahriar static int fd = -1;
231 3c6ab185 2009-08-08 fshahriar int i;
232 3c6ab185 2009-08-08 fshahriar
233 3c6ab185 2009-08-08 fshahriar if(first){
234 3c6ab185 2009-08-08 fshahriar fd = open("/proc/vmstat", OREAD);
235 3c6ab185 2009-08-08 fshahriar return;
236 3c6ab185 2009-08-08 fshahriar }
237 3c6ab185 2009-08-08 fshahriar
238 3c6ab185 2009-08-08 fshahriar readfile(fd);
239 3c6ab185 2009-08-08 fshahriar for(i=0; i<nline; i++){
240 3c6ab185 2009-08-08 fshahriar tokens(i);
241 3c6ab185 2009-08-08 fshahriar if(ntok < 2)
242 3c6ab185 2009-08-08 fshahriar continue;
243 3c6ab185 2009-08-08 fshahriar if(strcmp(tok[0], "pgfault") == 0)
244 3c6ab185 2009-08-08 fshahriar Bprint(&bout, "fault %lld 100000\n", atoll(tok[1]));
245 3c6ab185 2009-08-08 fshahriar }
246 3c6ab185 2009-08-08 fshahriar }
247 3c6ab185 2009-08-08 fshahriar
248 3c6ab185 2009-08-08 fshahriar void
249 3c6ab185 2009-08-08 fshahriar xwireless(int first)
250 3c6ab185 2009-08-08 fshahriar {
251 3c6ab185 2009-08-08 fshahriar static int fd = -1;
252 3c6ab185 2009-08-08 fshahriar int i;
253 3c6ab185 2009-08-08 fshahriar
254 3c6ab185 2009-08-08 fshahriar if(first){
255 3c6ab185 2009-08-08 fshahriar fd = open("/proc/net/wireless", OREAD);
256 3c6ab185 2009-08-08 fshahriar return;
257 3c6ab185 2009-08-08 fshahriar }
258 3c6ab185 2009-08-08 fshahriar
259 3c6ab185 2009-08-08 fshahriar readfile(fd);
260 3c6ab185 2009-08-08 fshahriar for(i=0; i<nline; i++){
261 3c6ab185 2009-08-08 fshahriar tokens(i);
262 3c6ab185 2009-08-08 fshahriar if(ntok < 3)
263 3c6ab185 2009-08-08 fshahriar continue;
264 3c6ab185 2009-08-08 fshahriar if(strcmp(tok[0], "wlan0:") == 0)
265 3c6ab185 2009-08-08 fshahriar Bprint(&bout, "802.11 =%lld 100\n", atoll(tok[2]));
266 3c6ab185 2009-08-08 fshahriar }
267 3c6ab185 2009-08-08 fshahriar }