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