3 --- wmSMPmon.c.orig 2003-03-10 13:50:11.000000000 +0100
4 +++ wmSMPmon.c 2004-08-25 20:52:07.000000000 +0200
6 *******************************************************************************/
8 -#include <linux/sys.h>
10 #include <sys/types.h>
12 #include "wmSMPmon_master.xpm"
13 #include "wmSMPmon_mask.xbm"
14 -#include <sys/utsname.h>
15 +//#include <sys/utsname.h>
16 +#include <sys/sched.h>
17 +#include <sys/swap.h>
18 +#include <sys/sysctl.h>
25 + int mib[] = { CTL_KERN, KERN_CP_TIME };
26 + u_int64_t cpu_time[CPUSTATES];
27 + size_t size = sizeof(cpu_time);
28 + int total, used, result;
29 + static int pre_total, pre_used;
31 + if (sysctl(mib, 2, &cpu_time, &size, NULL, 0) < 0)
33 + used = cpu_time[CP_USER] + cpu_time[CP_SYS] + cpu_time[CP_NICE] + cpu_time[CP_INTR];
34 + total = used + cpu_time[CP_IDLE];
35 + if ((pre_total == 0) || !(total - pre_total > 0)) {
38 + result = 100 * (double)(used - pre_used) / (double)(total - pre_total);
47 + static int mib[] = { CTL_VM, VM_METER };
49 + size_t size = sizeof(vm);
53 + if (sysctl(mib, 2, &vm, &size, NULL, 0) < 0)
54 + bzero(&vm, sizeof(vm));
56 + per_mem = 100 * (double) vm.t_rm / (double) (vm.t_rm + vm.t_free);
57 + if (per_mem > 97) per_mem = 100;
64 + struct swapent *swap_dev;
65 + int i, sused, stotal;
69 + if ((num_swap = swapctl(SWAP_NSWAP, 0, 0)) == 0)
71 + if ((swap_dev = malloc(num_swap * sizeof(*swap_dev))) == NULL)
73 + if (swapctl(SWAP_STATS, swap_dev, num_swap) == -1)
76 + for (i = 0; i < num_swap; i++) {
77 + if (swap_dev[i].se_flags & SWF_ENABLE) {
78 + sused += swap_dev[i].se_inuse;
79 + stotal += swap_dev[i].se_nblks;
86 + return (100 * (double) sused / (double) stotal);
89 int main(int argc, char **argv)
93 - unsigned char *t = NULL,
97 unsigned int t0[TAILLE_T],
102 - unsigned long mem, prec_mem = 0, prec_swap = 0,
103 - total0o = 0, charge0o = 0,
104 - total1o = 0, charge1o = 0, cpu0o=0, cpu1o=0 ;
105 + unsigned long mem, prec_mem = 0, prec_swap = 0;
107 register unsigned long charge, total, cpu, i = 0 ;
108 @@ -107,97 +168,25 @@
111 - i = open("/proc/stat", O_RDONLY);
116 - t = strtok(NULL, "\n");
117 - u = strtok(NULL, "\n"); /* For CPU 1 */
119 - strtok(t, " "); /* CPU 0 */
120 - charge = strtol(strtok(NULL, " "), NULL, 10) +
121 - strtol(strtok(NULL, " "), NULL, 10) +
122 - strtol(strtok(NULL, " "), NULL, 10);
123 - total = charge+ strtol(strtok(NULL, " "), NULL, 10);
124 - if(!charge || !total)
129 - cpu = ((HAUTEUR * (charge - charge0o)) / (total - total0o + 0.001)) + 1 ;
131 - charge0o = charge ;
132 - cpu0t = cpu0t + cpu ;
135 - delta = HAUTEUR - cpu ;
136 - copyXPMArea(111, 0, 3, HAUTEUR, 4, 5) ;
137 - copyXPMArea(108, delta, 3, cpu, 4, 5 + delta) ;
140 - if(strncmp ("cpu1", u, 4) == 0)
142 - strtok(u, " "); /* CPU 1*/
143 - charge = strtol(strtok(NULL, " "), NULL, 10) +
144 - strtol(strtok(NULL, " "), NULL, 10) +
145 - strtol(strtok(NULL, " "), NULL, 10);
146 - total = charge+ strtol(strtok(NULL, " "), NULL, 10);
147 - cpu = ((HAUTEUR * (charge - charge1o)) / (total - total1o + 0.001)) + 1 ;
151 - cpu1t = cpu1t + cpu ;
154 - delta = HAUTEUR - cpu ;
155 - copyXPMArea(111, 0, 3, HAUTEUR, 9, 5) ;
156 - copyXPMArea(108, delta, 3, cpu, 9, 5 + delta) ;
161 - i = open("/proc/meminfo", O_RDONLY);
165 - t = strtok(NULL, "\n");
166 - u = strtok(NULL, "\n");
168 - total = atoi(strtok(NULL, " "));
169 - charge = atoi(strtok(NULL, " "));
173 - cpu = atoi(strtok(NULL, " "));
175 - mem = ((charge - cpu) / (total / 100)) ;
176 - if(mem != prec_mem)
178 - copyXPMArea(30, 63, 30, 8, 29, 39) ;
179 - copyXPMArea(0, 63, (mem * 30 / 100), 8, 29, 39) ;
185 - total = charge = 0 ;
186 - total = atoi(strtok(NULL, " "));
188 - charge = atoi(strtok(NULL, " "));
189 - if(!charge || !total)
194 - mem = 100 - (charge / (total / 100)) ;
195 - if(mem != prec_swap)
197 - copyXPMArea(30, 63, 30, 8, 29, 50) ;
198 - copyXPMArea(0, 63, (mem * 30 / 100), 8, 29, 50) ;
204 + cpu = getCpuUsage();
205 + delta = (100 - cpu) * HAUTEUR / 100;
206 + copyXPMArea(108, 0, 3, HAUTEUR, 4, 5);
207 + copyXPMArea(108, 0, 3, HAUTEUR, 9, 5);
208 + copyXPMArea(111, 0, 3, delta, 4, 5);
209 + copyXPMArea(111, 0, 3, delta, 9, 5);
211 + mem = getMemUsage();
212 + if(mem != prec_mem) {
213 + copyXPMArea(30, 63, 30, 8, 29, 39);
214 + copyXPMArea(0, 63, (mem * 30 / 100), 8, 29, 39);
218 + mem = getSwapUsage();
219 + if(mem != prec_swap) {
220 + copyXPMArea(30, 63, 30, 8, 29, 50);
221 + copyXPMArea(0, 63, (mem * 30 / 100), 8, 29, 50);
227 @@ -210,10 +199,13 @@
230 - if((t0[TAILLE_T - 1] = cpu0t / c2) > HAUTEUR)
231 +/* if((t0[TAILLE_T - 1] = cpu0t / c2) > HAUTEUR)
232 t0[TAILLE_T - 1] = HAUTEUR ;
233 if((t1[TAILLE_T - 1] = cpu1t / c2) > HAUTEUR)
234 t1[TAILLE_T - 1] = HAUTEUR ;
235 if((tm[TAILLE_T - 1] = (cpu0t + cpu1t) / (2 * c2)) > HAUTEUR)
236 - tm[TAILLE_T - 1] = HAUTEUR ;
237 + tm[TAILLE_T - 1] = HAUTEUR ;*/
238 + t0[TAILLE_T - 1] = cpu * HAUTEUR / 100;
239 + t1[TAILLE_T - 1] = cpu * HAUTEUR / 100;
240 + tm[TAILLE_T - 1] = cpu * HAUTEUR / 100;