Previously, xl list would not reveal the shutdown reason code unless
it was SHUTDOWN_crashed. This is unfortunate; it makes it hard for
scripts which use xl to tell what's going on.
In this patch:
* xl list shows the reason code as a single letter if it is
any of the defined values from sched.h:
- poweroff or domain not shut down
r reboot
s suspend
c crashed
w watchdog
This is not 100% backward-compatible with xm but I think it's a
justifiable improvement. It would be nice to make the same change
to xm.
* xl list -v shows the full numeric reason code in hex, or "-" if the
domain is not shut down.
* xl list -v has column headings for the UUID and numeric reason
code. The heading for the reason code overlaps with the UUID a bit.
These headings are intended for human readers; scripts can parse
the output by breaking on whitespace.
Signed-off-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
diff -r 899131a8f9d2 tools/libxl/xl_cmdimpl.c
--- a/tools/libxl/xl_cmdimpl.c Mon Nov 22 08:29:03 2010 +0000
+++ b/tools/libxl/xl_cmdimpl.c Mon Nov 22 12:41:35 2010 +0000
@@ -2477,11 +2477,16 @@ static void list_domains(int verbose, co
static void list_domains(int verbose, const libxl_dominfo *info, int nb_domain)
{
int i;
-
- printf("Name ID Mem
VCPUs\tState\tTime(s)\n");
+ static const char shutdown_reason_letters[]= "-rscw";
+
+ printf("Name ID Mem
VCPUs\tState\tTime(s)");
+ if (verbose) printf(" UUID Reason-Code");
+ printf("\n");
for (i = 0; i < nb_domain; i++) {
char *domname;
+ unsigned shutdown_reason;
domname = libxl_domid_to_name(&ctx, info[i].domid);
+ shutdown_reason = info[i].shutdown ? info[i].shutdown_reason : 0;
printf("%-40s %5d %5lu %5d %c%c%c%c%c%c %8.1f",
domname,
info[i].domid,
@@ -2491,12 +2496,17 @@ static void list_domains(int verbose, co
info[i].blocked ? 'b' : '-',
info[i].paused ? 'p' : '-',
info[i].shutdown ? 's' : '-',
- info[i].shutdown_reason == SHUTDOWN_crash ? 'c' : '-',
+ (shutdown_reason >= 0 &&
+ shutdown_reason < sizeof(shutdown_reason_letters)-1
+ ? shutdown_reason_letters[shutdown_reason] : '?'),
info[i].dying ? 'd' : '-',
((float)info[i].cpu_time / 1e9));
free(domname);
- if (verbose)
+ if (verbose) {
printf(" " LIBXL_UUID_FMT, LIBXL_UUID_BYTES(info[i].uuid));
+ if (info[i].shutdown) printf(" %8x", shutdown_reason);
+ else printf(" %8s", "-");
+ }
putchar('\n');
}
}
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|