[ovs-dev] [PATCH, v1, 1/1] ovs-dpctl-top: in_port field is now the default view

Mark Hamilton mhamilton at vmware.com
Tue Oct 15 15:32:31 UTC 2013


Signed-off-by: Mark Hamilton <mhamilton at nicira.com>

----- Original Message -----
> From: "Gurucharan Shetty" <shettyg at nicira.com>
> To: "Mark Hamilton" <mhamilton at nicira.com>
> Cc: "dev" <dev at openvswitch.org>
> Sent: Monday, October 14, 2013 9:55:38 AM
> Subject: Re: [ovs-dev] [PATCH, v1, 1/1] ovs-dpctl-top: in_port field is now the default view
> 
> On Tue, Oct 8, 2013 at 1:46 PM, Mark Hamilton <mhamilton at nicira.com> wrote:
> > This facilitates adding filtering since limiting output based on the
> > in_port
> > is a natural first step.
> >
> > Script mode was not changed allowing output to be piped through grep to
> > filter content.
> 
> I will need a Signed-off-by line.
> 
> (You don't need to send a V1 for the first patch. It can be just [PATCH].
> Also you don't need 1/1 if you are only sending one patch.)
> 
> Otherwise looks good to me. I tested this on XenServer.
> 
> > ---
> >  utilities/ovs-dpctl-top.in |   55
> >  ++++++++++++++++++++++++++++++++++++--------
> >  1 file changed, 45 insertions(+), 10 deletions(-)
> >
> > diff --git a/utilities/ovs-dpctl-top.in b/utilities/ovs-dpctl-top.in
> > index f43fdeb..7f0f1f8 100755
> > --- a/utilities/ovs-dpctl-top.in
> > +++ b/utilities/ovs-dpctl-top.in
> > @@ -72,7 +72,7 @@ commands are supported:
> >
> >    h - halt output. Any character will restart sampling
> >
> > -  f - cycle through flow fields
> > +  f - cycle through flow fields. The initial field is in_port
> >
> >    q - q for quit.
> >
> > @@ -295,16 +295,32 @@ class OutputFormat:
> >          self.field_type = field_type
> >          self.generator = generator
> >
> > +##
> > +# The order below is important. The initial flow field depends on whether
> > +# --script or top mode is used. In top mode, the expected behavior,
> > in_port
> > +# flow fields are shown first. A future feature will allow users to
> > +# filter output by selecting a row. Filtering by in_port is a natural
> > +# filtering starting point.
> > +#
> > +# In script mode, all fields are shown. The expectation is that users
> > could
> > +# filter output by piping through grep.
> > +#
> > +# In top mode, the default flow field is in_port. In --script mode,
> > +# the default flow field is all.
> > +#
> > +# All is added to the end of the OUTPUT_FORMAT list.
> > +##
> >  OUTPUT_FORMAT = [
> > +    OutputFormat("in_port", element_passthrough_get),
> >      OutputFormat("eth", element_eth_get),
> > +    OutputFormat("eth_type", element_passthrough_get),
> >      OutputFormat("ipv4", element_ipv4_get),
> >      OutputFormat("ipv6", element_ipv6_get),
> > -    OutputFormat("tunnel", element_tunnel_get),
> >      OutputFormat("udp", element_dst_port_get),
> >      OutputFormat("tcp", element_dst_port_get),
> > -    OutputFormat("eth_type", element_passthrough_get),
> > -    OutputFormat("in_port", element_passthrough_get)
> > +    OutputFormat("tunnel", element_tunnel_get),
> >      ]
> > +##
> >
> >
> >  ELEMENT_KEY = {
> > @@ -713,8 +729,18 @@ def column_picker(order, obj):
> >
> >
> >  class Render:
> > -    """ Renders flow data. """
> > -    def __init__(self, console_width):
> > +    """ Renders flow data.
> > +
> > +    The two FIELD_SELECT variables should be set to the actual field minus
> > +    1. During construction, an internal method increments and initializes
> > +    this object.
> > +    """
> > +    FLOW_FIELDS = [_field.field_type for _field in OUTPUT_FORMAT] +
> > ["all"]
> > +
> > +    FIELD_SELECT_SCRIPT = 7
> > +    FIELD_SELECT_TOP = -1
> > +
> > +    def __init__(self, console_width, field_select):
> >          """ Calculate column widths taking into account changes in
> >          format."""
> >
> >          self._start_time = datetime.datetime.now()
> > @@ -759,12 +785,12 @@ class Render:
> >          # _field_types hold which fields are displayed in the field
> >          # column, with the keyword all implying all fields.
> >          ##
> > -        self._field_types = ["all"] + [ii.field_type for ii in
> > OUTPUT_FORMAT]
> > +        self._field_types = Render.FLOW_FIELDS
> >
> >          ##
> >          # The default is to show all field types.
> >          ##
> > -        self._field_type_select = -1
> > +        self._field_type_select = field_select
> >          self.field_type_toggle()
> >
> >      def _field_type_select_get(self):
> > @@ -1144,7 +1170,7 @@ def flows_top(args):
> >      """ handles top like behavior when --script is not specified. """
> >
> >      flow_db = FlowDB(args.accumulate)
> > -    render = Render(0)
> > +    render = Render(0, Render.FIELD_SELECT_TOP)
> >
> >      decay_timer = decay_timer_start(flow_db, args.accumulateDecay)
> >      lines = []
> > @@ -1219,7 +1245,7 @@ def flows_script(args):
> >                  ihdl.close()
> >
> >      (_, console_width) = get_terminal_size()
> > -    render = Render(console_width)
> > +    render = Render(console_width, Render.FIELD_SELECT_SCRIPT)
> >
> >      for line in render.format(flow_db):
> >          print line
> > @@ -1685,3 +1711,12 @@ elif __name__ == 'ovs-dpctl-top':
> >
> >              for (ipv6_test, ipv6_check) in ipv6s:
> >                  self.assertEqual(ipv6_to_network(ipv6_test), ipv6_check)
> > +
> > +        def test_ui(self):
> > +            """ test_ui: test expected ui behavior. """
> > +            #pylint: disable=W0212
> > +            top_render = Render(80, Render.FIELD_SELECT_TOP)
> > +            script_render = Render(80, Render.FIELD_SELECT_SCRIPT)
> > +            self.assertEqual(top_render._field_type_select_get(),
> > "in_port")
> > +            self.assertEqual(script_render._field_type_select_get(),
> > "all")
> > +            #pylint: enable=W0212
> > --
> > 1.7.10.4
> >
> > _______________________________________________
> > dev mailing list
> > dev at openvswitch.org
> > http://openvswitch.org/mailman/listinfo/dev
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
> 



More information about the dev mailing list