diff options
Diffstat (limited to 'src/include-local/s6ps.h')
-rw-r--r-- | src/include-local/s6ps.h | 202 |
1 files changed, 202 insertions, 0 deletions
diff --git a/src/include-local/s6ps.h b/src/include-local/s6ps.h new file mode 100644 index 0000000..951cc3a --- /dev/null +++ b/src/include-local/s6ps.h @@ -0,0 +1,202 @@ +/* ISC license. */ + +#ifndef S6PS_H +#define S6PS_H + +#include <sys/types.h> +#include <stdint.h> + +#include <skalibs/uint64.h> +#include <skalibs/stralloc.h> +#include <skalibs/genalloc.h> +#include <skalibs/tai.h> +#include <skalibs/avltree.h> +#include <skalibs/avltreen.h> + +typedef enum pfield_e pfield_t, *pfield_t_ref ; +enum pfield_e +{ + PFIELD_PID, + PFIELD_COMM, + PFIELD_STATE, + PFIELD_PPID, + PFIELD_PGRP, + PFIELD_SESSION, + PFIELD_TTY, + PFIELD_TPGID, + PFIELD_UTIME, + PFIELD_STIME, + PFIELD_CUTIME, + PFIELD_CSTIME, + PFIELD_PRIO, + PFIELD_NICE, + PFIELD_THREADS, + PFIELD_START, + PFIELD_VSIZE, + PFIELD_RSS, + PFIELD_RSSLIM, + PFIELD_CPUNO, + PFIELD_RTPRIO, + PFIELD_RTPOLICY, + PFIELD_USER, + PFIELD_GROUP, + PFIELD_PMEM, + PFIELD_WCHAN, + PFIELD_ARGS, + PFIELD_ENV, + PFIELD_PCPU, + PFIELD_TTIME, + PFIELD_CTTIME, + PFIELD_TSTART, + PFIELD_CPCPU, + PFIELD_PHAIL +} ; + +typedef struct pscan_s pscan_t, *pscan_t_ref ; +struct pscan_s +{ + stralloc data ; + pid_t pid ; + signed int height ; + size_t statlen ; + size_t commlen ; + size_t cmdlen ; + size_t envlen ; + uid_t uid ; + gid_t gid ; + pid_t ppid ; + unsigned int state ; + pid_t pgrp ; + pid_t session ; + dev_t ttynr ; + pid_t tpgid ; + uint64_t utime ; + uint64_t stime ; + uint64_t cutime ; + uint64_t cstime ; + int prio ; + int nice ; + uint64_t threads ; + uint64_t start ; + uint64_t vsize ; + uint64_t rss ; + uint64_t rsslim ; + uint64_t wchan ; + uint64_t cpuno ; + uint64_t rtprio ; + uint64_t policy ; +} ; + +#define PSCAN_ZERO \ +{ \ + .data = STRALLOC_ZERO, \ + .pid = 0, \ + .height = 0, \ + .statlen = 0, \ + .commlen = 0, \ + .cmdlen = 0, \ + .envlen = 0, \ + .uid = 0, \ + .gid = 0, \ + .ppid = 0, \ + .state = 0, \ + .pgrp = 0, \ + .session = 0, \ + .ttynr = 0, \ + .tpgid = -1, \ + .utime = 0, \ + .stime = 0, \ + .cutime = 0, \ + .cstime = 0, \ + .prio = 0, \ + .nice = 0, \ + .threads = 0, \ + .start = 0, \ + .vsize = 0, \ + .rss = 0, \ + .rsslim = 0, \ + .wchan = 0, \ + .cpuno = 0, \ + .rtprio = 0, \ + .policy = 0 \ +} + +typedef struct s6ps_cache_s s6ps_cache_t, *s6ps_cache_t_ref ; +struct s6ps_cache_s +{ + avltree tree ; + genalloc index ; +} ; +#define S6PS_CACHE_ZERO { .tree = AVLTREE_ZERO, .index = GENALLOC_ZERO } + +typedef struct s6ps_wchan_s s6ps_wchan_t, *s6ps_wchan_t_ref ; +struct s6ps_wchan_s +{ + stralloc sysmap ; + genalloc ind ; +} ; +#define S6PS_WCHAN_ZERO { .sysmap = STRALLOC_ZERO, .ind = GENALLOC_ZERO } + +typedef struct s6ps_auxinfo_s s6ps_auxinfo_t, *s6ps_auxinfo_t_ref ; +struct s6ps_auxinfo_s +{ + tain boottime ; + s6ps_cache_t caches[3] ; + s6ps_wchan_t wchan ; + unsigned int hz ; + unsigned int pgsz ; + uint64_t totalmem ; +} ; +#define S6PS_AUXINFO_ZERO { .boottime = TAIN_EPOCH, .caches = { S6PS_CACHE_ZERO, S6PS_CACHE_ZERO, S6PS_CACHE_ZERO }, .wchan = S6PS_WCHAN_ZERO, .hz = 0, .pgsz = 0, .totalmem = 0 } + +typedef int pfieldfmt_func (s6ps_auxinfo_t *, pscan_t *, size_t *, size_t *) ; +typedef pfieldfmt_func *pfieldfmt_func_ref ; + + + /* exported by s6ps_pfield.c */ + +extern char const *const *s6ps_opttable ; +extern char const *const *s6ps_fieldheaders ; +extern pfieldfmt_func_ref const *const s6ps_pfield_fmt ; +extern int s6ps_compute_boottime (s6ps_auxinfo_t *, pscan_t *, unsigned int) ; + + + /* exported by s6ps_statparse.c */ + +extern int s6ps_statparse (pscan_t *) ; + + + /* exported by s6ps_otree.c */ + +extern void s6ps_otree (pscan_t *, unsigned int, avltreen *, unsigned int *) ; + + + /* exported by s6ps_cache.c */ + +extern int s6ps_cache_init (s6ps_cache_t *) ; +extern void s6ps_cache_finish (s6ps_cache_t *) ; +extern int s6ps_uint32_cmp (void const *, void const *, void *) ; + + + /* exported by s6ps_pwcache.c */ + +extern int s6ps_pwcache_lookup (s6ps_cache_t *, stralloc *, uid_t) ; + + + /* exported by s6ps_grcache.c */ + +extern int s6ps_grcache_lookup (s6ps_cache_t *, stralloc *, gid_t) ; + + + /* exported by s6ps_ttycache.c */ + +extern int s6ps_ttycache_lookup (s6ps_cache_t *, stralloc *, dev_t) ; + + + /* exported by s6ps_wchan.c */ + +extern int s6ps_wchan_init (s6ps_wchan_t *, char const *) ; +extern void s6ps_wchan_finish (s6ps_wchan_t *) ; +extern int s6ps_wchan_lookup (s6ps_wchan_t const *, stralloc *, uint64_t) ; + +#endif |