summaryrefslogtreecommitdiff
path: root/src/include-local/s6ps.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/include-local/s6ps.h')
-rw-r--r--src/include-local/s6ps.h202
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