diff mbox series

[ovs-dev,v2,01/12] python: ovs: Add flowviz scheleton.

Message ID 20240313090334.414226-2-amorenoz@redhat.com
State Superseded
Headers show
Series Add flow visualization utility. | expand

Checks

Context Check Description
ovsrobot/apply-robot success apply and check: success
ovsrobot/github-robot-_Build_and_Test success github build: passed
ovsrobot/intel-ovs-compilation success test: success

Commit Message

Adrian Moreno March 13, 2024, 9:03 a.m. UTC
Add a new python package (just the scheleton for now) to hold a flow
visualization tool based on the flow parsing library.

flowviz dependencies are installed via "extras_require", so a user must
run:

$ pip install .[flowviz]
or
$ pip install ovs[flowviz]

Acked-by: Eelco Chaudron <echaudro@redhat.com>
Signed-off-by: Adrian Moreno <amorenoz@redhat.com>
---
 python/automake.mk                 | 14 ++++++++---
 python/ovs/flowviz/__init__.py     |  0
 python/ovs/flowviz/main.py         | 40 ++++++++++++++++++++++++++++++
 python/ovs/flowviz/odp/__init__.py |  0
 python/ovs/flowviz/ofp/__init__.py |  0
 python/ovs/flowviz/ovs-flowviz     | 20 +++++++++++++++
 python/setup.py                    | 11 +++++---
 7 files changed, 79 insertions(+), 6 deletions(-)
 create mode 100644 python/ovs/flowviz/__init__.py
 create mode 100644 python/ovs/flowviz/main.py
 create mode 100644 python/ovs/flowviz/odp/__init__.py
 create mode 100644 python/ovs/flowviz/ofp/__init__.py
 create mode 100755 python/ovs/flowviz/ovs-flowviz
diff mbox series

Patch

diff --git a/python/automake.mk b/python/automake.mk
index 84cf2eab5..124032c92 100644
--- a/python/automake.mk
+++ b/python/automake.mk
@@ -63,6 +63,14 @@  ovs_pytests = \
 	python/ovs/tests/test_odp.py \
 	python/ovs/tests/test_ofp.py
 
+ovs_flowviz = \
+	python/ovs/flowviz/__init__.py \
+	python/ovs/flowviz/main.py \
+	python/ovs/flowviz/odp/__init__.py \
+	python/ovs/flowviz/ofp/__init__.py \
+	python/ovs/flowviz/ovs-flowviz
+
+
 # These python files are used at build time but not runtime,
 # so they are not installed.
 EXTRA_DIST += \
@@ -81,10 +89,10 @@  EXTRA_DIST += \
 # C extension support.
 EXTRA_DIST += python/ovs/_json.c
 
-PYFILES = $(ovs_pyfiles) python/ovs/dirs.py $(ovstest_pyfiles) $(ovs_pytests)
+PYFILES = $(ovs_pyfiles) python/ovs/dirs.py $(ovstest_pyfiles) $(ovs_pytests) $(ovs_flowviz)
 
 EXTRA_DIST += $(PYFILES)
-PYCOV_CLEAN_FILES += $(PYFILES:.py=.py,cover)
+PYCOV_CLEAN_FILES += $($(filter %.py, PYFILES):.py=.py,cover) python/ovs/flowviz/ovs-flowviz,cover
 
 FLAKE8_PYFILES += \
 	$(filter-out python/ovs/compat/% python/ovs/dirs.py,$(PYFILES)) \
@@ -95,7 +103,7 @@  FLAKE8_PYFILES += \
 	python/ovs/dirs.py.template \
 	python/setup.py
 
-nobase_pkgdata_DATA = $(ovs_pyfiles) $(ovstest_pyfiles)
+nobase_pkgdata_DATA = $(ovs_pyfiles) $(ovstest_pyfiles) $(ovs_flowviz)
 ovs-install-data-local:
 	$(MKDIR_P) python/ovs
 	sed \
diff --git a/python/ovs/flowviz/__init__.py b/python/ovs/flowviz/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/python/ovs/flowviz/main.py b/python/ovs/flowviz/main.py
new file mode 100644
index 000000000..f5bf142be
--- /dev/null
+++ b/python/ovs/flowviz/main.py
@@ -0,0 +1,40 @@ 
+# Copyright (c) 2023 Red Hat, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import click
+
+
+class Options(dict):
+    """Options dictionary"""
+
+
+@click.group(
+    context_settings=dict(help_option_names=["-h", "--help"]),
+)
+@click.pass_context
+def maincli(ctx):
+    """
+    OpenvSwitch flow visualization utility.
+
+    It reads openflow and datapath flows
+    (such as the output of ovs-ofctl dump-flows or ovs-appctl dpctl/dump-flows)
+    and prints them in different formats.
+    """
+
+
+def main():
+    """
+    Main Function
+    """
+    maincli()
diff --git a/python/ovs/flowviz/odp/__init__.py b/python/ovs/flowviz/odp/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/python/ovs/flowviz/ofp/__init__.py b/python/ovs/flowviz/ofp/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/python/ovs/flowviz/ovs-flowviz b/python/ovs/flowviz/ovs-flowviz
new file mode 100755
index 000000000..9d0959812
--- /dev/null
+++ b/python/ovs/flowviz/ovs-flowviz
@@ -0,0 +1,20 @@ 
+#!/usr/bin/env python3
+#
+# Copyright (c) 2022,2023 Red Hat, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from ovs.flowviz import main
+
+if __name__ == '__main__':
+    main.main()
diff --git a/python/setup.py b/python/setup.py
index bcf832ce9..4b9c751d2 100644
--- a/python/setup.py
+++ b/python/setup.py
@@ -80,6 +80,7 @@  else:
 extra_cflags = os.environ.get('extra_cflags', '').split()
 extra_libs = os.environ.get('extra_libs', '').split()
 
+flow_extras_require = ['netaddr', 'pyparsing']
 
 setup_args = dict(
     name='ovs',
@@ -89,7 +90,8 @@  setup_args = dict(
     author='Open vSwitch',
     author_email='dev@openvswitch.org',
     packages=['ovs', 'ovs.compat', 'ovs.compat.sortedcontainers',
-              'ovs.db', 'ovs.unixctl', 'ovs.flow'],
+              'ovs.db', 'ovs.flow', 'ovs.flowviz', 'ovs.flowviz.odp',
+              'ovs.flowviz.ofp', 'ovs.unixctl'],
     keywords=['openvswitch', 'ovs', 'OVSDB'],
     license='Apache 2.0',
     classifiers=[
@@ -109,8 +111,11 @@  setup_args = dict(
     cmdclass={'build_ext': try_build_ext},
     install_requires=['sortedcontainers'],
     extras_require={':sys_platform == "win32"': ['pywin32 >= 1.0'],
-                    'flow': ['netaddr', 'pyparsing'],
-                    'dns': ['unbound']},
+                    'dns': ['unbound'],
+                    'flow': flow_extras_require,
+                    'flowviz': [*flow_extras_require, 'click'],
+                    },
+    scripts=["ovs/flowviz/ovs-flowviz"],
 )
 
 try: