int main(int argc, char **argv) { opterr = 0; while (1) { int c = getopt(argc, argv, "lbmunsot:pf:KMG"); if (c == -1) break; switch (c) { case 'l': display_mode = DISPLAY_LINUX; break; case 'b': display_mode = DISPLAY_BSD; break; case 'm': display_mode = DISPLAY_MRTG; break; case 'u': display_mode = DISPLAY_PLAIN; break; case 'n': repeat_mode = REPEAT_NONE; break; case 's': repeat_mode = REPEAT_FOREVER; break; case 'o': repeat_mode = REPEAT_ONCE; break; case 't': repeat_time = atoi(optarg); break; case 'p': use_cpu_percent = 1; break; case 'f': float_scale_factor = atol(optarg); break; case 'K': bytes_scale_factor = 1024; break; case 'M': bytes_scale_factor = 1024 * 1024; break; case 'G': bytes_scale_factor = 1024 * 1024 * 1024; break; default: usage(); } } if (display_mode == DISPLAY_MRTG) { if ((argc - optind) != 2) die("mrtg mode: must specify exactly two stats"); if (repeat_mode == REPEAT_FOREVER) die("mrtg mode: cannot repeat display"); } if (use_cpu_percent && repeat_mode == REPEAT_NONE) die("CPU percentage usage display requires stat differences"); if (repeat_mode == REPEAT_NONE) use_diffs = 0; else use_diffs = 1; select_interesting(argc - optind, &argv[optind]); /* We don't care if sg_init fails, because we can just display the statistics that can be read as non-root. */ sg_init(); sg_snapshot(); if (sg_drop_privileges() != 0) die("Failed to drop setuid/setgid privileges"); switch (repeat_mode) { case REPEAT_NONE: get_stats(); print_stats(argc, argv); break; case REPEAT_ONCE: get_stats(); sleep(repeat_time); sg_snapshot(); get_stats(); print_stats(argc, argv); break; case REPEAT_FOREVER: while (1) { get_stats(); print_stats(argc, argv); printf("\n"); sleep(repeat_time); sg_snapshot(); } } if (display_mode == DISPLAY_MRTG) { printf("\n"); printf("statgrab\n"); } sg_shutdown(); return 0; }
int main(int argc, char **argv){ extern char *optarg; int c; int delay = 1; sg_cpu_percents *cpu_percent; sg_cpu_stats *cpu_diff_stats; while ((c = getopt(argc, argv, "d:")) != -1){ switch (c){ case 'd': delay = atoi(optarg); break; } } #ifdef WIN32 delay = delay * 1000; #endif /* Initialise helper - e.g. logging, if any */ sg_log_init("libstatgrab-examples", "SGEXAMPLES_LOG_PROPERTIES", argc ? argv[0] : NULL); /* Initialise statgrab */ sg_init(1); /* XXX must be replaced by termios/(n)curses function .... if( 0 != setvbuf(stdin, NULL, _IONBF, 0) ) { perror("setvbuf"); exit(1); } */ /* Drop setuid/setgid privileges. */ if (sg_drop_privileges() != SG_ERROR_NONE) { sg_die("Error. Failed to drop privileges", 1); } register_sig_flagger( SIGINT, &quit ); /* Throw away the first reading as thats averaged over the machines uptime */ sg_snapshot(); cpu_percent = sg_get_cpu_percents(NULL); if( NULL == cpu_percent ) sg_die("Failed to get cpu stats", 1); /* Clear the screen ready for display the cpu usage */ printf("\033[2J"); while( ( ( cpu_diff_stats = sg_get_cpu_stats_diff(NULL) ) != NULL ) && ( ( cpu_percent = sg_get_cpu_percents_of(sg_last_diff_cpu_percent, NULL) ) != NULL ) ) { int ch; sg_snapshot(); printf("\033[2;2H%-14s : %lld (%6.2f)", "User CPU", cpu_diff_stats->user, cpu_percent->user); printf("\033[3;2H%-14s : %lld (%6.2f)", "Kernel CPU", cpu_diff_stats->kernel, cpu_percent->kernel); printf("\033[4;2H%-14s : %lld (%6.2f)", "IOWait CPU", cpu_diff_stats->iowait, cpu_percent->iowait); printf("\033[5;2H%-14s : %lld (%6.2f)", "Swap CPU", cpu_diff_stats->swap, cpu_percent->swap); printf("\033[6;2H%-14s : %lld (%6.2f)", "Nice CPU", cpu_diff_stats->nice, cpu_percent->nice); printf("\033[7;2H%-14s : %lld (%6.2f)", "Idle CPU", cpu_diff_stats->idle, cpu_percent->idle); printf("\033[8;2H%-14s : %llu", "Ctxts", cpu_diff_stats->context_switches); printf("\033[9;2H%-14s : %llu", " Voluntary", cpu_diff_stats->voluntary_context_switches); printf("\033[10;2H%-14s : %llu", " Involuntary", cpu_diff_stats->involuntary_context_switches); printf("\033[11;2H%-14s : %llu", "Syscalls", cpu_diff_stats->syscalls); printf("\033[12;2H%-14s : %llu", "Intrs", cpu_diff_stats->interrupts); printf("\033[13;2H%-14s : %llu", "SoftIntrs", cpu_diff_stats->soft_interrupts); fflush(stdout); ch = inp_wait(delay); if( quit || (ch == 'q') ) break; } sg_shutdown(); exit(0); }