--- projects/libstatgrab/src/statgrab/statgrab.c 2004/04/04 21:59:16 1.23 +++ projects/libstatgrab/src/statgrab/statgrab.c 2004/07/16 11:17:16 1.27 @@ -1,5 +1,5 @@ /* - * i-scream central monitoring system + * i-scream libstatgrab * http://www.i-scream.org * Copyright (C) 2000-2004 i-scream * @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * $Id: statgrab.c,v 1.23 2004/04/04 21:59:16 ats Exp $ + * $Id: statgrab.c,v 1.27 2004/07/16 11:17:16 ats Exp $ */ #ifdef HAVE_CONFIG_H @@ -166,51 +166,52 @@ void populate_const() { void populate_cpu() { if (use_cpu_percent) { - cpu_percent_t *cpu_p = cpu_percent_usage(); + sg_cpu_percents *cpu_p = sg_get_cpu_percents(); if (cpu_p != NULL) { add_stat(FLOAT, &cpu_p->user, - "cpu", "user", NULL); + "cpu", "user", NULL); add_stat(FLOAT, &cpu_p->kernel, - "cpu", "kernel", NULL); + "cpu", "kernel", NULL); add_stat(FLOAT, &cpu_p->idle, - "cpu", "idle", NULL); + "cpu", "idle", NULL); add_stat(FLOAT, &cpu_p->iowait, - "cpu", "iowait", NULL); + "cpu", "iowait", NULL); add_stat(FLOAT, &cpu_p->swap, - "cpu", "swap", NULL); + "cpu", "swap", NULL); add_stat(FLOAT, &cpu_p->nice, - "cpu", "nice", NULL); + "cpu", "nice", NULL); add_stat(TIME_T, &cpu_p->time_taken, - "cpu", "time_taken", NULL); + "cpu", "time_taken", NULL); } } else { - cpu_states_t *cpu_s; + sg_cpu_stats *cpu_s; - cpu_s = use_diffs ? get_cpu_diff() : get_cpu_totals(); + cpu_s = use_diffs ? sg_get_cpu_stats_diff() + : sg_get_cpu_stats(); if (cpu_s != NULL) { add_stat(LONG_LONG, &cpu_s->user, - "cpu", "user", NULL); + "cpu", "user", NULL); add_stat(LONG_LONG, &cpu_s->kernel, - "cpu", "kernel", NULL); + "cpu", "kernel", NULL); add_stat(LONG_LONG, &cpu_s->idle, - "cpu", "idle", NULL); + "cpu", "idle", NULL); add_stat(LONG_LONG, &cpu_s->iowait, - "cpu", "iowait", NULL); + "cpu", "iowait", NULL); add_stat(LONG_LONG, &cpu_s->swap, - "cpu", "swap", NULL); + "cpu", "swap", NULL); add_stat(LONG_LONG, &cpu_s->nice, - "cpu", "nice", NULL); + "cpu", "nice", NULL); add_stat(LONG_LONG, &cpu_s->total, - "cpu", "total", NULL); + "cpu", "total", NULL); add_stat(TIME_T, &cpu_s->systime, - "cpu", "systime", NULL); + "cpu", "systime", NULL); } } } void populate_mem() { - mem_stat_t *mem = get_memory_stats(); + sg_mem_stats *mem = sg_get_mem_stats(); if (mem != NULL) { add_stat(LONG_LONG, &mem->total, "mem", "total", NULL); @@ -221,7 +222,7 @@ void populate_mem() { } void populate_load() { - load_stat_t *load = get_load_stats(); + sg_load_stats *load = sg_get_load_stats(); if (load != NULL) { add_stat(DOUBLE, &load->min1, "load", "min1", NULL); @@ -231,7 +232,7 @@ void populate_load() { } void populate_user() { - user_stat_t *user = get_user_stats(); + sg_user_stats *user = sg_get_user_stats(); if (user != NULL) { add_stat(INT, &user->num_entries, "user", "num", NULL); @@ -240,7 +241,7 @@ void populate_user() { } void populate_swap() { - swap_stat_t *swap = get_swap_stats(); + sg_swap_stats *swap = sg_get_swap_stats(); if (swap != NULL) { add_stat(LONG_LONG, &swap->total, "swap", "total", NULL); @@ -250,24 +251,25 @@ void populate_swap() { } void populate_general() { - general_stat_t *gen = get_general_stats(); + /* FIXME this should be renamed to host. */ + sg_host_info *host = sg_get_host_info(); - if (gen != NULL) { - add_stat(STRING, &gen->os_name, - "general", "os_name", NULL); - add_stat(STRING, &gen->os_release, - "general", "os_release", NULL); - add_stat(STRING, &gen->os_version, - "general", "os_version", NULL); - add_stat(STRING, &gen->platform, "general", "platform", NULL); - add_stat(STRING, &gen->hostname, "general", "hostname", NULL); - add_stat(TIME_T, &gen->uptime, "general", "uptime", NULL); + if (host != NULL) { + add_stat(STRING, &host->os_name, + "general", "os_name", NULL); + add_stat(STRING, &host->os_release, + "general", "os_release", NULL); + add_stat(STRING, &host->os_version, + "general", "os_version", NULL); + add_stat(STRING, &host->platform, "general", "platform", NULL); + add_stat(STRING, &host->hostname, "general", "hostname", NULL); + add_stat(TIME_T, &host->uptime, "general", "uptime", NULL); } } void populate_fs() { int n, i; - disk_stat_t *disk = get_disk_stats(&n); + sg_fs_stats *disk = sg_get_fs_stats(&n); if (disk != NULL) { for (i = 0; i < n; i++) { @@ -291,23 +293,23 @@ void populate_fs() { *p = '_'; add_stat(STRING, &disk[i].device_name, - "fs", name, "device_name", NULL); + "fs", name, "device_name", NULL); add_stat(STRING, &disk[i].fs_type, - "fs", name, "fs_type", NULL); + "fs", name, "fs_type", NULL); add_stat(STRING, &disk[i].mnt_point, - "fs", name, "mnt_point", NULL); + "fs", name, "mnt_point", NULL); add_stat(LONG_LONG, &disk[i].size, - "fs", name, "size", NULL); + "fs", name, "size", NULL); add_stat(LONG_LONG, &disk[i].used, - "fs", name, "used", NULL); + "fs", name, "used", NULL); add_stat(LONG_LONG, &disk[i].avail, - "fs", name, "avail", NULL); + "fs", name, "avail", NULL); add_stat(LONG_LONG, &disk[i].total_inodes, - "fs", name, "total_inodes", NULL); + "fs", name, "total_inodes", NULL); add_stat(LONG_LONG, &disk[i].used_inodes, - "fs", name, "used_inodes", NULL); + "fs", name, "used_inodes", NULL); add_stat(LONG_LONG, &disk[i].free_inodes, - "fs", name, "free_inodes", NULL); + "fs", name, "free_inodes", NULL); free(buf); } @@ -316,27 +318,29 @@ void populate_fs() { void populate_disk() { int n, i; - diskio_stat_t *diskio; + sg_disk_io_stats *diskio; - diskio = use_diffs ? get_diskio_stats_diff(&n) : get_diskio_stats(&n); + diskio = use_diffs ? sg_get_disk_io_stats_diff(&n) + : sg_get_disk_io_stats(&n); if (diskio != NULL) { for (i = 0; i < n; i++) { const char *name = diskio[i].disk_name; add_stat(STRING, &diskio[i].disk_name, - "disk", name, "disk_name", NULL); + "disk", name, "disk_name", NULL); add_stat(LONG_LONG, &diskio[i].read_bytes, - "disk", name, "read_bytes", NULL); + "disk", name, "read_bytes", NULL); add_stat(LONG_LONG, &diskio[i].write_bytes, - "disk", name, "write_bytes", NULL); + "disk", name, "write_bytes", NULL); add_stat(TIME_T, &diskio[i].systime, - "disk", name, "systime", NULL); + "disk", name, "systime", NULL); } } } void populate_proc() { - process_stat_t *proc = get_process_stats(); + /* FIXME expose individual process info too */ + sg_process_count *proc = sg_get_process_count(); if (proc != NULL) { add_stat(INT, &proc->total, "proc", "total", NULL); @@ -348,55 +352,73 @@ void populate_proc() { } void populate_net() { - int n, i; - network_stat_t *net; - network_iface_stat_t *iface; + int num_io, num_iface, i; + sg_network_io_stats *io; + sg_network_iface_stats *iface; - net = use_diffs ? get_network_stats_diff(&n) : get_network_stats(&n); - if (net != NULL) { - for (i = 0; i < n; i++) { - const char *name = net[i].interface_name; + io = use_diffs ? sg_get_network_io_stats_diff(&num_io) + : sg_get_network_io_stats(&num_io); + if (io != NULL) { + for (i = 0; i < num_io; i++) { + const char *name = io[i].interface_name; - add_stat(STRING, &net[i].interface_name, - "net", name, "interface_name", NULL); - add_stat(LONG_LONG, &net[i].tx, - "net", name, "tx", NULL); - add_stat(LONG_LONG, &net[i].rx, - "net", name, "rx", NULL); - add_stat(LONG_LONG, &net[i].ipackets, - "net", name, "ipackets", NULL); - add_stat(LONG_LONG, &net[i].opackets, - "net", name, "opackets", NULL); - add_stat(LONG_LONG, &net[i].ierrors, - "net", name, "ierrors", NULL); - add_stat(LONG_LONG, &net[i].oerrors, - "net", name, "oerrors", NULL); - add_stat(LONG_LONG, &net[i].collisions, - "net", name, "collisions", NULL); - add_stat(TIME_T, &net[i].systime, - "net", name, "systime", NULL); + add_stat(STRING, &io[i].interface_name, + "net", name, "interface_name", NULL); + add_stat(LONG_LONG, &io[i].tx, + "net", name, "tx", NULL); + add_stat(LONG_LONG, &io[i].rx, + "net", name, "rx", NULL); + add_stat(LONG_LONG, &io[i].ipackets, + "net", name, "ipackets", NULL); + add_stat(LONG_LONG, &io[i].opackets, + "net", name, "opackets", NULL); + add_stat(LONG_LONG, &io[i].ierrors, + "net", name, "ierrors", NULL); + add_stat(LONG_LONG, &io[i].oerrors, + "net", name, "oerrors", NULL); + add_stat(LONG_LONG, &io[i].collisions, + "net", name, "collisions", NULL); + add_stat(TIME_T, &io[i].systime, + "net", name, "systime", NULL); } } - iface = get_network_iface_stats(&n); + iface = sg_get_network_iface_stats(&num_iface); if (iface != NULL) { - for (i = 0; i < n; i++) { + for (i = 0; i < num_iface; i++) { const char *name = iface[i].interface_name; + int had_io = 0, j; + /* If there wasn't a corresponding io stat, + add interface_name from here. */ + if (io != NULL) { + for (j = 0; j < num_io; j++) { + if (strcmp(io[j].interface_name, + name) == 0) { + had_io = 1; + break; + } + } + } + if (!had_io) { + add_stat(STRING, &iface[i].interface_name, + "net", name, "interface_name", NULL); + } + add_stat(INT, &iface[i].speed, - "net", name, "speed", NULL); + "net", name, "speed", NULL); add_stat(BOOL, &iface[i].up, - "net", name, "up", NULL); + "net", name, "up", NULL); add_stat(DUPLEX, &iface[i].dup, - "net", name, "duplex", NULL); + "net", name, "duplex", NULL); } } } void populate_page() { - page_stat_t *page; + sg_page_stats *page; - page = use_diffs ? get_page_stats_diff() : get_page_stats(); + page = use_diffs ? sg_get_page_stats_diff() : sg_get_page_stats(); if (page != NULL) { add_stat(LONG_LONG, &page->pages_pagein, "page", "in", NULL); add_stat(LONG_LONG, &page->pages_pageout, "page", "out", NULL); @@ -439,7 +461,7 @@ void select_interesting(int argc, char **argv) { for (i = 0; i < argc; i++) { for (t = &toplevels[0]; t->name != NULL; t++) { if (strncmp(argv[i], t->name, - strlen(t->name)) == 0) { + strlen(t->name)) == 0) { t->interesting = 1; break; } @@ -494,11 +516,11 @@ void print_stat_value(const stat *s) { printf("%s", *(int *)v ? "true" : "false"); break; case DUPLEX: - switch (*(statgrab_duplex *) v) { - case FULL_DUPLEX: + switch (*(sg_iface_duplex *) v) { + case SG_IFACE_DUPLEX_FULL: printf("full"); break; - case HALF_DUPLEX: + case SG_IFACE_DUPLEX_HALF: printf("half"); break; default: @@ -552,9 +574,9 @@ void print_stats(int argc, char **argv) { s = NULL; } else { s = (const stat *)bsearch(&key, stats, - num_stats, - sizeof *stats, - compare); + num_stats, + sizeof *stats, + compare); } if (s == NULL) { @@ -588,16 +610,16 @@ void usage() { "If no STATs are given, all will be displayed. Specify 'STAT.' to display all\n" "statistics starting with that prefix.\n" "\n"); - printf(" -l Linux sysctl-style output (default)\n" - " -b BSD sysctl-style output\n" - " -m MRTG-compatible output\n" - " -u Plain output (only show values)\n" - " -n Display cumulative stats once (default)\n" - " -s Display stat differences repeatedly\n" - " -o Display stat differences once\n" + printf(" -l Linux sysctl-style output (default)\n" + " -b BSD sysctl-style output\n" + " -m MRTG-compatible output\n" + " -u Plain output (only show values)\n" + " -n Display cumulative stats once (default)\n" + " -s Display stat differences repeatedly\n" + " -o Display stat differences once\n" " -t DELAY When repeating, wait DELAY seconds between updates (default 1)\n" - " -p Display CPU usage differences as percentages rather than\n" - " absolute values\n" + " -p Display CPU usage differences as percentages rather than\n" + " absolute values\n" "\n"); printf("Version %s - report bugs to <%s>.\n", PACKAGE_VERSION, PACKAGE_BUGREPORT); @@ -662,8 +684,8 @@ int main(int argc, char **argv) { /* We don't care if statgrab_init fails, because we can just display the statistics that can be read as non-root. */ - statgrab_init(); - if (statgrab_drop_privileges() != 0) + sg_init(); + if (sg_drop_privileges() != 0) die("Failed to drop setuid/setgid privileges"); switch (repeat_mode) {