aboutsummaryrefslogtreecommitdiffstats
path: root/tools/xenstat/xentop
diff options
context:
space:
mode:
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>2006-06-28 10:22:13 +0100
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>2006-06-28 10:22:13 +0100
commitd3ecb7e352c7e598adbf15d21c64cd60bbd322ed (patch)
tree1dd905e41a17f75f240989b4b0fbcedee13b3cd5 /tools/xenstat/xentop
parent940d86e2e12844e63d2edf70685cd4197cccc841 (diff)
downloadxen-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.19
-rw-r--r--tools/xenstat/xentop/xentop.c83
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;