ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/pystatgrab/_statgrab.pyx
Revision: 1.1
Committed: Fri Feb 6 14:10:08 2004 UTC (20 years, 3 months ago) by tdb
Branch: MAIN
Log Message:
Add libstatgrab python wrapper. This won't be installed with libstatgrab,
or in fact have anything done to it - it's just there if people want it.
If it matures, I'll consider making it a package in it's own right.

File Contents

# User Rev Content
1 tdb 1.1 # TODO: return values more the python way - like os.stat
2     # deal with failures better (return nothing, or raise error?)
3    
4     ctypedef long time_t
5    
6     cdef extern from "statgrab.h":
7     ctypedef struct cpu_states_t:
8     long long user
9     long long kernel
10     long long idle
11     long long iowait
12     long long swap
13     long long nice
14     long long total
15     time_t systime
16    
17     ctypedef struct cpu_percent_t:
18     float user
19     float kernel
20     float idle
21     float iowait
22     float swap
23     float nice
24     time_t time_taken
25    
26     ctypedef struct mem_stat_t:
27     long long total
28     long long free
29     long long used
30     long long cache
31    
32     ctypedef struct load_stat_t:
33     double min1
34     double min5
35     double min15
36    
37     ctypedef struct user_stat_t:
38     char *name_list
39     int num_entries
40    
41     ctypedef struct swap_stat_t:
42     long long total
43     long long used
44     long long free
45    
46     ctypedef struct general_stat_t:
47     char *os_name
48     char *os_release
49     char *os_version
50     char *platform
51     char *hostname
52     time_t uptime
53    
54     ctypedef struct disk_stat_t:
55     char *device_name
56     char *fs_type
57     char *mnt_point
58     long long size
59     long long used
60     long long avail
61     long long total_inodes
62     long long used_inodes
63     long long free_inodes
64    
65     ctypedef struct diskio_stat_t:
66     char *disk_name
67     long long read_bytes
68     long long write_bytes
69     time_t systime
70    
71     ctypedef struct process_stat_t:
72     int total
73     int running
74     int sleeping
75     int stopped
76     int zombie
77    
78     ctypedef struct network_stat_t:
79     char *interface_name
80     long long tx
81     long long rx
82     time_t systime
83    
84     ctypedef struct page_stat_t:
85     long long pages_pagein
86     long long pages_pageout
87     time_t systime
88    
89     cdef extern cpu_states_t *get_cpu_totals()
90     cdef extern cpu_states_t *get_cpu_diff()
91     cdef extern cpu_percent_t *cpu_percent_usage()
92     cdef extern mem_stat_t *get_memory_stats()
93     cdef extern load_stat_t *get_load_stats()
94     cdef extern user_stat_t *get_user_stats()
95     cdef extern swap_stat_t *get_swap_stats()
96     cdef extern general_stat_t *get_general_stats()
97     cdef extern disk_stat_t *get_disk_stats(int *entries)
98     cdef extern diskio_stat_t *get_diskio_stats(int *entries)
99     cdef extern diskio_stat_t *get_diskio_stats_diff(int *entries)
100     cdef extern process_stat_t *get_process_stats()
101     cdef extern network_stat_t *get_network_stats(int *entries)
102     cdef extern network_stat_t *get_network_stats_diff(int *entries)
103     cdef extern page_stat_t *get_page_stats()
104     cdef extern page_stat_t *get_page_stats_diff()
105     cdef extern int statgrab_init()
106     cdef extern int statgrab_drop_privileges()
107    
108    
109     def py_get_cpu_totals():
110     cdef cpu_states_t *s
111     s = get_cpu_totals()
112     return {'user': s.user,
113     'kernel': s.kernel,
114     'idle': s.idle,
115     'iowait': s.iowait,
116     'swap': s.swap,
117     'nice': s.nice,
118     'total': s.total,
119     'systime': s.systime,
120     }
121    
122     def py_get_cpu_diff():
123     cdef cpu_states_t *s
124     s = get_cpu_diff()
125     return {'user': s.user,
126     'kernel': s.kernel,
127     'idle': s.idle,
128     'iowait': s.iowait,
129     'swap': s.swap,
130     'nice': s.nice,
131     'total': s.total,
132     'systime': s.systime,
133     }
134    
135     def py_cpu_percent_usage():
136     cdef cpu_percent_t *s
137     s = cpu_percent_usage()
138     return {'user': s.user,
139     'kernel': s.kernel,
140     'idle': s.idle,
141     'iowait': s.iowait,
142     'swap': s.swap,
143     'nice': s.nice,
144     'time_taken': s.time_taken,
145     }
146    
147     def py_get_memory_stats():
148     cdef mem_stat_t *s
149     s = get_memory_stats()
150     return {'total': s.total,
151     'used': s.used,
152     'free': s.free,
153     'cache': s.cache,
154     }
155    
156     def py_get_load_stats():
157     cdef load_stat_t *s
158     s = get_load_stats()
159     return {'min1': s.min1,
160     'min5': s.min5,
161     'min15': s.min15,
162     }
163    
164     def py_get_user_stats():
165     cdef user_stat_t *s
166     s = get_user_stats()
167     return {'name_list': s.name_list,
168     'num_entries': s.num_entries,
169     }
170    
171     def py_get_swap_stats():
172     cdef swap_stat_t *s
173     s = get_swap_stats()
174     return {'total': s.total,
175     'used': s.used,
176     'free': s.free,
177     }
178    
179     def py_get_general_stats():
180     cdef general_stat_t *s
181     s = get_general_stats()
182     return {'os_name': s.os_name,
183     'os_release': s.os_release,
184     'os_version': s.os_version,
185     'platform': s.platform,
186     'hostname': s.hostname,
187     'uptime': s.uptime,
188     }
189    
190     def py_get_disk_stats():
191     cdef disk_stat_t *s
192     cdef int entries
193     s = get_disk_stats(&entries)
194     list = [entries]
195     for i from 0 <= i < entries:
196     list.append({'device_name': s.device_name,
197     'fs_type': s.fs_type,
198     'mnt_point': s.mnt_point,
199     'size': s.size,
200     'used': s.used,
201     'avail': s.avail,
202     'total_inodes': s.total_inodes,
203     'used_inodes': s.used_inodes,
204     'free_inodes': s.free_inodes,
205     },
206     )
207     s = s + 1
208     return list
209    
210     def py_get_diskio_stats():
211     cdef diskio_stat_t *s
212     cdef int entries
213     s = get_diskio_stats(&entries)
214     list = [entries]
215     for i from 0 <= i < entries:
216     list.append({'disk_name': s.disk_name,
217     'read_bytes': s.read_bytes,
218     'write_bytes': s.write_bytes,
219     'systime': s.systime,
220     },
221     )
222     s = s + 1
223     return list
224    
225     def py_get_diskio_stats_diff():
226     cdef diskio_stat_t *s
227     cdef int entries
228     s = get_diskio_stats_diff(&entries)
229     list = [entries]
230     for i from 0 <= i < entries:
231     list.append({'disk_name': s.disk_name,
232     'read_bytes': s.read_bytes,
233     'write_bytes': s.write_bytes,
234     'systime': s.systime,
235     },
236     )
237     s = s + 1
238     return list
239    
240     def py_get_process_stats():
241     cdef process_stat_t *s
242     s = get_process_stats()
243     return {'total': s.total,
244     'running': s.running,
245     'sleeping': s.sleeping,
246     'stopped': s.stopped,
247     'zombie': s.zombie,
248     }
249    
250     def py_get_network_stats():
251     cdef network_stat_t *s
252     cdef int entries
253     s = get_network_stats(&entries)
254     list = [entries]
255     for i from 0 <= i < entries:
256     list.append({'interface_name': s.interface_name,
257     'tx': s.tx,
258     'rx': s.rx,
259     'systime': s.systime,
260     },
261     )
262     s = s + 1
263     return list
264    
265     def py_get_network_stats_diff():
266     cdef network_stat_t *s
267     cdef int entries
268     s = get_network_stats_diff(&entries)
269     list = [entries]
270     for i from 0 <= i < entries:
271     list.append({'interface_name': s.interface_name,
272     'tx': s.tx,
273     'rx': s.rx,
274     'systime': s.systime,
275     },
276     )
277     s = s + 1
278     return list
279    
280     def py_get_page_stats():
281     cdef page_stat_t *s
282     s = get_page_stats()
283     return {'pages_pagein': s.pages_pagein,
284     'pages_pageout': s.pages_pageout,
285     }
286    
287     def py_get_page_stats_diff():
288     cdef page_stat_t *s
289     s = get_page_stats_diff()
290     return {'pages_pagein': s.pages_pagein,
291     'pages_pageout': s.pages_pageout,
292     }
293    
294     def py_statgrab_init():
295     return statgrab_init()
296    
297     def py_statgrab_drop_privileges():
298     return statgrab_drop_privileges()