[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 |