# HG changeset patch
# User jeroney@xxxxxxxxxxxxxxxxxxxxx
# Node ID a793b7a53605c8e21901ea9d6c68e085247eb8b7
# Parent 20d1a79ebe31fd1073924ab0c78410ffcd20447b
* Enable xenstat to use xenstore
* Have xentop display names instead of DomIDs
as requested in Bugzilla#311 filed by Ian
diff -r 20d1a79ebe31 -r a793b7a53605 tools/xenstat/libxenstat/Makefile
--- a/tools/xenstat/libxenstat/Makefile Wed Oct 26 15:59:13 2005
+++ b/tools/xenstat/libxenstat/Makefile Thu Oct 27 09:19:58 2005
@@ -38,13 +38,13 @@
WARN_FLAGS=-Wall -Werror
-CFLAGS+=-Isrc -I$(XEN_LIBXC)
+CFLAGS+=-Isrc -I$(XEN_LIBXC) -I$(XEN_XENSTORE)
LDFLAGS+=-Lsrc
all: $(LIB)
$(LIB): $(OBJECTS)
- $(AR) rc $@ $^
+ $(AR) rc $@ $^ $(XEN_XENSTORE)/libxenstore.so
$(RANLIB) $@
$(SHLIB): $(OBJECTS)
diff -r 20d1a79ebe31 -r a793b7a53605 tools/xenstat/libxenstat/src/xenstat.c
--- a/tools/xenstat/libxenstat/src/xenstat.c Wed Oct 26 15:59:13 2005
+++ b/tools/xenstat/libxenstat/src/xenstat.c Thu Oct 27 09:19:58 2005
@@ -21,6 +21,7 @@
#include <string.h>
#include <unistd.h>
#include <xen-interface.h>
+#include <xs.h>
#include "xenstat.h"
/*
@@ -31,6 +32,7 @@
struct xenstat_handle {
xi_handle *xihandle;
+ struct xs_handle *xshandle; /* xenstore handle */
int page_size;
FILE *procnetdev;
char xen_version[VERSION_SIZE]; /* xen version running on this node */
@@ -49,6 +51,7 @@
struct xenstat_domain {
unsigned int id;
+ char *name;
unsigned int state;
unsigned long long cpu_ns;
unsigned int num_vcpus; /* No. vcpus configured for domain */
@@ -110,6 +113,7 @@
static void xenstat_uninit_vcpus(xenstat_handle * handle);
static void xenstat_uninit_networks(xenstat_handle * handle);
static void xenstat_uninit_xen_version(xenstat_handle * handle);
+static char *xenstat_get_domain_name(xenstat_handle * handle, unsigned int
domain_id);
static xenstat_collector collectors[] = {
{ XENSTAT_VCPU, xenstat_collect_vcpus,
@@ -153,6 +157,13 @@
return NULL;
}
+ handle->xshandle = xs_daemon_open_readonly(); /* open handle to
xenstore*/
+ if (handle->xshandle == NULL) {
+ perror("unable to open xenstore\n");
+ free(handle);
+ return NULL;
+ }
+
return handle;
}
@@ -163,6 +174,7 @@
for (i = 0; i < NUM_COLLECTORS; i++)
collectors[i].uninit(handle);
xi_uninit(handle->xihandle);
+ xs_daemon_close(handle->xshandle);
free(handle);
}
}
@@ -228,6 +240,7 @@
for (i = 0; i < new_domains; i++) {
/* Fill in domain using domaininfo[i] */
domain->id = domaininfo[i].domain;
+ domain->name = xenstat_get_domain_name(handle,
domaininfo[i].domain);
domain->state = domaininfo[i].flags;
domain->cpu_ns = domaininfo[i].cpu_time;
domain->num_vcpus = (domaininfo[i].max_vcpu_id+1);
@@ -337,6 +350,12 @@
unsigned xenstat_domain_id(xenstat_domain * domain)
{
return domain->id;
+}
+
+/* Get the domain name for the domain */
+char *xenstat_domain_name(xenstat_domain * domain)
+{
+ return domain->name;
}
/* Get information about how much CPU time has been used */
@@ -675,3 +694,25 @@
static void xenstat_uninit_xen_version(xenstat_handle * handle)
{
}
+
+static char *xenstat_get_domain_name(xenstat_handle *handle, unsigned int
domain_id)
+{
+ char path[80];
+ char *name;
+ unsigned int *len;
+ struct xs_transaction_handle *xstranshandle;
+
+ snprintf(path, sizeof(path),"/local/domain/%i/name", domain_id);
+
+ xstranshandle = xs_transaction_start(handle->xshandle);
+ if (xstranshandle == NULL) {
+ perror("Unable to get transcation handle from xenstore\n");
+ exit(1); /* Change this */
+ }
+
+ name = (char *) xs_read(handle->xshandle, xstranshandle, path, len);
+
+ xs_transaction_end(handle->xshandle, xstranshandle, false);
+
+ return name;
+}
diff -r 20d1a79ebe31 -r a793b7a53605 tools/xenstat/libxenstat/src/xenstat.h
--- a/tools/xenstat/libxenstat/src/xenstat.h Wed Oct 26 15:59:13 2005
+++ b/tools/xenstat/libxenstat/src/xenstat.h Thu Oct 27 09:19:58 2005
@@ -80,6 +80,9 @@
/* Get the domain ID for this domain */
unsigned xenstat_domain_id(xenstat_domain * domain);
+/* Set the domain name for the domain */
+char *xenstat_domain_name(xenstat_domain * domain);
+
/* Get information about how much CPU time has been used */
unsigned long long xenstat_domain_cpu_ns(xenstat_domain * domain);
diff -r 20d1a79ebe31 -r a793b7a53605 tools/xenstat/xentop/Makefile
--- a/tools/xenstat/xentop/Makefile Wed Oct 26 15:59:13 2005
+++ b/tools/xenstat/xentop/Makefile Thu Oct 27 09:19:58 2005
@@ -26,7 +26,7 @@
man1dir=$(mandir)/man1
sbindir=$(prefix)/sbin
-CFLAGS += -DGCC_PRINTF -Wall -Werror -I$(XEN_LIBXENSTAT)
+CFLAGS += -DGCC_PRINTF -Wall -I$(XEN_LIBXENSTAT)
LDFLAGS += -L$(XEN_LIBXENSTAT)
LDLIBS += -lxenstat -lncurses
diff -r 20d1a79ebe31 -r a793b7a53605 tools/xenstat/xentop/xentop.c
--- a/tools/xenstat/xentop/xentop.c Wed Oct 26 15:59:13 2005
+++ b/tools/xenstat/xentop/xentop.c Thu Oct 27 09:19:58 2005
@@ -28,6 +28,7 @@
#include <time.h>
#include <unistd.h>
+#include <xs.h>
#include <xenstat.h>
#define XENTOP_VERSION "1.0"
@@ -91,6 +92,8 @@
static void print_net_rx(xenstat_domain *domain);
static int compare_ssid(xenstat_domain *domain1, xenstat_domain *domain2);
static void print_ssid(xenstat_domain *domain);
+static int compare_name(xenstat_domain *domain1, xenstat_domain *domain2);
+static void print_name(xenstat_domain *domain);
/* Section printing functions */
static void do_summary(void);
@@ -104,6 +107,7 @@
/* Field types */
typedef enum field_id {
FIELD_DOMID,
+ FIELD_NAME,
FIELD_STATE,
FIELD_CPU,
FIELD_CPU_PCT,
@@ -127,7 +131,8 @@
} field;
field fields[] = {
- { FIELD_DOMID, "DOMID", 5, compare_domid, print_domid },
+// { FIELD_DOMID, "DOMID", 5, compare_domid, print_domid },
+ { FIELD_NAME, "NAME", 10, compare_name, print_name },
{ FIELD_STATE, "STATE", 6, compare_state, print_state },
{ FIELD_CPU, "CPU(sec)", 10, compare_cpu, print_cpu },
{ FIELD_CPU_PCT, "CPU(%)", 6, compare_cpu_pct, print_cpu_pct },
@@ -356,6 +361,18 @@
print("%5u", xenstat_domain_id(domain));
}
+/* Compare domain names, returning -1,0,1 for <,=,> */
+int compare_name(xenstat_domain *domain1, xenstat_domain *domain2)
+{
+ return strcasecmp(xenstat_domain_name(domain1),
xenstat_domain_name(domain2));
+}
+
+/* Prints domain name */
+void print_name(xenstat_domain *domain)
+{
+ print("%10s", xenstat_domain_name(domain));
+}
+
struct {
unsigned int (*get)(xenstat_domain *);
char ch;
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|