Blame examples/pprint.c

Packit d37888
#ifdef HAVE_CONFIG_H
Packit d37888
#  include <config.h>
Packit d37888
#endif
Packit d37888
Packit d37888
#include <glibtop.h>
Packit d37888
#include <glibtop/sysinfo.h>
Packit d37888
Packit d37888
#include <glibtop/union.h>
Packit d37888
Packit d37888
#include <unistd.h>
Packit d37888
Packit d37888
#include <stdio.h>
Packit d37888
#include <stddef.h>
Packit d37888
Packit d37888
Packit d37888
#define buf_offsetof(MEMBER) ((ptrdiff_t)&(buf.MEMBER) - (ptrdiff_t)&buf)
Packit d37888
Packit d37888
#define HEADER_PPRINT(FUNC) printf("### " #FUNC " ###\nsizeof *buf = %lu B\n", \
Packit d37888
(unsigned long) sizeof buf)
Packit d37888
Packit d37888
#define PPRINT(DATA, FORMAT) printf("\t%4lu B %3lu " #DATA " = " FORMAT "\n", \
Packit d37888
(unsigned long) sizeof buf.DATA, (unsigned long) buf_offsetof(DATA), buf.DATA)
Packit d37888
Packit d37888
#define PPRINT_ARRAY(ARRAY, SIZE, FORMAT) do {				\
Packit d37888
    size_t i;								\
Packit d37888
    printf("\t%4lu B %3lu " #ARRAY "[%lu] = { ",			\
Packit d37888
	   (unsigned long) sizeof buf.ARRAY,				\
Packit d37888
	   (unsigned long) buf_offsetof(ARRAY),				\
Packit d37888
	   (unsigned long) G_N_ELEMENTS(buf.ARRAY));			\
Packit d37888
    for (i = 0; i < (SIZE); ++i) {					\
Packit d37888
      if (!buf.ARRAY[i] && i < (SIZE - 1) && !buf.ARRAY[i + 1]) {	\
Packit d37888
	do { i++; } while (i < SIZE && !buf.ARRAY[i]);			\
Packit d37888
	printf("..., ");						\
Packit d37888
      } else {								\
Packit d37888
	printf(".%u = " FORMAT ", ", i, buf.ARRAY[i]);			\
Packit d37888
      }									\
Packit d37888
    }									\
Packit d37888
    printf("}\n");							\
Packit d37888
  } while(0)
