mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
[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>
This commit is contained in:
1 parent
940d86e2e1
commit
d3ecb7e352
2 files changed
+66
-24
No files matched your search
@@ -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.
|
||||
|
||||
@@ -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;
|
||||
|
||||