ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/pystatgrab/_statgrab.pyx
Revision: 1.18
Committed: Wed Sep 14 18:15:44 2005 UTC (18 years, 7 months ago) by ats
Branch: MAIN
Changes since 1.17: +11 -7 lines
Log Message:
Don't change the structure returned from sg_get_process_stats (because
that causes a segfault when libstatgrab tries to free it).

File Contents

# User Rev Content
1 tdb 1.3 #
2 tdb 1.11 # i-scream pystatgrab
3 tdb 1.15 # http://www.i-scream.org/pystatgrab/
4 tdb 1.3 # Copyright (C) 2000-2004 i-scream
5     #
6     # This program is free software; you can redistribute it and/or
7     # modify it under the terms of the GNU General Public License
8     # as published by the Free Software Foundation; either version 2
9     # of the License, or (at your option) any later version.
10     #
11     # This program is distributed in the hope that it will be useful,
12     # but WITHOUT ANY WARRANTY; without even the implied warranty of
13     # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14     # GNU General Public License for more details.
15     #
16     # You should have received a copy of the GNU General Public License
17     # along with this program; if not, write to the Free Software
18     # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19     #
20 ats 1.18 # $Id: _statgrab.pyx,v 1.17 2005/07/30 18:16:14 tdb Exp $
21 tdb 1.3 #
22 tdb 1.1
23     ctypedef long time_t
24 tdb 1.14 ctypedef int pid_t
25     ctypedef int uid_t
26     ctypedef int gid_t
27 tdb 1.1
28     cdef extern from "statgrab.h":
29 tdb 1.13 cdef extern int sg_init()
30     cdef extern int sg_drop_privileges()
31    
32 tdb 1.14 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 tdb 1.15 cdef extern void sg_set_error_with_errno(sg_error code, char *arg)
66 tdb 1.14 cdef extern sg_error sg_get_error()
67     cdef extern char *sg_get_error_arg()
68 tdb 1.15 cdef extern int sg_get_error_errno()
69 tdb 1.14 cdef extern char *sg_str_error(sg_error code)
70    
71 tdb 1.13 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 tdb 1.12 ctypedef struct sg_cpu_stats:
82 tdb 1.1 long long user
83     long long kernel
84     long long idle
85     long long iowait
86     long long swap
87     long long nice
88     long long total
89     time_t systime
90    
91 tdb 1.13 cdef extern sg_cpu_stats *sg_get_cpu_stats()
92     cdef extern sg_cpu_stats *sg_get_cpu_stats_diff()
93    
94 tdb 1.12 ctypedef struct sg_cpu_percents:
95 tdb 1.1 float user
96     float kernel
97     float idle
98     float iowait
99     float swap
100     float nice
101     time_t time_taken
102    
103 tdb 1.13 cdef extern sg_cpu_percents *sg_get_cpu_percents()
104    
105 tdb 1.12 ctypedef struct sg_mem_stats:
106 tdb 1.1 long long total
107     long long free
108     long long used
109     long long cache
110    
111 tdb 1.13 cdef extern sg_mem_stats *sg_get_mem_stats()
112    
113 tdb 1.12 ctypedef struct sg_load_stats:
114 tdb 1.1 double min1
115     double min5
116     double min15
117    
118 tdb 1.13 cdef extern sg_load_stats *sg_get_load_stats()
119    
120 tdb 1.12 ctypedef struct sg_user_stats:
121 tdb 1.1 char *name_list
122     int num_entries
123    
124 tdb 1.13 cdef extern sg_user_stats *sg_get_user_stats()
125    
126 tdb 1.12 ctypedef struct sg_swap_stats:
127 tdb 1.1 long long total
128     long long used
129     long long free
130    
131 tdb 1.13 cdef extern sg_swap_stats *sg_get_swap_stats()
132 tdb 1.1
133 tdb 1.12 ctypedef struct sg_fs_stats:
134 tdb 1.1 char *device_name
135     char *fs_type
136     char *mnt_point
137     long long size
138     long long used
139     long long avail
140     long long total_inodes
141     long long used_inodes
142     long long free_inodes
143 tdb 1.17 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 tdb 1.1
151 tdb 1.13 cdef extern sg_fs_stats *sg_get_fs_stats(int *entries)
152    
153 tdb 1.12 ctypedef struct sg_disk_io_stats:
154 tdb 1.1 char *disk_name
155     long long read_bytes
156     long long write_bytes
157     time_t systime
158    
159 tdb 1.13 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 tdb 1.1
162 tdb 1.12 ctypedef struct sg_network_io_stats:
163 tdb 1.1 char *interface_name
164     long long tx
165     long long rx
166 tdb 1.9 long long ipackets
167     long long opackets
168     long long ierrors
169     long long oerrors
170     long long collisions
171 tdb 1.1 time_t systime
172    
173 tdb 1.13 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 tdb 1.12 ctypedef enum sg_iface_duplex:
177     SG_IFACE_DUPLEX_FULL
178     SG_IFACE_DUPLEX_HALF
179     SG_IFACE_DUPLEX_UNKNOWN
180 tdb 1.5
181 tdb 1.12 ctypedef struct sg_network_iface_stats:
182 tdb 1.5 char *interface_name
183     int speed
184 tdb 1.16 sg_iface_duplex duplex
185 tdb 1.8 int up
186 tdb 1.5
187 tdb 1.13 cdef extern sg_network_iface_stats *sg_get_network_iface_stats(int *entries)
188    
189 tdb 1.12 ctypedef struct sg_page_stats:
190 tdb 1.1 long long pages_pagein
191     long long pages_pageout
192     time_t systime
193    
194 tdb 1.12 cdef extern sg_page_stats *sg_get_page_stats()
195     cdef extern sg_page_stats *sg_get_page_stats_diff()
196 tdb 1.13
197 tdb 1.14 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 tdb 1.13 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 tdb 1.12
232    
233 tdb 1.14 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 tdb 1.12 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 tdb 1.1
268 tdb 1.14 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 tdb 1.1
275 tdb 1.2 class Result:
276     def __init__(self, attrs):
277     self.attrs = attrs
278     for attr in attrs:
279     setattr(self, attr, attrs[attr])
280     def __getitem__(self, item):
281     return getattr(self, item)
282     def __repr__(self):
283     return str(self.attrs)
284    
285 tdb 1.4 class StatgrabException(Exception):
286 tdb 1.3 def __init__(self, value):
287     self.value = value
288     def __str__(self):
289     return repr(self.value)
290    
291 tdb 1.2
292 tdb 1.13 def py_sg_init():
293     if sg_init() == 0:
294     return True
295     else:
296     return False
297    
298     def py_sg_drop_privileges():
299     if sg_drop_privileges() == 0:
300     return True
301     else:
302     return False
303    
304 tdb 1.14 def py_sg_set_error(code, arg):
305     sg_set_error(code, arg)
306    
307 tdb 1.15 def py_sg_set_error_with_errno(code, arg):
308     sg_set_error_with_errno(code, arg)
309    
310 tdb 1.14 def py_sg_get_error():
311     cdef sg_error s
312     s = sg_get_error()
313     return s
314    
315     def py_sg_get_error_arg():
316     s = sg_get_error_arg()
317 tdb 1.15 return s
318    
319     def py_sg_get_error_errno():
320     s = sg_get_error_errno()
321 tdb 1.14 return s
322    
323     def py_sg_str_error(code):
324     s = sg_str_error(code)
325     return s
326    
327 tdb 1.13 def py_sg_get_host_info():
328     cdef sg_host_info *s
329     s = sg_get_host_info()
330     if s == NULL:
331     raise StatgrabException, 'sg_get_host_info() returned NULL'
332     return Result(
333     {'os_name': s.os_name,
334     'os_release': s.os_release,
335     'os_version': s.os_version,
336     'platform': s.platform,
337     'hostname': s.hostname,
338     'uptime': s.uptime,
339     }
340     )
341    
342 tdb 1.12 def py_sg_get_cpu_stats():
343     cdef sg_cpu_stats *s
344     s = sg_get_cpu_stats()
345 tdb 1.3 if s == NULL:
346 tdb 1.12 raise StatgrabException, 'sg_get_cpu_stats() returned NULL'
347 tdb 1.2 return Result(
348     {'user': s.user,
349     'kernel': s.kernel,
350     'idle': s.idle,
351     'iowait': s.iowait,
352     'swap': s.swap,
353     'nice': s.nice,
354     'total': s.total,
355     'systime': s.systime,
356     }
357     )
358 tdb 1.1
359 tdb 1.12 def py_sg_get_cpu_stats_diff():
360     cdef sg_cpu_stats *s
361     s = sg_get_cpu_stats_diff()
362 tdb 1.3 if s == NULL:
363 tdb 1.12 raise StatgrabException, 'sg_get_cpu_stats_diff() returned NULL'
364 tdb 1.2 return Result(
365     {'user': s.user,
366     'kernel': s.kernel,
367     'idle': s.idle,
368     'iowait': s.iowait,
369     'swap': s.swap,
370     'nice': s.nice,
371     'total': s.total,
372     'systime': s.systime,
373     }
374     )
375 tdb 1.1
376 tdb 1.12 def py_sg_get_cpu_percents():
377     cdef sg_cpu_percents *s
378     s = sg_get_cpu_percents()
379 tdb 1.3 if s == NULL:
380 tdb 1.12 raise StatgrabException, 'sg_get_cpu_percents() returned NULL'
381 tdb 1.2 return Result(
382     {'user': s.user,
383     'kernel': s.kernel,
384     'idle': s.idle,
385     'iowait': s.iowait,
386     'swap': s.swap,
387     'nice': s.nice,
388     'time_taken': s.time_taken,
389     }
390     )
391 tdb 1.1
392 tdb 1.12 def py_sg_get_mem_stats():
393     cdef sg_mem_stats *s
394     s = sg_get_mem_stats()
395 tdb 1.3 if s == NULL:
396 tdb 1.12 raise StatgrabException, 'sg_get_mem_stats() returned NULL'
397 tdb 1.2 return Result(
398     {'total': s.total,
399     'used': s.used,
400     'free': s.free,
401     'cache': s.cache,
402     }
403     )
404 tdb 1.1
405 tdb 1.12 def py_sg_get_load_stats():
406     cdef sg_load_stats *s
407     s = sg_get_load_stats()
408 tdb 1.3 if s == NULL:
409 tdb 1.12 raise StatgrabException, 'sg_get_load_stats() returned NULL'
410 tdb 1.2 return Result(
411     {'min1': s.min1,
412     'min5': s.min5,
413     'min15': s.min15,
414     }
415     )
416 tdb 1.1
417 tdb 1.12 def py_sg_get_user_stats():
418     cdef sg_user_stats *s
419     s = sg_get_user_stats()
420 tdb 1.3 if s == NULL:
421 tdb 1.12 raise StatgrabException, 'sg_get_user_stats() returned NULL'
422 tdb 1.2 return Result(
423     {'name_list': s.name_list,
424     'num_entries': s.num_entries,
425     }
426     )
427 tdb 1.1
428 tdb 1.12 def py_sg_get_swap_stats():
429     cdef sg_swap_stats *s
430     s = sg_get_swap_stats()
431 tdb 1.3 if s == NULL:
432 tdb 1.12 raise StatgrabException, 'sg_get_swap_stats() returned NULL'
433 tdb 1.2 return Result(
434     {'total': s.total,
435     'used': s.used,
436     'free': s.free,
437     }
438     )
439 tdb 1.1
440 tdb 1.12 def py_sg_get_fs_stats():
441     cdef sg_fs_stats *s
442 tdb 1.1 cdef int entries
443 tdb 1.12 s = sg_get_fs_stats(&entries)
444 tdb 1.3 if s == NULL:
445 tdb 1.12 raise StatgrabException, 'sg_get_fs_stats() returned NULL'
446 tdb 1.6 list = []
447 tdb 1.1 for i from 0 <= i < entries:
448 tdb 1.2 list.append(Result(
449     {'device_name': s.device_name,
450     'fs_type': s.fs_type,
451     'mnt_point': s.mnt_point,
452     'size': s.size,
453     'used': s.used,
454     'avail': s.avail,
455     'total_inodes': s.total_inodes,
456     'used_inodes': s.used_inodes,
457     'free_inodes': s.free_inodes,
458 tdb 1.17 'avail_inodes': s.avail_inodes,
459     'io_size': s.io_size,
460     'block_size': s.block_size,
461     'total_blocks': s.total_blocks,
462     'free_blocks': s.free_blocks,
463     'used_blocks': s.used_blocks,
464     'avail_blocks': s.avail_blocks,
465 tdb 1.2 }
466     ))
467 tdb 1.1 s = s + 1
468     return list
469    
470 tdb 1.12 def py_sg_get_disk_io_stats():
471     cdef sg_disk_io_stats *s
472 tdb 1.1 cdef int entries
473 tdb 1.12 s = sg_get_disk_io_stats(&entries)
474 tdb 1.3 if s == NULL:
475 tdb 1.12 raise StatgrabException, 'sg_get_disk_io_stats() returned NULL'
476 tdb 1.6 list = []
477 tdb 1.1 for i from 0 <= i < entries:
478 tdb 1.2 list.append(Result(
479     {'disk_name': s.disk_name,
480     'read_bytes': s.read_bytes,
481     'write_bytes': s.write_bytes,
482     'systime': s.systime,
483     }
484     ))
485 tdb 1.1 s = s + 1
486     return list
487    
488 tdb 1.12 def py_sg_get_disk_io_stats_diff():
489     cdef sg_disk_io_stats *s
490 tdb 1.1 cdef int entries
491 tdb 1.12 s = sg_get_disk_io_stats_diff(&entries)
492 tdb 1.3 if s == NULL:
493 tdb 1.12 raise StatgrabException, 'sg_get_disk_io_stats_diff() returned NULL'
494 tdb 1.6 list = []
495 tdb 1.1 for i from 0 <= i < entries:
496 tdb 1.2 list.append(Result(
497     {'disk_name': s.disk_name,
498     'read_bytes': s.read_bytes,
499     'write_bytes': s.write_bytes,
500     'systime': s.systime,
501     }
502     ))
503 tdb 1.1 s = s + 1
504     return list
505    
506 tdb 1.12 def py_sg_get_network_io_stats():
507     cdef sg_network_io_stats *s
508 tdb 1.1 cdef int entries
509 tdb 1.12 s = sg_get_network_io_stats(&entries)
510 tdb 1.3 if s == NULL:
511 tdb 1.12 raise StatgrabException, 'sg_get_network_io_stats() returned NULL'
512 tdb 1.6 list = []
513 tdb 1.1 for i from 0 <= i < entries:
514 tdb 1.2 list.append(Result(
515     {'interface_name': s.interface_name,
516     'tx': s.tx,
517     'rx': s.rx,
518 tdb 1.9 'ipackets': s.ipackets,
519     'opackets': s.opackets,
520     'ierrors': s.ierrors,
521     'oerrors': s.oerrors,
522     'collisions': s.collisions,
523 tdb 1.2 'systime': s.systime,
524     }
525     ))
526 tdb 1.1 s = s + 1
527     return list
528    
529 tdb 1.12 def py_sg_get_network_io_stats_diff():
530     cdef sg_network_io_stats *s
531 tdb 1.1 cdef int entries
532 tdb 1.12 s = sg_get_network_io_stats_diff(&entries)
533 tdb 1.3 if s == NULL:
534 tdb 1.12 raise StatgrabException, 'sg_get_network_io_stats_diff() returned NULL'
535 tdb 1.6 list = []
536 tdb 1.1 for i from 0 <= i < entries:
537 tdb 1.2 list.append(Result(
538     {'interface_name': s.interface_name,
539     'tx': s.tx,
540     'rx': s.rx,
541 tdb 1.9 'ipackets': s.ipackets,
542     'opackets': s.opackets,
543     'ierrors': s.ierrors,
544     'oerrors': s.oerrors,
545     'collisions': s.collisions,
546 tdb 1.2 'systime': s.systime,
547 tdb 1.5 }
548     ))
549     s = s + 1
550     return list
551    
552 tdb 1.12 def py_sg_get_network_iface_stats():
553     cdef sg_network_iface_stats *s
554 tdb 1.5 cdef int entries
555 tdb 1.12 s = sg_get_network_iface_stats(&entries)
556 tdb 1.5 if s == NULL:
557 tdb 1.12 raise StatgrabException, 'sg_get_network_iface_stats() returned NULL'
558 tdb 1.6 list = []
559 tdb 1.5 for i from 0 <= i < entries:
560     list.append(Result(
561     {'interface_name': s.interface_name,
562     'speed': s.speed,
563 tdb 1.16 'duplex': s.duplex,
564 tdb 1.8 'up' : s.up,
565 tdb 1.2 }
566     ))
567 tdb 1.1 s = s + 1
568     return list
569    
570 tdb 1.12 def py_sg_get_page_stats():
571     cdef sg_page_stats *s
572     s = sg_get_page_stats()
573 tdb 1.3 if s == NULL:
574 tdb 1.12 raise StatgrabException, 'sg_get_page_stats() returned NULL'
575 tdb 1.2 return Result(
576     {'pages_pagein': s.pages_pagein,
577     'pages_pageout': s.pages_pageout,
578     }
579     )
580 tdb 1.1
581 tdb 1.12 def py_sg_get_page_stats_diff():
582     cdef sg_page_stats *s
583     s = sg_get_page_stats_diff()
584 tdb 1.3 if s == NULL:
585 tdb 1.12 raise StatgrabException, 'sg_get_page_stats_diff() returned NULL'
586 tdb 1.2 return Result(
587     {'pages_pagein': s.pages_pagein,
588     'pages_pageout': s.pages_pageout,
589     }
590     )
591 tdb 1.14
592     def py_sg_get_process_stats():
593     cdef sg_process_stats *s
594     cdef int entries
595     s = sg_get_process_stats(&entries)
596     if s == NULL:
597     raise StatgrabException, 'sg_get_process_stats() returned NULL'
598     list = []
599     for i from 0 <= i < entries:
600 ats 1.18 if s.process_name is NULL:
601     process_name = ''
602     else:
603     process_name = s.process_name
604     if s.proctitle is NULL:
605     proctitle = ''
606     else:
607     proctitle = s.proctitle
608 tdb 1.14 list.append(Result(
609 ats 1.18 {'process_name': process_name,
610     'proctitle' : proctitle,
611 tdb 1.14 'pid' : s.pid,
612     'parent' : s.parent,
613     'pgid' : s.pgid,
614     'uid' : s.uid,
615     'euid' : s.euid,
616     'gid' : s.gid,
617     'egid' : s.egid,
618     'proc_size' : s.proc_size,
619     'proc_resident' : s.proc_resident,
620     'time_spent' : s.time_spent,
621     'cpu_percent' : s.cpu_percent,
622     'nice' : s.nice,
623     'state' : s.state,
624     }
625     ))
626     s = s + 1
627     return list
628 tdb 1.1
629 tdb 1.13 def py_sg_get_process_count():
630     cdef sg_process_count *s
631     s = sg_get_process_count()
632     if s == NULL:
633     raise StatgrabException, 'sg_get_process_count() returned NULL'
634     return Result(
635     {'total': s.total,
636     'running': s.running,
637     'sleeping': s.sleeping,
638     'stopped': s.stopped,
639     'zombie': s.zombie,
640     }
641     )