--- projects/libstatgrab/src/libstatgrab/statgrab.h 2004/03/28 18:07:30 1.30 +++ projects/libstatgrab/src/libstatgrab/statgrab.h 2010/10/03 18:35:58 1.59 @@ -1,5 +1,5 @@ /* - * i-scream central monitoring system + * i-scream libstatgrab * http://www.i-scream.org * Copyright (C) 2000-2004 i-scream * @@ -18,93 +18,185 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA * 02111-1307 USA * - * $Id: statgrab.h,v 1.30 2004/03/28 18:07:30 pajs Exp $ + * $Id: statgrab.h,v 1.59 2010/10/03 18:35:58 tdb Exp $ */ +#ifndef STATGRAB_H +#define STATGRAB_H + +#ifdef __cplusplus +extern "C" { +#endif + #include -typedef struct{ - long long user; - long long kernel; - long long idle; - long long iowait; - long long swap; - long long nice; - long long total; - time_t systime; -}cpu_states_t; +/* FIXME typedefs for 32/64-bit types */ +/* FIXME maybe tidy up field names? */ +/* FIXME comments for less obvious fields */ -typedef struct{ - float user; - float kernel; - float idle; - float iowait; - float swap; - float nice; +int sg_init(void); +int sg_snapshot(); +int sg_shutdown(); +int sg_drop_privileges(void); + +typedef enum { + SG_ERROR_NONE = 0, + SG_ERROR_ASPRINTF, + SG_ERROR_DEVICES, + SG_ERROR_DEVSTAT_GETDEVS, + SG_ERROR_DEVSTAT_SELECTDEVS, + SG_ERROR_DISKINFO, + SG_ERROR_ENOENT, + SG_ERROR_GETIFADDRS, + SG_ERROR_GETMNTINFO, + SG_ERROR_GETPAGESIZE, + SG_ERROR_HOST, + SG_ERROR_KSTAT_DATA_LOOKUP, + SG_ERROR_KSTAT_LOOKUP, + SG_ERROR_KSTAT_OPEN, + SG_ERROR_KSTAT_READ, + SG_ERROR_KVM_GETSWAPINFO, + SG_ERROR_KVM_OPENFILES, + SG_ERROR_MALLOC, + SG_ERROR_MEMSTATUS, + SG_ERROR_OPEN, + SG_ERROR_OPENDIR, + SG_ERROR_PARSE, + SG_ERROR_PDHADD, + SG_ERROR_PDHCOLLECT, + SG_ERROR_PDHOPEN, + SG_ERROR_PDHREAD, + SG_ERROR_PERMISSION, + SG_ERROR_PSTAT, + SG_ERROR_SETEGID, + SG_ERROR_SETEUID, + SG_ERROR_SETMNTENT, + SG_ERROR_SOCKET, + SG_ERROR_SWAPCTL, + SG_ERROR_SYSCONF, + SG_ERROR_SYSCTL, + SG_ERROR_SYSCTLBYNAME, + SG_ERROR_SYSCTLNAMETOMIB, + SG_ERROR_UNAME, + SG_ERROR_UNSUPPORTED, + SG_ERROR_XSW_VER_MISMATCH, + SG_ERROR_GETMSG, + SG_ERROR_PUTMSG +} sg_error; + +void sg_set_error(sg_error code, const char *arg); +void sg_set_error_with_errno(sg_error code, const char *arg); +sg_error sg_get_error(); +const char *sg_get_error_arg(); +int sg_get_error_errno(); +const char *sg_str_error(sg_error code); + +typedef struct { + char *os_name; + char *os_release; + char *os_version; + char *platform; + char *hostname; + time_t uptime; +} sg_host_info; + +sg_host_info *sg_get_host_info(); + +typedef struct { + long long user; + long long kernel; + long long idle; + long long iowait; + long long swap; + long long nice; + long long total; + time_t systime; +} sg_cpu_stats; + +sg_cpu_stats *sg_get_cpu_stats(); +sg_cpu_stats *sg_get_cpu_stats_diff(); + +typedef struct { + float user; + float kernel; + float idle; + float iowait; + float swap; + float nice; time_t time_taken; -}cpu_percent_t; +} sg_cpu_percents; -typedef struct{ +sg_cpu_percents *sg_get_cpu_percents(); + +typedef struct { long long total; long long free; long long used; long long cache; -}mem_stat_t; +} sg_mem_stats; -typedef struct{ +sg_mem_stats *sg_get_mem_stats(); + +typedef struct { double min1; double min5; double min15; -}load_stat_t; +} sg_load_stats; -typedef struct{ +sg_load_stats *sg_get_load_stats(); + +typedef struct { char *name_list; int num_entries; -}user_stat_t; +} sg_user_stats; -typedef struct{ +sg_user_stats *sg_get_user_stats(); + +typedef struct { long long total; long long used; long long free; -}swap_stat_t; +} sg_swap_stats; -typedef struct{ - char *os_name; - char *os_release; - char *os_version; - char *platform; - char *hostname; - time_t uptime; -}general_stat_t; +sg_swap_stats *sg_get_swap_stats(); typedef struct { - char *device_name; + char *device_name; char *fs_type; - char *mnt_point; - long long size; - long long used; - long long avail; - long long total_inodes; + char *mnt_point; + long long size; + long long used; + long long avail; + long long total_inodes; long long used_inodes; - long long free_inodes; -}disk_stat_t; + long long free_inodes; + long long avail_inodes; + long long io_size; + long long block_size; + long long total_blocks; + long long free_blocks; + long long used_blocks; + long long avail_blocks; +} sg_fs_stats; -typedef struct{ +sg_fs_stats *sg_get_fs_stats(int *entries); + +int sg_fs_compare_device_name(const void *va, const void *vb); +int sg_fs_compare_mnt_point(const void *va, const void *vb); + +typedef struct { char *disk_name; long long read_bytes; long long write_bytes; time_t systime; -}diskio_stat_t; +} sg_disk_io_stats; -typedef struct{ - int total; - int running; - int sleeping; - int stopped; - int zombie; -}process_stat_t; +sg_disk_io_stats *sg_get_disk_io_stats(int *entries); +sg_disk_io_stats *sg_get_disk_io_stats_diff(int *entries); -typedef struct{ +int sg_disk_io_compare_name(const void *va, const void *vb); + +typedef struct { char *interface_name; long long tx; long long rx; @@ -114,35 +206,52 @@ typedef struct{ long long oerrors; long long collisions; time_t systime; -}network_stat_t; +} sg_network_io_stats; -typedef enum{ - FULL_DUPLEX, - HALF_DUPLEX, - UNKNOWN_DUPLEX -}statgrab_duplex; +sg_network_io_stats *sg_get_network_io_stats(int *entries); +sg_network_io_stats *sg_get_network_io_stats_diff(int *entries); -typedef struct{ +int sg_network_io_compare_name(const void *va, const void *vb); + +typedef enum { + SG_IFACE_DUPLEX_FULL, + SG_IFACE_DUPLEX_HALF, + SG_IFACE_DUPLEX_UNKNOWN +} sg_iface_duplex; + +typedef struct { char *interface_name; int speed; /* In megabits/sec */ - statgrab_duplex dup; + sg_iface_duplex duplex; +#ifdef SG_ENABLE_DEPRECATED + sg_iface_duplex dup; +#endif int up; -}network_iface_stat_t; +} sg_network_iface_stats; -typedef struct{ +sg_network_iface_stats *sg_get_network_iface_stats(int *entries); + +int sg_network_iface_compare_name(const void *va, const void *vb); + +typedef struct { long long pages_pagein; long long pages_pageout; time_t systime; -}page_stat_t; +} sg_page_stats; -typedef enum{ - RUNNING, - SLEEPING, - STOPPED, - ZOMBIE -}process_status; +sg_page_stats *sg_get_page_stats(); +sg_page_stats *sg_get_page_stats_diff(); -typedef struct{ +/* Recommend to add SG_PROCESS_STATE_IDLE */ +typedef enum { + SG_PROCESS_STATE_RUNNING, + SG_PROCESS_STATE_SLEEPING, + SG_PROCESS_STATE_STOPPED, + SG_PROCESS_STATE_ZOMBIE, + SG_PROCESS_STATE_UNKNOWN +} sg_process_state; + +typedef struct { char *process_name; char *proctitle; @@ -150,49 +259,54 @@ typedef struct{ pid_t parent; /* Parent pid */ pid_t pgid; /* process id of process group leader */ +/* Windows does not have uid_t or gid_t types */ +#ifndef WIN32 uid_t uid; uid_t euid; gid_t gid; gid_t egid; +#else + int uid; + int euid; + int gid; + int egid; +#endif unsigned long long proc_size; /* in bytes */ unsigned long long proc_resident; /* in bytes */ - time_t time_spent; + time_t time_spent; /* time running in seconds */ double cpu_percent; int nice; - process_status state; -}proc_state_t; + sg_process_state state; +} sg_process_stats; -int get_proc_snapshot(proc_state_t **proc_state); +sg_process_stats *sg_get_process_stats(int *entries); -cpu_states_t *get_cpu_totals(); -cpu_states_t *get_cpu_diff(); -cpu_percent_t *cpu_percent_usage(); +int sg_process_compare_name(const void *va, const void *vb); +int sg_process_compare_pid(const void *va, const void *vb); +int sg_process_compare_uid(const void *va, const void *vb); +int sg_process_compare_gid(const void *va, const void *vb); +int sg_process_compare_size(const void *va, const void *vb); +int sg_process_compare_res(const void *va, const void *vb); +int sg_process_compare_cpu(const void *va, const void *vb); +int sg_process_compare_time(const void *va, const void *vb); -mem_stat_t *get_memory_stats(); +typedef struct { + int total; + int running; + int sleeping; + int stopped; + int zombie; +} sg_process_count; -load_stat_t *get_load_stats(); +sg_process_count *sg_get_process_count(); -user_stat_t *get_user_stats(); +#ifdef SG_ENABLE_DEPRECATED +#include +#endif -swap_stat_t *get_swap_stats(); +#ifdef __cplusplus +} +#endif -general_stat_t *get_general_stats(); - -disk_stat_t *get_disk_stats(int *entries); -diskio_stat_t *get_diskio_stats(int *entries); -diskio_stat_t *get_diskio_stats_diff(int *entries); - -process_stat_t *get_process_stats(); - -network_stat_t *get_network_stats(int *entries); -network_stat_t *get_network_stats_diff(int *entries); - -network_iface_stat_t *get_network_iface_stats(int *entries); - -page_stat_t *get_page_stats(); -page_stat_t *get_page_stats_diff(); - -int statgrab_init(void); -int statgrab_drop_privileges(void); - +#endif