diff options
author | kaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk> | 2006-06-28 10:22:13 +0100 |
---|---|---|
committer | kaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk> | 2006-06-28 10:22:13 +0100 |
commit | d3ecb7e352c7e598adbf15d21c64cd60bbd322ed (patch) | |
tree | 1dd905e41a17f75f240989b4b0fbcedee13b3cd5 /tools/xenstat/xentop | |
parent | 940d86e2e12844e63d2edf70685cd4197cccc841 (diff) | |
download | xen-d3ecb7e352c7e598adbf15d21c64cd60bbd322ed.tar.gz xen-d3ecb7e352c7e598adbf15d21c64cd60bbd322ed.tar.bz2 xen-d3ecb7e352c7e598adbf15d21c64cd60bbd322ed.zip |
[XENTOP] Adds batch mode processing option (output to stdout)
to the xentop utility. It also adds the ability to specify the
number of iterations xentop should produce before exiting.
a) xentop -b
will output to stdout.
b) xentop -i <number>
will iterate <number> times and exit (option "n" is already used by
xentop. Hence the choice of "i"). This option can be used for both the
curses and batch modes.
From: Hariprasad Nellitheertha <mlisthari@gmail.com>
Signed-off-by: Keir Fraser <keir@xensource.com>
Diffstat (limited to 'tools/xenstat/xentop')
-rw-r--r-- | tools/xenstat/xentop/xentop.1 | 9 | ||||
-rw-r--r-- | tools/xenstat/xentop/xentop.c | 83 |
2 files changed, 67 insertions, 25 deletions
diff --git a/tools/xenstat/xentop/xentop.1 b/tools/xenstat/xentop/xentop.1 index 1d480c9063..c7a856bed1 100644 --- a/tools/xenstat/xentop/xentop.1 +++ b/tools/xenstat/xentop/xentop.1 @@ -25,6 +25,8 @@ [\fB\-n\fR] [\fB\-r\fR] [\fB\-v\fR] +[\fB\-b\fR] +[\fB\-i\fRITERATIONS] .SH DESCRIPTION \fBxentop\fR displays information about the Xen system and domains, in a @@ -50,6 +52,13 @@ repeat table header before each domain .TP \fB\-v\fR, \fB\-\-vcpus\fR output VCPU data +.TP +\fB\-b\fR, \fB\-\-batch\fR +output data in batch mode (to stdout) +.TP +\fB\-i\fR, \fB\-\-iterations\fR=\fIITERATIONS\fR +maximum number of iterations xentop should produce before ending + .SH "INTERACTIVE COMMANDS" All interactive commands are case-insensitive. diff --git a/tools/xenstat/xentop/xentop.c b/tools/xenstat/xentop/xentop.c index 050f95bfcb..adae751882 100644 --- a/tools/xenstat/xentop/xentop.c +++ b/tools/xenstat/xentop/xentop.c @@ -153,6 +153,9 @@ xenstat_node *cur_node = NULL; field_id sort_field = FIELD_DOMID; unsigned int first_domain_index = 0; unsigned int delay = 3; +unsigned int batch = 0; +unsigned int loop = 1; +unsigned int iterations = 0; int show_vcpus = 0; int show_networks = 0; int repeat_header = 0; @@ -179,6 +182,8 @@ static void usage(const char *program) "-n, --networks output vif network data\n" "-r, --repeat-header repeat table header before each domain\n" "-v, --vcpus output vcpu data\n" + "-b, --batch output in batch mode, no user input accepted\n" + "-i, --iterations number of iterations before exiting\n" "\n" XENTOP_BUGSTO, program); return; @@ -236,9 +241,15 @@ static void print(const char *fmt, ...) { va_list args; - if(current_row() < lines()-1) { + if (!batch) { + if((current_row() < lines()-1)) { + va_start(args, fmt); + vw_printw(stdscr, fmt, args); + va_end(args); + } + } else { va_start(args, fmt); - vw_printw(stdscr, fmt, args); + vprintf(fmt, args); va_end(args); } } @@ -803,6 +814,7 @@ static void top(void) do_network(domains[i]); } + if(!batch) do_bottom_line(); } @@ -818,9 +830,11 @@ int main(int argc, char **argv) { "repeat-header", no_argument, NULL, 'r' }, { "vcpus", no_argument, NULL, 'v' }, { "delay", required_argument, NULL, 'd' }, + { "batch", no_argument, NULL, 'b' }, + { "iterations", required_argument, NULL, 'i' }, { 0, 0, 0, 0 }, }; - const char *sopts = "hVbnvd:"; + const char *sopts = "hVbnvd:bi:"; if (atexit(cleanup) != 0) fail("Failed to install cleanup handler.\n"); @@ -847,6 +861,13 @@ int main(int argc, char **argv) case 'd': delay = atoi(optarg); break; + case 'b': + batch = 1; + break; + case 'i': + iterations = atoi(optarg); + loop = 0; + break; } } @@ -855,28 +876,40 @@ int main(int argc, char **argv) if (xhandle == NULL) fail("Failed to initialize xenstat library\n"); - /* Begin curses stuff */ - initscr(); - start_color(); - cbreak(); - noecho(); - nonl(); - keypad(stdscr, TRUE); - halfdelay(5); - use_default_colors(); - init_pair(1, -1, COLOR_YELLOW); - - do { - gettimeofday(&curtime, NULL); - if(ch != ERR || (curtime.tv_sec - oldtime.tv_sec) >= delay) { - clear(); - top(); - oldtime = curtime; - refresh(); - } - ch = getch(); - } while (handle_key(ch)); - + if (!batch) { + /* Begin curses stuff */ + initscr(); + start_color(); + cbreak(); + noecho(); + nonl(); + keypad(stdscr, TRUE); + halfdelay(5); + use_default_colors(); + init_pair(1, -1, COLOR_YELLOW); + + do { + gettimeofday(&curtime, NULL); + if(ch != ERR || (curtime.tv_sec - oldtime.tv_sec) >= delay) { + clear(); + top(); + oldtime = curtime; + refresh(); + if ((!loop) && !(--iterations)) + break; + } + ch = getch(); + } while (handle_key(ch)); + } else { + do { + gettimeofday(&curtime, NULL); + top(); + sleep(delay); + if ((!loop) && !(--iterations)) + break; + } while (1); + } + /* Cleanup occurs in cleanup(), so no work to do here. */ return 0; |