ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/pystatgrab/_statgrab.pyx
(Generate patch)

Comparing projects/pystatgrab/_statgrab.pyx (file contents):
Revision 1.12 by tdb, Sun May 30 15:21:19 2004 UTC vs.
Revision 1.19 by tdb, Fri Jul 13 22:19:56 2007 UTC

# Line 1 | Line 1
1   #
2   # i-scream pystatgrab
3 < # http://www.i-scream.org
3 > # http://www.i-scream.org/pystatgrab/
4   # Copyright (C) 2000-2004 i-scream
5   #
6   # This program is free software; you can redistribute it and/or
# Line 21 | Line 21
21   #
22  
23   ctypedef long time_t
24 + ctypedef int pid_t
25 + ctypedef int uid_t
26 + ctypedef int gid_t
27  
28   cdef extern from "statgrab.h":
29 +    cdef extern int sg_init()
30 +    cdef extern int sg_drop_privileges()
31 +
32 +    ctypedef enum sg_error:
33 +        SG_ERROR_NONE = 0
34 +        SG_ERROR_ASPRINTF
35 +        SG_ERROR_DEVSTAT_GETDEVS
36 +        SG_ERROR_DEVSTAT_SELECTDEVS
37 +        SG_ERROR_ENOENT
38 +        SG_ERROR_GETIFADDRS
39 +        SG_ERROR_GETMNTINFO
40 +        SG_ERROR_GETPAGESIZE
41 +        SG_ERROR_KSTAT_DATA_LOOKUP
42 +        SG_ERROR_KSTAT_LOOKUP
43 +        SG_ERROR_KSTAT_OPEN
44 +        SG_ERROR_KSTAT_READ
45 +        SG_ERROR_KVM_GETSWAPINFO
46 +        SG_ERROR_KVM_OPENFILES
47 +        SG_ERROR_MALLOC
48 +        SG_ERROR_OPEN
49 +        SG_ERROR_OPENDIR
50 +        SG_ERROR_PARSE
51 +        SG_ERROR_SETEGID
52 +        SG_ERROR_SETEUID
53 +        SG_ERROR_SETMNTENT
54 +        SG_ERROR_SOCKET
55 +        SG_ERROR_SWAPCTL
56 +        SG_ERROR_SYSCONF
57 +        SG_ERROR_SYSCTL
58 +        SG_ERROR_SYSCTLBYNAME
59 +        SG_ERROR_SYSCTLNAMETOMIB
60 +        SG_ERROR_UNAME
61 +        SG_ERROR_UNSUPPORTED
62 +        SG_ERROR_XSW_VER_MISMATCH
63 +
64 +    cdef extern void sg_set_error(sg_error code, char *arg)
65 +    cdef extern void sg_set_error_with_errno(sg_error code, char *arg)
66 +    cdef extern sg_error sg_get_error()
67 +    cdef extern char *sg_get_error_arg()
68 +    cdef extern int sg_get_error_errno()
69 +    cdef extern char *sg_str_error(sg_error code)
70 +
71 +    ctypedef struct sg_host_info:
72 +        char *os_name
73 +        char *os_release
74 +        char *os_version
75 +        char *platform
76 +        char *hostname
77 +        time_t uptime
78 +
79 +    cdef extern sg_host_info *sg_get_host_info()
80 +
81      ctypedef struct sg_cpu_stats:
82          long long user
83          long long kernel
# Line 33 | Line 88 | cdef extern from "statgrab.h":
88          long long total
89          time_t systime
90  
91 +    cdef extern sg_cpu_stats *sg_get_cpu_stats()
92 +    cdef extern sg_cpu_stats *sg_get_cpu_stats_diff()
93 +
94      ctypedef struct sg_cpu_percents:
95          float user
96          float kernel
# Line 42 | Line 100 | cdef extern from "statgrab.h":
100          float nice
101          time_t time_taken
102  
103 +    cdef extern sg_cpu_percents *sg_get_cpu_percents()
104 +
105      ctypedef struct sg_mem_stats:
106          long long total
107          long long free
108          long long used
109          long long cache
110  
111 +    cdef extern sg_mem_stats *sg_get_mem_stats()
112 +
113      ctypedef struct sg_load_stats:
114          double min1
115          double min5
116          double min15
117  
118 +    cdef extern sg_load_stats *sg_get_load_stats()
119 +
120      ctypedef struct sg_user_stats:
121          char *name_list
122          int num_entries
123  
124 +    cdef extern sg_user_stats *sg_get_user_stats()
125 +
126      ctypedef struct sg_swap_stats:
127          long long total
128          long long used
129          long long free
130  
131 <    ctypedef struct sg_host_info:
66 <        char *os_name
67 <        char *os_release
68 <        char *os_version
69 <        char *platform
70 <        char *hostname
71 <        time_t uptime
131 >    cdef extern sg_swap_stats *sg_get_swap_stats()
132  
133      ctypedef struct sg_fs_stats:
134          char *device_name
# Line 80 | Line 140 | cdef extern from "statgrab.h":
140          long long total_inodes
141          long long used_inodes
142          long long free_inodes
143 +        long long avail_inodes
144 +        long long io_size
145 +        long long block_size
146 +        long long total_blocks
147 +        long long free_blocks
148 +        long long used_blocks
149 +        long long avail_blocks
150  
151 +    cdef extern sg_fs_stats *sg_get_fs_stats(int *entries)
152 +
153      ctypedef struct sg_disk_io_stats:
154          char *disk_name
155          long long read_bytes
156          long long write_bytes
157          time_t systime
158  
159 <    ctypedef struct sg_process_count:
160 <        int total
92 <        int running
93 <        int sleeping
94 <        int stopped
95 <        int zombie
159 >    cdef extern sg_disk_io_stats *sg_get_disk_io_stats(int *entries)
160 >    cdef extern sg_disk_io_stats *sg_get_disk_io_stats_diff(int *entries)
161  
162      ctypedef struct sg_network_io_stats:
163          char *interface_name
# Line 105 | Line 170 | cdef extern from "statgrab.h":
170          long long collisions
171          time_t systime
172  
173 +    cdef extern sg_network_io_stats *sg_get_network_io_stats(int *entries)
174 +    cdef extern sg_network_io_stats *sg_get_network_io_stats_diff(int *entries)
175 +
176      ctypedef enum sg_iface_duplex:
177          SG_IFACE_DUPLEX_FULL
178          SG_IFACE_DUPLEX_HALF
# Line 113 | Line 181 | cdef extern from "statgrab.h":
181      ctypedef struct sg_network_iface_stats:
182          char *interface_name
183          int speed
184 <        sg_iface_duplex dup
184 >        sg_iface_duplex duplex
185          int up
186  
187 +    cdef extern sg_network_iface_stats *sg_get_network_iface_stats(int *entries)
188 +
189      ctypedef struct sg_page_stats:
190          long long pages_pagein
191          long long pages_pageout
192          time_t systime
193  
124    cdef extern sg_cpu_stats *sg_get_cpu_stats()
125    cdef extern sg_cpu_stats *sg_get_cpu_stats_diff()
126    cdef extern sg_cpu_percents *sg_get_cpu_percents()
127    cdef extern sg_mem_stats *sg_get_mem_stats()
128    cdef extern sg_load_stats *sg_get_load_stats()
129    cdef extern sg_user_stats *sg_get_user_stats()
130    cdef extern sg_swap_stats *sg_get_swap_stats()
131    cdef extern sg_host_info *sg_get_host_info()
132    cdef extern sg_fs_stats *sg_get_fs_stats(int *entries)
133    cdef extern sg_disk_io_stats *sg_get_disk_io_stats(int *entries)
134    cdef extern sg_disk_io_stats *sg_get_disk_io_stats_diff(int *entries)
135    cdef extern sg_process_count *sg_get_process_count()
136    cdef extern sg_network_io_stats *sg_get_network_io_stats(int *entries)
137    cdef extern sg_network_io_stats *sg_get_network_io_stats_diff(int *entries)
138    cdef extern sg_network_iface_stats *sg_get_network_iface_stats(int *entries)
194      cdef extern sg_page_stats *sg_get_page_stats()
195      cdef extern sg_page_stats *sg_get_page_stats_diff()
141    cdef extern int sg_init()
142    cdef extern int sg_drop_privileges()
196  
197 +    ctypedef enum sg_process_state:
198 +        SG_PROCESS_STATE_RUNNING
199 +        SG_PROCESS_STATE_SLEEPING
200 +        SG_PROCESS_STATE_STOPPED
201 +        SG_PROCESS_STATE_ZOMBIE
202 +        SG_PROCESS_STATE_UNKNOWN
203  
204 +    ctypedef struct sg_process_stats:
205 +        char *process_name
206 +        char *proctitle
207 +        pid_t pid
208 +        pid_t parent
209 +        pid_t pgid
210 +        uid_t uid
211 +        uid_t euid
212 +        gid_t gid
213 +        gid_t egid
214 +        unsigned long long proc_size
215 +        unsigned long long proc_resident
216 +        time_t time_spent
217 +        double cpu_percent
218 +        int nice
219 +        sg_process_state state
220 +
221 +    cdef extern sg_process_stats *sg_get_process_stats(int *entries)
222 +
223 +    ctypedef struct sg_process_count:
224 +        int total
225 +        int running
226 +        int sleeping
227 +        int stopped
228 +        int zombie
229 +
230 +    cdef extern sg_process_count *sg_get_process_count()
231 +
232 +
233 + py_SG_ERROR_NONE = SG_ERROR_NONE
234 + py_SG_ERROR_ASPRINTF = SG_ERROR_ASPRINTF
235 + py_SG_ERROR_DEVSTAT_GETDEVS = SG_ERROR_DEVSTAT_GETDEVS
236 + py_SG_ERROR_DEVSTAT_SELECTDEVS = SG_ERROR_DEVSTAT_SELECTDEVS
237 + py_SG_ERROR_ENOENT = SG_ERROR_ENOENT
238 + py_SG_ERROR_GETIFADDRS = SG_ERROR_GETIFADDRS
239 + py_SG_ERROR_GETMNTINFO = SG_ERROR_GETMNTINFO
240 + py_SG_ERROR_GETPAGESIZE = SG_ERROR_GETPAGESIZE
241 + py_SG_ERROR_KSTAT_DATA_LOOKUP = SG_ERROR_KSTAT_DATA_LOOKUP
242 + py_SG_ERROR_KSTAT_LOOKUP = SG_ERROR_KSTAT_LOOKUP
243 + py_SG_ERROR_KSTAT_OPEN = SG_ERROR_KSTAT_OPEN
244 + py_SG_ERROR_KSTAT_READ = SG_ERROR_KSTAT_READ
245 + py_SG_ERROR_KVM_GETSWAPINFO = SG_ERROR_KVM_GETSWAPINFO
246 + py_SG_ERROR_KVM_OPENFILES = SG_ERROR_KVM_OPENFILES
247 + py_SG_ERROR_MALLOC = SG_ERROR_MALLOC
248 + py_SG_ERROR_OPEN = SG_ERROR_OPEN
249 + py_SG_ERROR_OPENDIR = SG_ERROR_OPENDIR
250 + py_SG_ERROR_PARSE = SG_ERROR_PARSE
251 + py_SG_ERROR_SETEGID = SG_ERROR_SETEGID
252 + py_SG_ERROR_SETEUID = SG_ERROR_SETEUID
253 + py_SG_ERROR_SETMNTENT = SG_ERROR_SETMNTENT
254 + py_SG_ERROR_SOCKET = SG_ERROR_SOCKET
255 + py_SG_ERROR_SWAPCTL = SG_ERROR_SWAPCTL
256 + py_SG_ERROR_SYSCONF = SG_ERROR_SYSCONF
257 + py_SG_ERROR_SYSCTL = SG_ERROR_SYSCTL
258 + py_SG_ERROR_SYSCTLBYNAME = SG_ERROR_SYSCTLBYNAME
259 + py_SG_ERROR_SYSCTLNAMETOMIB = SG_ERROR_SYSCTLNAMETOMIB
260 + py_SG_ERROR_UNAME = SG_ERROR_UNAME
261 + py_SG_ERROR_UNSUPPORTED = SG_ERROR_UNSUPPORTED
262 + py_SG_ERROR_XSW_VER_MISMATCH = SG_ERROR_XSW_VER_MISMATCH
263 +
264   py_SG_IFACE_DUPLEX_FULL = SG_IFACE_DUPLEX_FULL
265   py_SG_IFACE_DUPLEX_HALF = SG_IFACE_DUPLEX_HALF
266   py_SG_IFACE_DUPLEX_UNKNOWN = SG_IFACE_DUPLEX_UNKNOWN
267  
268 + py_SG_PROCESS_STATE_RUNNING = SG_PROCESS_STATE_RUNNING
269 + py_SG_PROCESS_STATE_SLEEPING = SG_PROCESS_STATE_SLEEPING
270 + py_SG_PROCESS_STATE_STOPPED = SG_PROCESS_STATE_STOPPED
271 + py_SG_PROCESS_STATE_ZOMBIE = SG_PROCESS_STATE_ZOMBIE
272 + py_SG_PROCESS_STATE_UNKNOWN = SG_PROCESS_STATE_UNKNOWN
273  
274 +
275   class Result:
276      def __init__(self, attrs):
277          self.attrs = attrs
# Line 164 | Line 289 | class StatgrabException(Exception):
289          return repr(self.value)
290  
291  
292 + def py_sg_init():
293 +    if sg_init() == 0:
294 +        return True
295 +    else:
296 +        return False
297 +
298 + def py_sg_shutdown():
299 +    if sg_shutdown() == 0:
300 +        return True
301 +    else:
302 +        return False
303 +
304 + def py_sg_snapshot():
305 +    if sg_snapshot() == 0:
306 +        return True
307 +    else:
308 +        return False
309 +
310 + def py_sg_drop_privileges():
311 +    if sg_drop_privileges() == 0:
312 +        return True
313 +    else:
314 +        return False
315 +
316 + def py_sg_set_error(code, arg):
317 +    sg_set_error(code, arg)
318 +
319 + def py_sg_set_error_with_errno(code, arg):
320 +    sg_set_error_with_errno(code, arg)
321 +
322 + def py_sg_get_error():
323 +    cdef sg_error s
324 +    s = sg_get_error()
325 +    return s
326 +
327 + def py_sg_get_error_arg():
328 +    s = sg_get_error_arg()
329 +    return s
330 +
331 + def py_sg_get_error_errno():
332 +    s = sg_get_error_errno()
333 +    return s
334 +
335 + def py_sg_str_error(code):
336 +    s = sg_str_error(code)
337 +    return s
338 +
339 + def py_sg_get_host_info():
340 +    cdef sg_host_info *s
341 +    s = sg_get_host_info()
342 +    if s == NULL:
343 +        raise StatgrabException, 'sg_get_host_info() returned NULL'
344 +    return Result(
345 +        {'os_name': s.os_name,
346 +         'os_release': s.os_release,
347 +         'os_version': s.os_version,
348 +         'platform': s.platform,
349 +         'hostname': s.hostname,
350 +         'uptime': s.uptime,
351 +        }
352 +    )
353 +
354   def py_sg_get_cpu_stats():
355      cdef sg_cpu_stats *s
356      s = sg_get_cpu_stats()
# Line 262 | Line 449 | def py_sg_get_swap_stats():
449          }
450      )
451  
265 def py_sg_get_host_info():
266    cdef sg_host_info *s
267    s = sg_get_host_info()
268    if s == NULL:
269        raise StatgrabException, 'sg_get_host_info() returned NULL'
270    return Result(
271        {'os_name': s.os_name,
272         'os_release': s.os_release,
273         'os_version': s.os_version,
274         'platform': s.platform,
275         'hostname': s.hostname,
276         'uptime': s.uptime,
277        }
278    )
279
452   def py_sg_get_fs_stats():
453      cdef sg_fs_stats *s
454      cdef int entries
# Line 295 | Line 467 | def py_sg_get_fs_stats():
467               'total_inodes': s.total_inodes,
468               'used_inodes': s.used_inodes,
469               'free_inodes': s.free_inodes,
470 +             'avail_inodes': s.avail_inodes,
471 +             'io_size': s.io_size,
472 +             'block_size': s.block_size,
473 +             'total_blocks': s.total_blocks,
474 +             'free_blocks': s.free_blocks,
475 +             'used_blocks': s.used_blocks,
476 +             'avail_blocks': s.avail_blocks,
477              }
478          ))
479          s = s + 1
# Line 336 | Line 515 | def py_sg_get_disk_io_stats_diff():
515          s = s + 1
516      return list
517  
339 def py_sg_get_process_count():
340    cdef sg_process_count *s
341    s = sg_get_process_count()
342    if s == NULL:
343        raise StatgrabException, 'sg_get_process_count() returned NULL'
344    return Result(
345        {'total': s.total,
346         'running': s.running,
347         'sleeping': s.sleeping,
348         'stopped': s.stopped,
349         'zombie': s.zombie,
350        }
351    )
352
518   def py_sg_get_network_io_stats():
519      cdef sg_network_io_stats *s
520      cdef int entries
# Line 407 | Line 572 | def py_sg_get_network_iface_stats():
572          list.append(Result(
573              {'interface_name': s.interface_name,
574               'speed': s.speed,
575 <             'dup': s.dup,
575 >             'duplex': s.duplex,
576               'up' : s.up,
577              }
578          ))
# Line 436 | Line 601 | def py_sg_get_page_stats_diff():
601          }
602      )
603  
604 < def py_sg_init():
605 <    if sg_init() == 0:
606 <        return True
607 <    else:
608 <        return False
604 > def py_sg_get_process_stats():
605 >    cdef sg_process_stats *s
606 >    cdef int entries
607 >    s = sg_get_process_stats(&entries)
608 >    if s == NULL:
609 >        raise StatgrabException, 'sg_get_process_stats() returned NULL'
610 >    list = []
611 >    for i from 0 <= i < entries:
612 >        if s.process_name is NULL:
613 >            process_name = ''
614 >        else:
615 >            process_name = s.process_name
616 >        if s.proctitle is NULL:
617 >            proctitle = ''
618 >        else:
619 >            proctitle = s.proctitle
620 >        list.append(Result(
621 >            {'process_name': process_name,
622 >             'proctitle' : proctitle,
623 >             'pid' : s.pid,
624 >             'parent' : s.parent,
625 >             'pgid' : s.pgid,
626 >             'uid' : s.uid,
627 >             'euid' : s.euid,
628 >             'gid' : s.gid,
629 >             'egid' : s.egid,
630 >             'proc_size' : s.proc_size,
631 >             'proc_resident' : s.proc_resident,
632 >             'time_spent' : s.time_spent,
633 >             'cpu_percent' : s.cpu_percent,
634 >             'nice' : s.nice,
635 >             'state' : s.state,
636 >            }
637 >        ))
638 >        s = s + 1
639 >    return list
640  
641 < def py_sg_drop_privileges():
642 <    if sg_drop_privileges() == 0:
643 <        return True
644 <    else:
645 <        return False
641 > def py_sg_get_process_count():
642 >    cdef sg_process_count *s
643 >    s = sg_get_process_count()
644 >    if s == NULL:
645 >        raise StatgrabException, 'sg_get_process_count() returned NULL'
646 >    return Result(
647 >        {'total': s.total,
648 >         'running': s.running,
649 >         'sleeping': s.sleeping,
650 >         'stopped': s.stopped,
651 >         'zombie': s.zombie,
652 >        }
653 >    )

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines