|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v2] xentop: Dynamically expand some columns
Allow certain xentop columns to automatically expand as the amount
of data reported gets larger. The columns allowed to expand are:
NETTX(k), NETRX(k), VBD_RD, VBD_WR, VBD_RSECT, VBD_WSECT
Author: Markus Hauschild <Markus.Hauschild@xxxxxxxxxxxxxxxxxxxx>
Signed-off-by: Charles Arnold <carnold@xxxxxxxx>
diff --git a/tools/xenstat/xentop/Makefile b/tools/xenstat/xentop/Makefile
index 18bccb6..1797d84 100644
--- a/tools/xenstat/xentop/Makefile
+++ b/tools/xenstat/xentop/Makefile
@@ -18,13 +18,12 @@ ifneq ($(XENSTAT_XENTOP),y)
all install xentop:
else
-CFLAGS += -DGCC_PRINTF -Werror $(CFLAGS_libxenstat)
-LDLIBS += $(LDLIBS_libxenstat) $(CURSES_LIBS) $(SOCKET_LIBS)
+CFLAGS += -DGCC_PRINTF -Wall -Werror $(CFLAGS_libxenstat)
+LDLIBS += $(LDLIBS_libxenstat) $(CURSES_LIBS) $(SOCKET_LIBS) -lm
CFLAGS += -DHOST_$(XEN_OS)
# Include configure output (config.h) to headers search path
CFLAGS += -I$(XEN_ROOT)/tools
-LDFLAGS += $(APPEND_LDFLAGS)
.PHONY: all
all: xentop
diff --git a/tools/xenstat/xentop/xentop.c b/tools/xenstat/xentop/xentop.c
index dd11927..d087665 100644
--- a/tools/xenstat/xentop/xentop.c
+++ b/tools/xenstat/xentop/xentop.c
@@ -27,6 +27,7 @@
#include <ctype.h>
#include <errno.h>
+#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
@@ -127,7 +128,8 @@ static int compare_vbd_rsect(xenstat_domain *domain1,
xenstat_domain *domain2);
static void print_vbd_rsect(xenstat_domain *domain);
static int compare_vbd_wsect(xenstat_domain *domain1, xenstat_domain *domain2);
static void print_vbd_wsect(xenstat_domain *domain);
-
+static void reset_field_widths(void);
+static void adjust_field_widths(xenstat_domain *domain);
/* Section printing functions */
static void do_summary(void);
@@ -623,7 +625,7 @@ static int compare_net_tx(xenstat_domain *domain1,
xenstat_domain *domain2)
/* Prints number of total network tx bytes statistic */
static void print_net_tx(xenstat_domain *domain)
{
- print("%8llu", tot_net_bytes(domain, FALSE)/1024);
+ print("%*llu", fields[FIELD_NET_TX-1].default_width,
tot_net_bytes(domain, FALSE)/1024);
}
/* Compares number of total network rx bytes of two domains, returning -1,0,1
@@ -637,7 +639,7 @@ static int compare_net_rx(xenstat_domain *domain1,
xenstat_domain *domain2)
/* Prints number of total network rx bytes statistic */
static void print_net_rx(xenstat_domain *domain)
{
- print("%8llu", tot_net_bytes(domain, TRUE)/1024);
+ print("%*llu", fields[FIELD_NET_RX-1].default_width,
tot_net_bytes(domain, TRUE)/1024);
}
/* Gets number of total network bytes statistic, if rx true, then rx bytes
@@ -705,7 +707,7 @@ static int compare_vbd_rd(xenstat_domain *domain1,
xenstat_domain *domain2)
/* Prints number of total VBD READ requests statistic */
static void print_vbd_rd(xenstat_domain *domain)
{
- print("%8llu", tot_vbd_reqs(domain, FIELD_VBD_RD));
+ print("%*llu", fields[FIELD_VBD_RD-1].default_width,
tot_vbd_reqs(domain, FIELD_VBD_RD));
}
/* Compares number of total VBD WRITE requests of two domains,
@@ -719,7 +721,7 @@ static int compare_vbd_wr(xenstat_domain *domain1,
xenstat_domain *domain2)
/* Prints number of total VBD WRITE requests statistic */
static void print_vbd_wr(xenstat_domain *domain)
{
- print("%8llu", tot_vbd_reqs(domain, FIELD_VBD_WR));
+ print("%*llu", fields[FIELD_VBD_WR-1].default_width,
tot_vbd_reqs(domain, FIELD_VBD_WR));
}
/* Compares number of total VBD READ sectors of two domains,
@@ -733,7 +735,7 @@ static int compare_vbd_rsect(xenstat_domain *domain1,
xenstat_domain *domain2)
/* Prints number of total VBD READ sectors statistic */
static void print_vbd_rsect(xenstat_domain *domain)
{
- print("%10llu", tot_vbd_reqs(domain, FIELD_VBD_RSECT));
+ print("%*llu", fields[FIELD_VBD_RSECT-1].default_width,
tot_vbd_reqs(domain, FIELD_VBD_RSECT));
}
/* Compares number of total VBD WRITE sectors of two domains,
@@ -747,7 +749,7 @@ static int compare_vbd_wsect(xenstat_domain *domain1,
xenstat_domain *domain2)
/* Prints number of total VBD WRITE sectors statistic */
static void print_vbd_wsect(xenstat_domain *domain)
{
- print("%10llu", tot_vbd_reqs(domain, FIELD_VBD_WSECT));
+ print("%*llu", fields[FIELD_VBD_WSECT-1].default_width,
tot_vbd_reqs(domain, FIELD_VBD_WSECT));
}
@@ -806,6 +808,48 @@ static void print_ssid(xenstat_domain *domain)
print("%4u", xenstat_domain_ssid(domain));
}
+/* Resets default_width for fields with potentially large numbers */
+void reset_field_widths(void)
+{
+ fields[FIELD_NET_TX-1].default_width = 8;
+ fields[FIELD_NET_RX-1].default_width = 8;
+ fields[FIELD_VBD_RD-1].default_width = 8;
+ fields[FIELD_VBD_WR-1].default_width = 8;
+ fields[FIELD_VBD_RSECT-1].default_width = 10;
+ fields[FIELD_VBD_WSECT-1].default_width = 10;
+}
+
+/* Adjusts default_width for fields with potentially large numbers */
+void adjust_field_widths(xenstat_domain *domain)
+{
+ unsigned int length;
+
+ length = (unsigned int)(log10(tot_net_bytes(domain, FALSE)/1024) + 1);
+ if (length > fields[FIELD_NET_TX-1].default_width)
+ fields[FIELD_NET_TX-1].default_width = length;
+
+ length = (unsigned int)(log10(tot_net_bytes(domain, TRUE)/1024) + 1);
+ if (length > fields[FIELD_NET_RX-1].default_width)
+ fields[FIELD_NET_RX-1].default_width = length;
+
+ length = (unsigned int)(log10(tot_vbd_reqs(domain, FIELD_VBD_RD)) + 1);
+ if (length > fields[FIELD_VBD_RD-1].default_width)
+ fields[FIELD_VBD_RD-1].default_width = length;
+
+ length = (unsigned int)(log10(tot_vbd_reqs(domain, FIELD_VBD_WR)) + 1);
+ if (length > fields[FIELD_VBD_WR-1].default_width)
+ fields[FIELD_VBD_WR-1].default_width = length;
+
+ length = (unsigned int)(log10(tot_vbd_reqs(domain, FIELD_VBD_RSECT)) +
1);
+ if (length > fields[FIELD_VBD_RSECT-1].default_width)
+ fields[FIELD_VBD_RSECT-1].default_width = length;
+
+ length = (unsigned int)(log10(tot_vbd_reqs(domain, FIELD_VBD_WSECT)) +
1);
+ if (length > fields[FIELD_VBD_WSECT-1].default_width)
+ fields[FIELD_VBD_WSECT-1].default_width = length;
+}
+
+
/* Section printing functions */
/* Prints the top summary, above the domain table */
void do_summary(void)
@@ -1088,6 +1132,12 @@ static void top(void)
if(first_domain_index >= num_domains)
first_domain_index = num_domains-1;
+ /* Adjust default_width for fields with potentially large numbers */
+ reset_field_widths();
+ for (i = first_domain_index; i < num_domains; i++) {
+ adjust_field_widths(domains[i]);
+ }
+
for (i = first_domain_index; i < num_domains; i++) {
if(!batch && current_row() == lines()-1)
break;
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |