[ovs-dev] [PATCH, v1, 1/1] ovs-dpctl-top: in_port field is now the default view
Gurucharan Shetty
shettyg at nicira.com
Mon Oct 14 16:55:38 UTC 2013
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
More information about the dev
mailing list