Re: [ovs-dev] [RFC PATCH 00/10] Add flow visualization utility

2024-02-02 Thread Eelco Chaudron



On 2 Feb 2024, at 11:55, Adrian Moreno wrote:

> On 1/30/24 16:45, Eelco Chaudron wrote:
>>
>>
>> On 1 Dec 2023, at 20:14, Adrian Moreno wrote:
>>
>>> This series introduces a python utility called ovs-flowviz.
>>>
>>> The goal of this utility is to read both datapath and Openflow flows
>>> (using the flow library already available) and print them in different
>>> formats and styles to make it easier to understand them and troubleshoot
>>> issues.
>>>
>>> The formats are quite opinionated and so are the colors chosen so I'm
>>> eager to hear what is the impression caused to the community.
>>>
>>> Here is a summary of the formats and features supported:
>>>
>>> - Openflow
>>> - Console: Prints flows back to the console allowing filtering and
>>>   extensive formatting.
>>> - Cookie: Arranges flows based on cookie (instead of table) to ease
>>>   visualization of OVN-generated flows.
>>> - HTML: Prints an HTML file that shows the flows arranged by tables.
>>>   resubmit actions have a hyperlinke to the target table to ease
>>>   navegation.
>>> - Logic: Many times OVN generates many "logically-equivalent" flows.
>>>   These are flows that have the same structure: match on the same
>>>   values and have the same actions. The only thing that changes is
>>>   the actual value they match against and maybe the arguments of the
>>>   actions. This format collapses these flows so you can visualize the
>>>   logical pipeline easier.
>>> - JSON: JSON format.
>>>
>>> More OpenFlow features:
>>> - OVN metadata: Both the "cookie" and the "logic" format allow to
>>>   connect to a running OVN NB/SB databases and enrich the flows with
>>>   OVN context based on the flow's cookie.
>>>
>>> - Datapath:
>>> - Console: Prints flows back to the console allowing filtering and
>>>   extensive formatting.
>>> - Tree: Datapath flows use recirculation to further execute
>>>   additional actions. This format builds a tree of flows following
>>>   the recirculation identifiers and prints it in the console.
>>> - HTML: Prints the datapath flow tree in HTML. It includes some
>>>   minimal JS to support expanding and collapsing of entire branches.
>>> - Graph: Following the "tree" format, this one prints the tree in
>>>   graphviz format.
>>> - JSON: JSON format.
>>>
>>> Additional datapath features:
>>> - Many datapath formats are based on the tree flow hierarchy. An
>>>   interesting feature of this structure is that filtering is done at
>>>   the branch level. This means that when a flow satisfies the filter,
>>>   the entire sub-tree leading to that flow is shown.
>>>
>>> Additional common features:
>>> - Styling: Styles for both console and HTML formats can be defined
>>>   using a configuration file.
>>> - Heat maps: Some formats support heat-maps. A color pallete ranging
>>>   from blue (cold) to red (hot) is used to print the number of
>>>   packets and bytes of the flows. That way, the flows that are
>>>   handling more traffic are much easier to spot
>>>
>>> I know this is a long series, so it's OK if it takes time to review. I'm
>>> specially interested to know what is found useful and what is worth
>>> removing (if any).
>>
>> Thanks Adrian, for submitting the series and I think the quality of the code 
>> is good enough to submit it as a non-RFC. Most of the comments I have are 
>> style nits.
>>
>> The only main thing missing is some documentation/man pages for the tool.
>>
>
> Thanks Eelco for the review.

My pleasure. I looked at all your comments on my comments, and I have nothing 
more to add. Looking forward to your none RFC submission ;)

//Eelco

___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


Re: [ovs-dev] [RFC PATCH 00/10] Add flow visualization utility

2024-02-02 Thread Adrian Moreno



On 1/30/24 16:45, Eelco Chaudron wrote:



On 1 Dec 2023, at 20:14, Adrian Moreno wrote:


This series introduces a python utility called ovs-flowviz.

The goal of this utility is to read both datapath and Openflow flows
(using the flow library already available) and print them in different
formats and styles to make it easier to understand them and troubleshoot
issues.

The formats are quite opinionated and so are the colors chosen so I'm
eager to hear what is the impression caused to the community.

Here is a summary of the formats and features supported:

- Openflow
- Console: Prints flows back to the console allowing filtering and
  extensive formatting.
- Cookie: Arranges flows based on cookie (instead of table) to ease
  visualization of OVN-generated flows.
- HTML: Prints an HTML file that shows the flows arranged by tables.
  resubmit actions have a hyperlinke to the target table to ease
  navegation.
- Logic: Many times OVN generates many "logically-equivalent" flows.
  These are flows that have the same structure: match on the same
  values and have the same actions. The only thing that changes is
  the actual value they match against and maybe the arguments of the
  actions. This format collapses these flows so you can visualize the
  logical pipeline easier.
- JSON: JSON format.

More OpenFlow features:
- OVN metadata: Both the "cookie" and the "logic" format allow to
  connect to a running OVN NB/SB databases and enrich the flows with
  OVN context based on the flow's cookie.

- Datapath:
- Console: Prints flows back to the console allowing filtering and
  extensive formatting.
- Tree: Datapath flows use recirculation to further execute
  additional actions. This format builds a tree of flows following
  the recirculation identifiers and prints it in the console.
- HTML: Prints the datapath flow tree in HTML. It includes some
  minimal JS to support expanding and collapsing of entire branches.
- Graph: Following the "tree" format, this one prints the tree in
  graphviz format.
- JSON: JSON format.

Additional datapath features:
- Many datapath formats are based on the tree flow hierarchy. An
  interesting feature of this structure is that filtering is done at
  the branch level. This means that when a flow satisfies the filter,
  the entire sub-tree leading to that flow is shown.

Additional common features:
- Styling: Styles for both console and HTML formats can be defined
  using a configuration file.
- Heat maps: Some formats support heat-maps. A color pallete ranging
  from blue (cold) to red (hot) is used to print the number of
  packets and bytes of the flows. That way, the flows that are
  handling more traffic are much easier to spot

I know this is a long series, so it's OK if it takes time to review. I'm
specially interested to know what is found useful and what is worth
removing (if any).


Thanks Adrian, for submitting the series and I think the quality of the code is 
good enough to submit it as a non-RFC. Most of the comments I have are style 
nits.

The only main thing missing is some documentation/man pages for the tool.



Thanks Eelco for the review.


I’ll reply to the individual patches with comments.

Cheers,

Eelco



--
Adrián Moreno

___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


Re: [ovs-dev] [RFC PATCH 00/10] Add flow visualization utility

2024-01-30 Thread Eelco Chaudron


On 1 Dec 2023, at 20:14, Adrian Moreno wrote:

> This series introduces a python utility called ovs-flowviz.
>
> The goal of this utility is to read both datapath and Openflow flows
> (using the flow library already available) and print them in different
> formats and styles to make it easier to understand them and troubleshoot
> issues.
>
> The formats are quite opinionated and so are the colors chosen so I'm
> eager to hear what is the impression caused to the community.
>
> Here is a summary of the formats and features supported:
>
> - Openflow
>- Console: Prints flows back to the console allowing filtering and
>  extensive formatting.
>- Cookie: Arranges flows based on cookie (instead of table) to ease
>  visualization of OVN-generated flows.
>- HTML: Prints an HTML file that shows the flows arranged by tables.
>  resubmit actions have a hyperlinke to the target table to ease
>  navegation.
>- Logic: Many times OVN generates many "logically-equivalent" flows.
>  These are flows that have the same structure: match on the same
>  values and have the same actions. The only thing that changes is
>  the actual value they match against and maybe the arguments of the
>  actions. This format collapses these flows so you can visualize the
>  logical pipeline easier.
>- JSON: JSON format.
>
> More OpenFlow features:
>- OVN metadata: Both the "cookie" and the "logic" format allow to
>  connect to a running OVN NB/SB databases and enrich the flows with
>  OVN context based on the flow's cookie.
>
> - Datapath:
>- Console: Prints flows back to the console allowing filtering and
>  extensive formatting.
>- Tree: Datapath flows use recirculation to further execute
>  additional actions. This format builds a tree of flows following
>  the recirculation identifiers and prints it in the console.
>- HTML: Prints the datapath flow tree in HTML. It includes some
>  minimal JS to support expanding and collapsing of entire branches.
>- Graph: Following the "tree" format, this one prints the tree in
>  graphviz format.
>- JSON: JSON format.
>
> Additional datapath features:
>- Many datapath formats are based on the tree flow hierarchy. An
>  interesting feature of this structure is that filtering is done at
>  the branch level. This means that when a flow satisfies the filter,
>  the entire sub-tree leading to that flow is shown.
>
> Additional common features:
>- Styling: Styles for both console and HTML formats can be defined
>  using a configuration file.
>- Heat maps: Some formats support heat-maps. A color pallete ranging
>  from blue (cold) to red (hot) is used to print the number of
>  packets and bytes of the flows. That way, the flows that are
>  handling more traffic are much easier to spot
>
> I know this is a long series, so it's OK if it takes time to review. I'm
> specially interested to know what is found useful and what is worth
> removing (if any).

Thanks Adrian, for submitting the series and I think the quality of the code is 
good enough to submit it as a non-RFC. Most of the comments I have are style 
nits.

The only main thing missing is some documentation/man pages for the tool.

I’ll reply to the individual patches with comments.

Cheers,

Eelco

___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


Re: [ovs-dev] [RFC PATCH 00/10] Add flow visualization utility

2023-12-04 Thread Adrian Moreno



On 12/1/23 20:14, Adrian Moreno wrote:

This series introduces a python utility called ovs-flowviz.

The goal of this utility is to read both datapath and Openflow flows
(using the flow library already available) and print them in different
formats and styles to make it easier to understand them and troubleshoot
issues.

The formats are quite opinionated and so are the colors chosen so I'm
eager to hear what is the impression caused to the community.

Here is a summary of the formats and features supported:

- Openflow
- Console: Prints flows back to the console allowing filtering and
  extensive formatting.
- Cookie: Arranges flows based on cookie (instead of table) to ease
  visualization of OVN-generated flows.
- HTML: Prints an HTML file that shows the flows arranged by tables.
  resubmit actions have a hyperlinke to the target table to ease
  navegation.
- Logic: Many times OVN generates many "logically-equivalent" flows.
  These are flows that have the same structure: match on the same
  values and have the same actions. The only thing that changes is
  the actual value they match against and maybe the arguments of the
  actions. This format collapses these flows so you can visualize the
  logical pipeline easier.
- JSON: JSON format.

More OpenFlow features:
- OVN metadata: Both the "cookie" and the "logic" format allow to
  connect to a running OVN NB/SB databases and enrich the flows with
  OVN context based on the flow's cookie.

- Datapath:
- Console: Prints flows back to the console allowing filtering and
  extensive formatting.
- Tree: Datapath flows use recirculation to further execute
  additional actions. This format builds a tree of flows following
  the recirculation identifiers and prints it in the console.
- HTML: Prints the datapath flow tree in HTML. It includes some
  minimal JS to support expanding and collapsing of entire branches.
- Graph: Following the "tree" format, this one prints the tree in
  graphviz format.
- JSON: JSON format.

Additional datapath features:
- Many datapath formats are based on the tree flow hierarchy. An
  interesting feature of this structure is that filtering is done at
  the branch level. This means that when a flow satisfies the filter,
  the entire sub-tree leading to that flow is shown.

Additional common features:
- Styling: Styles for both console and HTML formats can be defined
  using a configuration file.
- Heat maps: Some formats support heat-maps. A color pallete ranging
  from blue (cold) to red (hot) is used to print the number of
  packets and bytes of the flows. That way, the flows that are
  handling more traffic are much easier to spot

I know this is a long series, so it's OK if it takes time to review. I'm
specially interested to know what is found useful and what is worth
removing (if any).

This series depends on:
https://patchwork.ozlabs.org/project/openvswitch/list/?series=384799



Arg! a last minute formatting change made the build fail. Sorry about that.


Adrian Moreno (10):
   python: ovs: Add flowviz scheleton.
   python: ovs: flowviz: Add file processing infra.
   python: ovs: flowviz: Add console formatting.
   python: ovs: flowviz: Add default config file.
   python: ovs: flowviz: Add html formatting.
   python: ovs: flowviz: Add datapath tree format.
   python: ovs: flowviz: Add OpenFlow logical view.
   python: ovs: flowviz: Add Openflow cookie format.
   python: ovs: flowviz: Add datapath html format.
   python: ovs: flowviz: Add datapath graph format.

  python/automake.mk  |  30 +-
  python/ovs/flowviz/__init__.py  |   2 +
  python/ovs/flowviz/console.py   | 196 +
  python/ovs/flowviz/format.py| 372 +
  python/ovs/flowviz/html_format.py   | 136 +
  python/ovs/flowviz/main.py  | 197 +
  python/ovs/flowviz/odp/__init__.py  |   0
  python/ovs/flowviz/odp/cli.py   | 116 
  python/ovs/flowviz/odp/graph.py | 418 
  python/ovs/flowviz/odp/html.py  | 259 +
  python/ovs/flowviz/odp/tree.py  | 302 
  python/ovs/flowviz/ofp/__init__.py  |   0
  python/ovs/flowviz/ofp/cli.py   | 246 
  python/ovs/flowviz/ofp/html.py  |  80 ++
  python/ovs/flowviz/ofp/logic.py | 364 
  python/ovs/flowviz/ovs-flowviz  |  20 ++
  python/ovs/flowviz/ovs-flowviz.conf | 108 +++
  python/ovs/flowviz/process.py   | 263 +
  python/setup.py |  14 +-
  19 files changed, 3115 insertions(+), 8 deletions(-)
  create mode 100644 python/ovs/flowviz/__init__.py
  create mode 100644 python/ovs/flowviz/console.py
  create mode 100644 python/ovs/flowviz/format.py
  create mode 100644 python/ovs/flowviz/html_format.py
  create mode 

[ovs-dev] [RFC PATCH 00/10] Add flow visualization utility

