[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] xentop: Dynamically expand some columns



On Tue, Nov 04, 2014 at 10:08:55AM +0000, Ian Campbell wrote:
> On Wed, 2014-10-29 at 12:24 +0100, Markus Hauschild wrote:
> > Allow certain xentop columns to automatically expand as the amount
> > of data reported gets larger.  The columns allowed to auto expand are:
> > 
> > NETTX(k), NETRX(k), VBD_RD, VBD_WR, VBD_RSECT, VBD_WSECT
> > 
> > If the -f option is used to allow full length VM names, those names will
> > also be aligned based on the longest name in the NAME column.
> > 
> > The default minimum width of all columns remains unchanged.
> > 
> > Signed-off-by: Markus Hauschild <Markus.Hauschild@xxxxxxxxxxxxxxxxxxxx>
> > Signed-off-by: Charles Arnold <carnold@xxxxxxxx>
> 
> Acked-by: Ian Campbell <Ian.Campbell@xxxxxxxxxx>
> 
> Konrad, I think you were previously intending this to go in for 4.5, is
> that still the case?

Correct.
> 
> > 
> > diff --git a/tools/xenstat/xentop/Makefile b/tools/xenstat/xentop/Makefile
> > index 18bccb6..076e44c 100644
> > --- a/tools/xenstat/xentop/Makefile
> > +++ b/tools/xenstat/xentop/Makefile
> > @@ -19,7 +19,7 @@ all install xentop:
> >  else
> >  
> >  CFLAGS += -DGCC_PRINTF -Werror $(CFLAGS_libxenstat)
> > -LDLIBS += $(LDLIBS_libxenstat) $(CURSES_LIBS) $(SOCKET_LIBS)
> > +LDLIBS += $(LDLIBS_libxenstat) $(CURSES_LIBS) $(SOCKET_LIBS) -lm
> >  CFLAGS += -DHOST_$(XEN_OS)
> >  
> >  # Include configure output (config.h) to headers search path
> > diff --git a/tools/xenstat/xentop/xentop.c b/tools/xenstat/xentop/xentop.c
> > index dd11927..3062cb5 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>
> > @@ -70,6 +71,8 @@
> >  #define curses_str_t const char *
> >  #endif
> >  
> > +#define INT_FIELD_WIDTH(n) ((unsigned int)(log10(n) + 1))
> > +
> >  /*
> >   * Function prototypes
> >   */
> > @@ -127,7 +130,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);
> > @@ -444,7 +448,7 @@ int compare_name(xenstat_domain *domain1, 
> > xenstat_domain *domain2)
> >  void print_name(xenstat_domain *domain)
> >  {
> >     if(show_full_name)
> > -           print("%10s", xenstat_domain_name(domain));
> > +           print("%*s", fields[FIELD_NAME-1].default_width, 
> > xenstat_domain_name(domain));
> >     else
> >             print("%10.10s", xenstat_domain_name(domain));
> >  }
> > @@ -623,7 +627,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 +641,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 +709,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 +723,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 +737,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 +751,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 +810,54 @@ 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;
> > +
> > +   if (show_full_name) {
> > +           length = strlen(xenstat_domain_name(domain));
> > +           if (length > fields[FIELD_NAME-1].default_width)
> > +                   fields[FIELD_NAME-1].default_width = length;
> > +   }
> > +
> > +   length = INT_FIELD_WIDTH((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 = INT_FIELD_WIDTH((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 = INT_FIELD_WIDTH((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 = INT_FIELD_WIDTH((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 = INT_FIELD_WIDTH((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 = INT_FIELD_WIDTH((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 +1140,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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.