Lines 1-104
Link Here
|
1 |
# Many thanks to Alexander Leidinger <netchild@FreeBSD.org> for |
1 |
# Many thanks to Alexander Leidinger <netchild@FreeBSD.org> for |
2 |
# help and create those patches. |
2 |
# help and create those patches. |
3 |
|
3 |
|
4 |
--- libdesklets/CPU.py.orig Fri Oct 17 22:47:02 2003 |
4 |
--- libdesklets/CPU.py Thu Nov 6 14:50:47 2003 |
5 |
+++ libdesklets/CPU.py Fri Oct 17 22:53:05 2003 |
5 |
+++ libdesklets/CPU.py Sun Nov 9 01:34:27 2003 |
6 |
@@ -1,5 +1,7 @@ |
6 |
@@ -1,6 +1,8 @@ |
7 |
import polling |
7 |
import polling |
|
|
8 |
import glibtop |
8 |
|
9 |
|
9 |
+import os |
10 |
+import os |
10 |
+import libdesklets as lib |
11 |
+import libdesklets as lib |
11 |
|
12 |
|
12 |
# |
13 |
# |
13 |
# TODO: support SMP |
14 |
# TODO: support SMP |
14 |
@@ -21,8 +23,16 @@ |
15 |
@@ -35,20 +37,36 @@ |
15 |
|
|
|
16 |
self.get_load = polling.wrap(self.__poll_load, 0.2) |
17 |
|
18 |
+ platform = lib.sys.get_os() |
19 |
+ |
20 |
try: |
21 |
- fd = open("/proc/cpuinfo", "r") |
22 |
+ if platform == "FreeBSD": |
23 |
+ fd = os.popen("grep -3 CPU /var/run/dmesg.boot | head -7 | tail -4", "r") |
24 |
+ elif platform == "Linux": |
25 |
+ fd = open("/proc/cpuinfo", "r") |
26 |
+ else: |
27 |
+ print "Unknown OS, strange things may happen." |
28 |
+ return |
29 |
except IOError, e: |
30 |
import traceback; traceback.print_exc() |
31 |
print e |
32 |
@@ -40,15 +50,24 @@ |
33 |
|
16 |
|
34 |
def __poll_cpu(self): |
17 |
def __poll_cpu(self): |
35 |
|
18 |
|
36 |
- import libdesklets as lib |
19 |
- import libdesklets as lib |
37 |
+ import re |
20 |
+ import re |
38 |
arch = lib.sys.get_arch() |
21 |
|
|
|
22 |
- fd = open("/proc/cpuinfo", "r") |
39 |
+ platform = lib.sys.get_os() |
23 |
+ platform = lib.sys.get_os() |
|
|
24 |
+ |
25 |
+ if platform == "FreeBSD": |
26 |
+ fd = os.popen("grep -3 CPU /var/run/dmesg.boot | head -7 | tail -4", "r") |
27 |
+ elif platform == "Linux": |
28 |
+ fd = open("/proc/cpuinfo", "r") |
29 |
+ else: |
30 |
+ print "Unknown OS, strange things may happen." |
31 |
+ return |
32 |
lines = fd.readlines() |
33 |
fd.close() |
34 |
|
35 |
arch = lib.sys.get_arch() |
40 |
if (arch in ["i386", "i486", "i586", "i686"]): |
36 |
if (arch in ["i386", "i486", "i586", "i686"]): |
41 |
- fields = self.__lines[4].split() |
37 |
- fields = lines[4].split() |
42 |
- model_name = " ".join(fields[3:]) |
38 |
- model_name = " ".join(fields[3:]) |
43 |
- fields = self.__lines[6].split() |
39 |
- fields = lines[6].split() |
44 |
- cpu_mhz = fields[3] |
40 |
- cpu_mhz = fields[3] |
45 |
- fields = self.__lines[7].split() |
41 |
- fields = lines[7].split() |
46 |
- cpu_cache = " ".join(fields[3:5]) |
42 |
- cpu_cache = " ".join(fields[3:5]) |
47 |
+ if ("FreeBSD" == platform): |
43 |
+ if ("FreeBSD" == platform): |
48 |
+ m = re.search('^CPU: (.*) \(([0-9]+.*)-MHz [0-9]+-class CPU\)', self.__lines[0]) |
44 |
+ m = re.search('^CPU: (.*) \(([0-9]+.*)-MHz [0-9]+-class CPU\)', lines[0]) |
49 |
+ model_name = m.group(1) # or sysctl hw.model |
45 |
+ model_name = m.group(1) # or sysctl hw.model |
50 |
+ cpu_mhz = m.group(2) # or sysctl hw.clockrate |
46 |
+ cpu_mhz = m.group(2) # or sysctl hw.clockrate |
51 |
+ cpu_cache = " " # not available by default |
47 |
+ cpu_cache = " " # not available by default |
52 |
+ elif ("Linux" == platform): |
48 |
+ elif ("Linux" == platform): |
53 |
+ fields = self.__lines[4].split() |
49 |
+ fields = lines[4].split() |
54 |
+ model_name = " ".join(fields[3:]) |
50 |
+ model_name = " ".join(fields[3:]) |
55 |
+ fields = self.__lines[6].split() |
51 |
+ fields = lines[6].split() |
56 |
+ cpu_mhz = fields[3] |
52 |
+ cpu_mhz = fields[3] |
57 |
+ fields = self.__lines[7].split() |
53 |
+ fields = lines[7].split() |
58 |
+ cpu_cache = " ".join(fields[3:5]) |
54 |
+ cpu_cache = " ".join(fields[3:5]) |
59 |
+ else: |
55 |
+ else: |
60 |
+ pass |
56 |
+ pass |
61 |
|
57 |
|
62 |
elif (arch == "ppc"): |
58 |
elif (arch == "ppc"): |
63 |
fields = self.__lines[0].split() |
59 |
fields = lines[0].split() |
64 |
@@ -68,17 +87,34 @@ |
|
|
65 |
|
66 |
def __poll_load(self): |
67 |
|
68 |
- fd = open("/proc/stat", "r") |
69 |
+ platform = lib.sys.get_os() |
70 |
+ |
71 |
+ if ("FreeBSD" == platform): |
72 |
+ fd = os.popen("iostat -n 0", "r") |
73 |
+ line = 2 |
74 |
+ elif ("Linux" == platform): |
75 |
+ fd = open("/proc/stat", "r") |
76 |
+ line = 0 |
77 |
+ else: |
78 |
+ return |
79 |
data = fd.read() |
80 |
fd.close() |
81 |
|
82 |
data = data.splitlines() |
83 |
- fields = data[0].split() |
84 |
+ fields = data[line].split() |
85 |
|
86 |
- u = float(fields[1]) |
87 |
- s = float(fields[2]) |
88 |
- n = float(fields[3]) |
89 |
- i = float(fields[4]) |
90 |
+ if ("FreeBSD" == platform): |
91 |
+ u = float(fields[2]) + float(fields[3]) |
92 |
+ s = float(fields[4]) |
93 |
+ n = float(fields[5]) |
94 |
+ i = float(fields[6]) |
95 |
+ elif ("Linux" == platform): |
96 |
+ u = float(fields[1]) |
97 |
+ s = float(fields[2]) |
98 |
+ n = float(fields[3]) |
99 |
+ i = float(fields[4]) |
100 |
+ else: |
101 |
+ pass |
102 |
|
103 |
total = ((u - self.__uT) + (s - self.__sT) + (n - self.__nT) + |
104 |
(i - self.__iT)) |