Packit d37888
Packit d37888
#define PPRINT_ENTRY_ARRAY(ARRAY, SIZE) do { \
Packit d37888
size_t i; \
Packit d37888
printf("\t%4lu B " #ARRAY "[%lu/%lu] = { \n", \
Packit d37888
(unsigned long) sizeof buf->ARRAY, (unsigned long)(SIZE),	\
Packit d37888
(unsigned long) G_N_ELEMENTS(buf->ARRAY)); \
Packit d37888
for(i = 0; i < SIZE; ++i) { \
Packit d37888
  if (buf->ARRAY[i].values) {			\
Packit d37888
    printf ("\t[ ");				\
Packit d37888
    PPRINT_HASHTABLE(buf->ARRAY[i].values);	\
Packit d37888
    printf ("]\n");				\
Packit d37888
  }						\
Packit d37888
} \
Packit d37888
printf("} "); \
Packit d37888
} while(0)
Packit d37888
Packit d37888
#define PPRINT_HASHTABLE(HASHTABLE) do { \
Packit d37888
g_hash_table_foreach (HASHTABLE, (GHFunc)pprint_hashtable_item, NULL); \
Packit d37888
} while(0)
Packit d37888
Packit d37888
#define FOOTER_PPRINT() putchar('\n');
Packit d37888
Packit d37888
static void pprint_hashtable_item(gchar* key, gchar* value, gpointer user_data) 
Packit d37888
{
Packit d37888
  printf ("'%s': '%s', ", key, value);
Packit d37888
}
Packit d37888
static void pprint_get_sysinfo(void)
Packit d37888
{
Packit d37888
  const glibtop_sysinfo *buf;
Packit d37888
Packit d37888
  buf = glibtop_get_sysinfo();
Packit d37888
Packit d37888
  HEADER_PPRINT(glibtop_get_sysinfo);
Packit d37888
  //PPRINT(flags, "%#llx");
Packit d37888
  // PPRINT(ncpu, "%llu");
Packit d37888
  PPRINT_ENTRY_ARRAY(cpuinfo, buf->ncpu);
Packit d37888
  FOOTER_PPRINT();
Packit d37888
}
Packit d37888
Packit d37888
static void pprint_get_cpu(void)
Packit d37888
{
Packit d37888
  glibtop_cpu buf;
Packit d37888
Packit d37888
  glibtop_get_cpu(&buf;;
Packit d37888
Packit d37888
  HEADER_PPRINT(glibtop_get_cpu);
Packit d37888
  PPRINT(flags, "%#llx");
Packit d37888
  PPRINT(total, "%llu");
Packit d37888
  PPRINT(user, "%llu");
Packit d37888
  PPRINT(nice, "%llu");
Packit d37888
  PPRINT(sys, "%llu");
Packit d37888
  PPRINT(idle, "%llu");
Packit d37888
  PPRINT(iowait, "%llu");
Packit d37888
  PPRINT(irq, "%llu");
Packit d37888
  PPRINT(softirq, "%llu");
Packit d37888
  PPRINT(frequency, "%llu");
Packit d37888
  PPRINT_ARRAY(xcpu_total, GLIBTOP_NCPU, "%llu");
Packit d37888
  PPRINT_ARRAY(xcpu_user, GLIBTOP_NCPU, "%llu");
Packit d37888
  PPRINT_ARRAY(xcpu_nice, GLIBTOP_NCPU, "%llu");
Packit d37888
  PPRINT_ARRAY(xcpu_sys, GLIBTOP_NCPU, "%llu");
Packit d37888
  PPRINT_ARRAY(xcpu_idle, GLIBTOP_NCPU, "%llu");
Packit d37888
  PPRINT_ARRAY(xcpu_iowait, GLIBTOP_NCPU, "%llu");
Packit d37888
  PPRINT_ARRAY(xcpu_irq, GLIBTOP_NCPU, "%llu");
Packit d37888
  PPRINT_ARRAY(xcpu_softirq, GLIBTOP_NCPU, "%llu");
Packit d37888
  PPRINT(xcpu_flags, "%llx");
Packit d37888
  FOOTER_PPRINT();
Packit d37888
}
Packit d37888
Packit d37888
Packit d37888
Packit d37888
static void pprint_get_fsusage(const char *mountpoint)
Packit d37888
{
Packit d37888
  glibtop_fsusage buf;
Packit d37888
Packit d37888
  glibtop_get_fsusage(&buf, mountpoint);
Packit d37888
Packit d37888
  HEADER_PPRINT(glibtop_get_fsusage);
Packit d37888
  printf("pprint_get_fsusage (mountpoint = \"%s\"\n", mountpoint);
Packit d37888
  PPRINT(flags, "%#llx");
Packit d37888
  PPRINT(blocks, "%llu");
Packit d37888
  PPRINT(bfree, "%llu");
Packit d37888
  PPRINT(bavail, "%llu");
Packit d37888
  PPRINT(files, "%llu");
Packit d37888
  PPRINT(ffree, "%llu");
Packit d37888
  PPRINT(block_size, "%u");
Packit d37888
  PPRINT(read, "%llu");
Packit d37888
  PPRINT(write, "%llu");
Packit d37888
  FOOTER_PPRINT();
Packit d37888
}
Packit d37888
Packit d37888
Packit d37888
Packit d37888
static void pprint_get_loadavg(void)
Packit d37888
{
Packit d37888
  glibtop_loadavg buf;
Packit d37888
Packit d37888
  glibtop_get_loadavg(&buf;;
Packit d37888
Packit d37888
  HEADER_PPRINT(glibtop_get_loadavg);
Packit d37888
  PPRINT(flags, "%#llx");
Packit d37888
  PPRINT_ARRAY(loadavg, 3, "%f");
Packit d37888
  PPRINT(nr_running, "%llu");
Packit d37888
  PPRINT(nr_tasks, "%llu");
Packit d37888
  PPRINT(last_pid, "%llu");
Packit d37888
  FOOTER_PPRINT();
Packit d37888
}
Packit d37888
Packit d37888
Packit d37888
Packit d37888
static void pprint_get_mem(void)
Packit d37888
{
Packit d37888
  glibtop_mem buf;
Packit d37888
Packit d37888
  glibtop_get_mem(&buf;;
Packit d37888
Packit d37888
  HEADER_PPRINT(glibtop_get_mem);
Packit d37888
  PPRINT(flags, "%#llx");
Packit d37888
  PPRINT(total, "%llu");
Packit d37888
  PPRINT(used, "%llu");
Packit d37888
  PPRINT(free, "%llu");
Packit d37888
  PPRINT(shared, "%llu");
Packit d37888
  PPRINT(buffer, "%llu");
Packit d37888
  PPRINT(cached, "%llu");
Packit d37888
  PPRINT(user, "%llu");
Packit d37888
  PPRINT(locked, "%llu");
Packit d37888
  FOOTER_PPRINT();
Packit d37888
}
Packit d37888
Packit d37888
Packit d37888
Packit d37888
static void pprint_get_mountlist(gboolean allfs)
Packit d37888
{
Packit d37888
  glibtop_mountlist buf;
Packit d37888
  glibtop_mountentry *entries;
Packit d37888
  size_t i;
Packit d37888
Packit d37888
  entries = glibtop_get_mountlist(&buf, allfs);
Packit d37888
Packit d37888
  HEADER_PPRINT(glibtop_get_mountlist);
Packit d37888
  printf("glibtop_get_mountlist (allfs = %d)\n", allfs);
Packit d37888
  PPRINT(flags, "%#llx");
Packit d37888
  PPRINT(number, "%llu");
Packit d37888
  PPRINT(total, "%llu");
Packit d37888
  PPRINT(size, "%llu");
Packit d37888
Packit d37888
  printf("\t%4llu B entries[%llu] = \n\t\t{\n", buf.total, buf.number);
Packit d37888
Packit d37888
  for(i = 0; i < buf.number; ++i)
Packit d37888
    {
Packit d37888
      printf("\t\t .%lu = { .dev = %#llx,"
Packit d37888
	     " .devname = \"%s\","
Packit d37888
	     " .mountir = \"%s\","
Packit d37888
	     " .type = \"%s\" }\n",
Packit d37888
	     (unsigned long) i, entries[i].dev,
Packit d37888
	     entries[i].devname,
Packit d37888
	     entries[i].mountdir,
Packit d37888
	     entries[i].type);
Packit d37888
    }
Packit d37888
Packit d37888
  printf("\t\t}\n");
Packit d37888
  FOOTER_PPRINT();
Packit d37888
Packit d37888
  g_free(entries);
Packit d37888
}
Packit d37888
Packit d37888
Packit d37888
Packit d37888
static void pprint_get_msg_limits(void)
Packit d37888
{
Packit d37888
  glibtop_msg_limits buf;
Packit d37888
Packit d37888
  glibtop_get_msg_limits(&buf;;
Packit d37888
Packit d37888
  HEADER_PPRINT(glibtop_get_msg_limits);
Packit d37888
  PPRINT(flags, "%#llx");
Packit d37888
  PPRINT(msgpool, "%llu");
Packit d37888
  PPRINT(msgmap, "%llu");
Packit d37888
  PPRINT(msgmax, "%llu");
Packit d37888
  PPRINT(msgmnb, "%llu");
Packit d37888
  PPRINT(msgmni, "%llu");
Packit d37888
  PPRINT(msgssz, "%llu");
Packit d37888
  PPRINT(msgtql, "%llu");
Packit d37888
  FOOTER_PPRINT();
Packit d37888
}
Packit d37888
Packit d37888
Packit d37888
Packit d37888
static void pprint_get_netload(const char *iface)
Packit d37888
{
Packit d37888
  glibtop_netload buf;
Packit d37888
Packit d37888
  glibtop_get_netload(&buf, iface);
Packit d37888
Packit d37888
  HEADER_PPRINT(glibtop_get_netload);
Packit d37888
  printf("glibtop_get_netload (iface = \"%s\")\n", iface);
Packit d37888
  PPRINT(flags, "%#llx");
Packit d37888
  FOOTER_PPRINT();
Packit d37888
}
Packit d37888
Packit d37888
Packit d37888
static void pprint_get_netlist(void)
Packit d37888
{
Packit d37888
  glibtop_netlist buf;
Packit d37888
  char **devices;
Packit d37888
  guint32 i;
Packit d37888
Packit d37888
  devices = glibtop_get_netlist(&buf;;
Packit d37888
Packit d37888
  HEADER_PPRINT(glibtop_get_netlist);
Packit d37888
Packit d37888
  for(i = 0; i < buf.number; ++i)
Packit d37888
  {
Packit d37888
	  printf("\t%s\n", devices[i]);
Packit d37888
  }
Packit d37888
Packit d37888
  FOOTER_PPRINT();
Packit d37888
Packit d37888
  g_strfreev(devices);
Packit d37888
}
Packit d37888
Packit d37888
Packit d37888
Packit d37888
static void pprint_get_swap(void)
Packit d37888
{
Packit d37888
  glibtop_swap buf;
Packit d37888
Packit d37888
  glibtop_get_swap(&buf;;
Packit d37888
Packit d37888
  HEADER_PPRINT(glibtop_get_swap);
Packit d37888
  PPRINT(flags, "%#llx");
Packit d37888
  PPRINT(total, "%llu");
Packit d37888
  PPRINT(used, "%llu");
Packit d37888
  PPRINT(free, "%llu");
Packit d37888
  PPRINT(pagein, "%llu");
Packit d37888
  PPRINT(pageout, "%llu");
Packit d37888
  FOOTER_PPRINT();
Packit d37888
}
Packit d37888
Packit d37888
Packit d37888
Packit d37888
static void pprint_get_uptime(void)
Packit d37888
{
Packit d37888
  glibtop_uptime buf;
Packit d37888
Packit d37888
  glibtop_get_uptime(&buf;;
Packit d37888
Packit d37888
  HEADER_PPRINT(glibtop_get_uptime);
Packit d37888
  PPRINT(flags, "%#llx");
Packit d37888
  PPRINT(uptime, "%f");
Packit d37888
  PPRINT(idletime, "%f");
Packit d37888
  PPRINT(boot_time, "%llu");
Packit d37888
  FOOTER_PPRINT();
Packit d37888
}
Packit d37888
Packit d37888
Packit d37888
Packit d37888
Packit d37888
static void pprint_get_proc_kernel(pid_t pid)
Packit d37888
{
Packit d37888
  glibtop_proc_kernel buf;
Packit d37888
Packit d37888
  glibtop_get_proc_kernel(&buf, pid);
Packit d37888
Packit d37888
  HEADER_PPRINT(glibtop_get_proc_kernel);
Packit d37888
  PPRINT(flags, "%#llx");
Packit d37888
  PPRINT(k_flags, "%llu");
Packit d37888
  PPRINT(min_flt, "%llu");
Packit d37888
  PPRINT(maj_flt, "%llu");
Packit d37888
  PPRINT(cmin_flt, "%llu");
Packit d37888
  PPRINT(cmaj_flt, "%llu");
Packit d37888
  FOOTER_PPRINT();
Packit d37888
}
Packit d37888
Packit d37888
Packit d37888
static void pprint_get_proc_mem(pid_t pid)
Packit d37888
{
Packit d37888
  glibtop_proc_mem buf;
Packit d37888
Packit d37888
  glibtop_get_proc_mem(&buf, pid);
Packit d37888
Packit d37888
  HEADER_PPRINT(glibtop_get_proc_mem);
Packit d37888
  PPRINT(flags, "%#llx");
Packit d37888
  PPRINT(size, "%llu");
Packit d37888
  PPRINT(vsize, "%llu");
Packit d37888
  PPRINT(resident, "%llu");
Packit d37888
  PPRINT(share, "%llu");
Packit d37888
  PPRINT(rss, "%llu");
Packit d37888
  PPRINT(rss_rlim, "%llu");
Packit d37888
  FOOTER_PPRINT();
Packit d37888
}
Packit d37888
Packit d37888
Packit d37888
static void pprint_get_proc_affinity(pid_t pid)
Packit d37888
{
Packit d37888
  glibtop_proc_affinity buf;
Packit d37888
  guint32 i;
Packit d37888
  guint16* cpus;
Packit d37888
Packit d37888
  cpus = glibtop_get_proc_affinity(&buf, pid);
Packit d37888
Packit d37888
  HEADER_PPRINT(glibtop_get_proc_affinity);
Packit d37888
  PPRINT(flags, "%#llx");
Packit d37888
  PPRINT(number, "%u");
Packit d37888
  PPRINT(all, "%d");
Packit d37888
Packit d37888
  printf("\taffinity=");
Packit d37888
  for (i = 0; i < buf.number; i++) {
Packit d37888
    printf("%d, ", cpus[i]);
Packit d37888
  }
Packit d37888
  putchar('\n');
Packit d37888
Packit d37888
  FOOTER_PPRINT();
Packit d37888
}
Packit d37888
Packit d37888
Packit d37888
int main()
Packit d37888
{
Packit d37888
  glibtop_init();
Packit d37888
Packit d37888
  pprint_get_sysinfo();
Packit d37888
  pprint_get_cpu();
Packit d37888
Packit d37888
  pprint_get_fsusage("/");
Packit d37888
Packit d37888
  pprint_get_loadavg();
Packit d37888
Packit d37888
  pprint_get_mem();
Packit d37888
Packit d37888
  pprint_get_mountlist(TRUE);
Packit d37888
  pprint_get_mountlist(FALSE);
Packit d37888
Packit d37888
  pprint_get_msg_limits();
Packit d37888
Packit d37888
  pprint_get_swap();
Packit d37888
Packit d37888
  pprint_get_netlist();
Packit d37888
Packit d37888
  pprint_get_netload("eth0");
Packit d37888
  pprint_get_netload("ppp0");
Packit d37888
  pprint_get_netload("<unknown>");
Packit d37888
/* pprint_get_sysinfo(); */
Packit d37888
Packit d37888
  pprint_get_uptime();
Packit d37888
Packit d37888
  pprint_get_proc_kernel(getpid());
Packit d37888
  pprint_get_proc_mem(getpid());
Packit d37888
  pprint_get_proc_affinity(getpid());
Packit d37888
Packit d37888
  glibtop_close();
Packit d37888
Packit d37888
  return 0;
Packit d37888
}