2023-12-01 Thread Adrian Moreno
This series introduces a python utility called ovs-flowviz.

The goal of this utility is to read both datapath and Openflow flows
(using the flow library already available) and print them in different
formats and styles to make it easier to understand them and troubleshoot
issues.

The formats are quite opinionated and so are the colors chosen so I'm
eager to hear what is the impression caused to the community.

Here is a summary of the formats and features supported:

- Openflow
   - Console: Prints flows back to the console allowing filtering and
 extensive formatting.
   - Cookie: Arranges flows based on cookie (instead of table) to ease
 visualization of OVN-generated flows.
   - HTML: Prints an HTML file that shows the flows arranged by tables.
 resubmit actions have a hyperlinke to the target table to ease
 navegation.
   - Logic: Many times OVN generates many "logically-equivalent" flows.
 These are flows that have the same structure: match on the same
 values and have the same actions. The only thing that changes is
 the actual value they match against and maybe the arguments of the
 actions. This format collapses these flows so you can visualize the
 logical pipeline easier.
   - JSON: JSON format.

More OpenFlow features:
   - OVN metadata: Both the "cookie" and the "logic" format allow to
 connect to a running OVN NB/SB databases and enrich the flows with
 OVN context based on the flow's cookie.

- Datapath:
   - Console: Prints flows back to the console allowing filtering and
 extensive formatting.
   - Tree: Datapath flows use recirculation to further execute
 additional actions. This format builds a tree of flows following
 the recirculation identifiers and prints it in the console.
   - HTML: Prints the datapath flow tree in HTML. It includes some
 minimal JS to support expanding and collapsing of entire branches.
   - Graph: Following the "tree" format, this one prints the tree in
 graphviz format. 
   - JSON: JSON format.

Additional datapath features:
   - Many datapath formats are based on the tree flow hierarchy. An
 interesting feature of this structure is that filtering is done at
 the branch level. This means that when a flow satisfies the filter,
 the entire sub-tree leading to that flow is shown.

Additional common features:
   - Styling: Styles for both console and HTML formats can be defined
 using a configuration file.
   - Heat maps: Some formats support heat-maps. A color pallete ranging
 from blue (cold) to red (hot) is used to print the number of
 packets and bytes of the flows. That way, the flows that are
 handling more traffic are much easier to spot

I know this is a long series, so it's OK if it takes time to review. I'm
specially interested to know what is found useful and what is worth
removing (if any).

This series depends on:
https://patchwork.ozlabs.org/project/openvswitch/list/?series=384799

Adrian Moreno (10):
  python: ovs: Add flowviz scheleton.
  python: ovs: flowviz: Add file processing infra.
  python: ovs: flowviz: Add console formatting.
  python: ovs: flowviz: Add default config file.
  python: ovs: flowviz: Add html formatting.
  python: ovs: flowviz: Add datapath tree format.
  python: ovs: flowviz: Add OpenFlow logical view.
  python: ovs: flowviz: Add Openflow cookie format.
  python: ovs: flowviz: Add datapath html format.
  python: ovs: flowviz: Add datapath graph format.

 python/automake.mk  |  30 +-
 python/ovs/flowviz/__init__.py  |   2 +
 python/ovs/flowviz/console.py   | 196 +
 python/ovs/flowviz/format.py| 372 +
 python/ovs/flowviz/html_format.py   | 136 +
 python/ovs/flowviz/main.py  | 197 +
 python/ovs/flowviz/odp/__init__.py  |   0
 python/ovs/flowviz/odp/cli.py   | 116 
 python/ovs/flowviz/odp/graph.py | 418 
 python/ovs/flowviz/odp/html.py  | 259 +
 python/ovs/flowviz/odp/tree.py  | 302 
 python/ovs/flowviz/ofp/__init__.py  |   0
 python/ovs/flowviz/ofp/cli.py   | 246 
 python/ovs/flowviz/ofp/html.py  |  80 ++
 python/ovs/flowviz/ofp/logic.py | 364 
 python/ovs/flowviz/ovs-flowviz  |  20 ++
 python/ovs/flowviz/ovs-flowviz.conf | 108 +++
 python/ovs/flowviz/process.py   | 263 +
 python/setup.py |  14 +-
 19 files changed, 3115 insertions(+), 8 deletions(-)
 create mode 100644 python/ovs/flowviz/__init__.py
 create mode 100644 python/ovs/flowviz/console.py
 create mode 100644 python/ovs/flowviz/format.py
 create mode 100644 python/ovs/flowviz/html_format.py
 create mode 100644 python/ovs/flowviz/main.py
 create mode 100644 python/ovs/flowviz/odp/__init__.py
 create mode 100644 python/ovs/flowviz/odp/cli.py
 create mode 100644 python/ovs/flowviz/odp/graph.py