diff --git a/build-docs.sh b/build-docs.sh new file mode 100755 index 0000000000000000000000000000000000000000..c1dcfdd030969b1980322b0458f4b10c51083a41 --- /dev/null +++ b/build-docs.sh @@ -0,0 +1 @@ +sphinx-build -b html -t drawio docs/source docs/build diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..179980657be2f6306b303ad11ca949ad8f0ef4ef --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1 @@ +openapi.json diff --git a/docs/Makefile b/docs/Makefile index d4bb2cbb9eddb1bb1b4f366623044af8e4830919..d0c3cbf1020d5c292abdedf27627c6abe25e2293 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -5,8 +5,8 @@ # from the environment for the first two. SPHINXOPTS ?= SPHINXBUILD ?= sphinx-build -SOURCEDIR = . -BUILDDIR = _build +SOURCEDIR = source +BUILDDIR = build # Put it first so that "make" without argument is like "make help". help: diff --git a/docs/conf.py b/docs/conf.py deleted file mode 100644 index 1e02268407e1934d0304fbb2bbcf72c522670138..0000000000000000000000000000000000000000 --- a/docs/conf.py +++ /dev/null @@ -1,30 +0,0 @@ -# Configuration file for the Sphinx documentation builder. -# -# For the full list of built-in configuration values, see the documentation: -# https://www.sphinx-doc.org/en/master/usage/configuration.html -import os -import sys -sys.path.insert(0, os.path.abspath("../mapping_provider")) -# -- Project information ----------------------------------------------------- -# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information - -project = 'Mapping Provider' -copyright = '2025, GÉANT' -author = 'GÉANT' -release = '0.1' - -# -- General configuration --------------------------------------------------- -# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration - -extensions = ['sphinx.ext.autodoc'] - -templates_path = ['_templates'] -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] - - - -# -- Options for HTML output ------------------------------------------------- -# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output - -html_theme = 'alabaster' -html_static_path = ['_static'] diff --git a/docs/index.rst b/docs/index.rst deleted file mode 100644 index 314d233f32b9d009a7e92f21a2d0615807ac5982..0000000000000000000000000000000000000000 --- a/docs/index.rst +++ /dev/null @@ -1,17 +0,0 @@ -.. Mapping Provider documentation master file, created by - sphinx-quickstart on Fri Apr 11 11:07:12 2025. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - -Mapping Provider documentation -============================== - -Add your content using ``reStructuredText`` syntax. See the -`reStructuredText <https://www.sphinx-doc.org/en/master/usage/restructuredtext/index.html>`_ -documentation for details. - - -.. toctree:: - :maxdepth: 2 - :caption: Contents: - diff --git a/docs/make.bat b/docs/make.bat deleted file mode 100644 index 954237b9b9f2b248bb1397a15c055c0af1cad03e..0000000000000000000000000000000000000000 --- a/docs/make.bat +++ /dev/null @@ -1,35 +0,0 @@ -@ECHO OFF - -pushd %~dp0 - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build -) -set SOURCEDIR=. -set BUILDDIR=_build - -%SPHINXBUILD% >NUL 2>NUL -if errorlevel 9009 ( - echo. - echo.The 'sphinx-build' command was not found. Make sure you have Sphinx - echo.installed, then set the SPHINXBUILD environment variable to point - echo.to the full path of the 'sphinx-build' executable. Alternatively you - echo.may add the Sphinx directory to PATH. - echo. - echo.If you don't have Sphinx installed, grab it from - echo.https://www.sphinx-doc.org/ - exit /b 1 -) - -if "%1" == "" goto help - -%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% -goto end - -:help -%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% - -:end -popd diff --git a/docs/source/api.rst b/docs/source/api.rst new file mode 100644 index 0000000000000000000000000000000000000000..6c371d1539eaad942457b6aac075269c016a187c --- /dev/null +++ b/docs/source/api.rst @@ -0,0 +1,8 @@ +API specification +================== + +Generated by openapi.json file obtained from fastapi. +Docs are also available at the /docs route of a running server. + + +.. openapi:: ./openapi.json diff --git a/docs/source/conf.py b/docs/source/conf.py new file mode 100644 index 0000000000000000000000000000000000000000..d52fe2040888b5fcd07aa1b3c59ca5e1e0f15b6b --- /dev/null +++ b/docs/source/conf.py @@ -0,0 +1,59 @@ +# Configuration file for the Sphinx documentation builder. +# +# For the full list of built-in configuration values, see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +from datetime import datetime +import json +import os +import sys + +sys.path.insert( + 0, os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..")) +) + +from mapping_provider import create_app + + +# -- Project information ----------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information + +project = 'GÉANT Mapping Provider' +copyright = f"{datetime.now().year}, GÉANT" +author = 'swd@geant.org' +release = '0.0' + +# -- General configuration --------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration + +extensions = [ + "sphinx_rtd_theme", + # "sphinx.ext.autodoc", + "sphinx.ext.coverage", + "sphinxcontrib.plantuml", + "sphinxcontrib.openapi", +] + +# tags is injected by sphinx into conf.py +# toggle this by running ``sphinx-build -t drawio`` +if tags.has("drawio"): # noqa F821 + extensions.append("sphinxcontrib.drawio") + +templates_path = ['_templates'] +exclude_patterns = [] + +plantuml = f'java -jar {os.path.expanduser("~/bin/plantuml.jar")}' + + + +# -- Options for HTML output ------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output + +html_theme = 'sphinx_rtd_theme' +html_static_path = ['_static'] + + +api_schema = create_app().openapi() +openapi_filename = os.path.join(os.path.dirname(__file__), "openapi.json") +with open(openapi_filename, 'w') as f: + json.dump(api_schema, f, indent=4) diff --git a/docs/source/diagrams.drawio b/docs/source/diagrams.drawio new file mode 100644 index 0000000000000000000000000000000000000000..2fa3e7478218d57f4fed3e4baeeff9734c38630d --- /dev/null +++ b/docs/source/diagrams.drawio @@ -0,0 +1,122 @@ +<mxfile host="Electron" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/26.0.9 Chrome/128.0.6613.186 Electron/32.2.5 Safari/537.36" version="26.0.9"> + <diagram name="hl-arch" id="52Qc7nEq3IphXZwXqFKS"> + <mxGraphModel dx="1579" dy="543" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0"> + <root> + <mxCell id="0" /> + <mxCell id="1" parent="0" /> + <mxCell id="qRnl4kCob0Xuz_cL3leS-1" value="mapping provider" style="rounded=0;whiteSpace=wrap;html=1;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;verticalAlign=bottom;align=right;spacingRight=5;" vertex="1" parent="1"> + <mxGeometry x="110" y="30" width="240" height="240" as="geometry" /> + </mxCell> + <mxCell id="qRnl4kCob0Xuz_cL3leS-2" value="map web server" style="rounded=0;whiteSpace=wrap;html=1;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;verticalAlign=bottom;align=right;spacingRight=5;" vertex="1" parent="1"> + <mxGeometry x="-230" y="70" width="270" height="260" as="geometry" /> + </mxCell> + <mxCell id="qRnl4kCob0Xuz_cL3leS-3" value="processor<div>web</div><div>service</div>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1"> + <mxGeometry x="-120" y="170" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="qRnl4kCob0Xuz_cL3leS-4" value="mapping-provider" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1"> + <mxGeometry x="170" y="170" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="qRnl4kCob0Xuz_cL3leS-5" value="GSO" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1"> + <mxGeometry x="460" y="50" width="110" height="60" as="geometry" /> + </mxCell> + <mxCell id="qRnl4kCob0Xuz_cL3leS-6" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="qRnl4kCob0Xuz_cL3leS-3" target="qRnl4kCob0Xuz_cL3leS-4"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="110" y="260" as="sourcePoint" /> + <mxPoint x="160" y="210" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="qRnl4kCob0Xuz_cL3leS-7" value="REST" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> + <mxGeometry x="50" y="175" width="60" height="30" as="geometry" /> + </mxCell> + <mxCell id="qRnl4kCob0Xuz_cL3leS-8" value="template" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;size=12;dashed=1;dashPattern=1 2;" vertex="1" parent="1"> + <mxGeometry x="-100" y="270" width="80" height="30" as="geometry" /> + </mxCell> + <mxCell id="qRnl4kCob0Xuz_cL3leS-9" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="qRnl4kCob0Xuz_cL3leS-8" target="qRnl4kCob0Xuz_cL3leS-3"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="110" y="280" as="sourcePoint" /> + <mxPoint x="160" y="230" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="qRnl4kCob0Xuz_cL3leS-10" value="Client" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" vertex="1" parent="1"> + <mxGeometry x="-400" y="105" width="30" height="60" as="geometry" /> + </mxCell> + <mxCell id="qRnl4kCob0Xuz_cL3leS-11" value="map/gui" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;size=12;" vertex="1" parent="1"> + <mxGeometry x="-210" y="120" width="80" height="30" as="geometry" /> + </mxCell> + <mxCell id="qRnl4kCob0Xuz_cL3leS-12" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=80;entryDy=21;entryPerimeter=0;" edge="1" parent="1" source="qRnl4kCob0Xuz_cL3leS-3" target="qRnl4kCob0Xuz_cL3leS-11"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="30" y="270" as="sourcePoint" /> + <mxPoint x="80" y="220" as="targetPoint" /> + <Array as="points"> + <mxPoint x="-60" y="141" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="qRnl4kCob0Xuz_cL3leS-13" value="" style="endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1" source="qRnl4kCob0Xuz_cL3leS-11" target="qRnl4kCob0Xuz_cL3leS-10"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="30" y="250" as="sourcePoint" /> + <mxPoint x="80" y="200" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="qRnl4kCob0Xuz_cL3leS-14" value="" style="endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="qRnl4kCob0Xuz_cL3leS-5" target="qRnl4kCob0Xuz_cL3leS-4"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="170" y="230" as="sourcePoint" /> + <mxPoint x="480" y="200" as="targetPoint" /> + <Array as="points"> + <mxPoint x="420" y="80" /> + <mxPoint x="420" y="200" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="qRnl4kCob0Xuz_cL3leS-15" value="Inventory Provider" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1"> + <mxGeometry x="460" y="130" width="110" height="60" as="geometry" /> + </mxCell> + <mxCell id="qRnl4kCob0Xuz_cL3leS-16" value="Dashboard" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1"> + <mxGeometry x="460" y="205" width="110" height="60" as="geometry" /> + </mxCell> + <mxCell id="qRnl4kCob0Xuz_cL3leS-17" value="BRIAN (InfluxDB)" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1"> + <mxGeometry x="460" y="280" width="110" height="60" as="geometry" /> + </mxCell> + <mxCell id="qRnl4kCob0Xuz_cL3leS-18" value="" style="endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="qRnl4kCob0Xuz_cL3leS-17" target="qRnl4kCob0Xuz_cL3leS-4"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="470" y="90" as="sourcePoint" /> + <mxPoint x="300" y="210" as="targetPoint" /> + <Array as="points"> + <mxPoint x="420" y="310" /> + <mxPoint x="420" y="200" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="qRnl4kCob0Xuz_cL3leS-19" value="" style="endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="qRnl4kCob0Xuz_cL3leS-15" target="qRnl4kCob0Xuz_cL3leS-4"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="470" y="90" as="sourcePoint" /> + <mxPoint x="300" y="210" as="targetPoint" /> + <Array as="points"> + <mxPoint x="420" y="160" /> + <mxPoint x="420" y="200" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="qRnl4kCob0Xuz_cL3leS-20" value="" style="endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="qRnl4kCob0Xuz_cL3leS-16" target="qRnl4kCob0Xuz_cL3leS-4"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="470" y="170" as="sourcePoint" /> + <mxPoint x="300" y="210" as="targetPoint" /> + <Array as="points"> + <mxPoint x="420" y="235" /> + <mxPoint x="420" y="200" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="qRnl4kCob0Xuz_cL3leS-21" value="cache/state" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" vertex="1" parent="1"> + <mxGeometry x="170" y="50" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="qRnl4kCob0Xuz_cL3leS-22" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;strokeWidth=3;fillColor=#0050ef;strokeColor=#001DBC;" edge="1" parent="1" source="qRnl4kCob0Xuz_cL3leS-4" target="qRnl4kCob0Xuz_cL3leS-21"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="170" y="190" as="sourcePoint" /> + <mxPoint x="220" y="140" as="targetPoint" /> + </mxGeometry> + </mxCell> + </root> + </mxGraphModel> + </diagram> +</mxfile> diff --git a/docs/source/index.rst b/docs/source/index.rst new file mode 100644 index 0000000000000000000000000000000000000000..9c2aca8206114c6708ef485b1ba1de22cf9cf27e --- /dev/null +++ b/docs/source/index.rst @@ -0,0 +1,16 @@ +.. GÉANT Mapping Provider documentation master file, created by + sphinx-quickstart on Mon Apr 14 11:36:42 2025. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +GÉANT Mapping Provider documentation +==================================== + + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + api + planning + diff --git a/docs/mapping_provider.rst b/docs/source/mapping_provider.rst similarity index 99% rename from docs/mapping_provider.rst rename to docs/source/mapping_provider.rst index be150b11e5f4b4038ef45b09484e7e5faea138a6..dad01fb843acad3b5ee1364bea300af8dc375ecd 100644 --- a/docs/mapping_provider.rst +++ b/docs/source/mapping_provider.rst @@ -19,3 +19,4 @@ Module contents :members: :undoc-members: :show-inheritance: + diff --git a/docs/modules.rst b/docs/source/modules.rst similarity index 98% rename from docs/modules.rst rename to docs/source/modules.rst index abfd948826a632a075d4eafc015d5d4973940e56..823c103fbb5633a3b8f2ac6452ff7ab5c1c8d67d 100644 --- a/docs/modules.rst +++ b/docs/source/modules.rst @@ -5,3 +5,4 @@ mapping_provider :maxdepth: 4 mapping_provider + diff --git a/docs/source/nren-maps.html b/docs/source/nren-maps.html new file mode 100644 index 0000000000000000000000000000000000000000..6d9530c5f45511a64dcd159f755d42d30c9827c6 --- /dev/null +++ b/docs/source/nren-maps.html @@ -0,0 +1,242 @@ +.. raw:: html + + <table border="1"> + <thead> + <tr> + <th>NREN</th> + <th>Static Network Map Image</th> + <th>Interactive Network Map</th> + <th>Comment</th> + </tr> + </thead> + <tbody> + <tr> + <td>ACOnet</td> + <td>https://www.aco.net/topologie.html?L=1</td> + </tr> + <tr> + <td>AMRES</td> + <td>https://www.amres.ac.rs/amres/amres-infrastruktura</td> + <td>https://www.amres.ac.rs/amres/amres-infrastruktura</td> + </tr> + <tr> + <td>ARNES</td> + <td>https://www.arnes.si/en/infrastructure/</td> + </tr> + <tr> + <td>ASNET-AM</td> + <td>https://asnet.am/images/skhema1.jpg</td> + </tr> + <tr> + <td>AzScienceNet</td> + <td>https://azsciencenet.az/uploads/AzScienceNet_schem.png</td> + </tr> + <tr> + <td>Belnet</td> + <td>https://www.belnet.be/en/networks/belnet-network</td> + </tr> + <tr> + <td>BASNET</td> + </tr> + + <tr> + <td>BREN</td> + </tr> + + <tr> + <td>CARNET</td> + </tr> + + <tr> + <td>CESNET</td> + <td>https://photonics.cesnet.cz/cs/topologie</td> + <td>https://netreport.cesnet.cz/netreport/</td> + </tr> + + <tr> + <td>CSC</td> + <td></td> + <td>https://netmap.funet.fi/</td> + <td>closest to our requirement in terms of overlay and grafana</td> + </tr> + + <tr> + <td>CYNET</td> + </tr> + + <tr> + <td>DeiC</td> + <td>https://www.deic.dk/en/research-network</td> + </tr> + + <tr> + <td>DFN</td> + <td></td> + <td>https://www.dfn.de/netz/</td> + <td>not very informative</td> + </tr> + + <tr> + <td>EENet</td> + <td>https://www.eenet.ee/EENet/magistraalvork</td> + </tr> + + <tr> + <td>FCCN</td> + <td>https://www.fccn.pt/media/2022/04/Mapa-de-Rede-Fibra-2022.pdf</td> + </tr> + + <tr> + <td>GARR</td> + <td>https://www.garr.it/en/infrastructures/network-infrastructure/our-network</td> + <td>https://gins.garr.it/xhome_weathermaps.php</td> + <td>interactive map seems good way to breakdown</td> + </tr> + + <tr> + <td>GRENA</td> + <td>https://netview.grena.ge/</td> + <td></td> + <td>login required</td> + </tr> + + <tr> + <td>GRNET</td> + <td> + <p>https://grnet.gr/infrastructure/network-and-topology/</p> + <p>https://mon.grnet.gr/networkmap/?type=network&raw=True</p> + <p>https://mon.grnet.gr/networkmap/</p> + </td>https://mon.grnet.gr/pops/</td> + <td>good starting point from site </td> + </tr> + + <tr> + <td>HEAnet</td> + <td>https://www.heanet.ie/the-network</td> + <td>https://www.hea.net/</td> + <td>map an service is separately represented</td> + </tr> + + <tr> + <td>IUCC</td> + </tr> + + <tr> + <td>KIFU</td> + <td>https://kifu.gov.hu/infrastructure/</td> + </tr> + + <tr> + <td>KREN</td> + </tr> + + <tr> + <td>LAT</td> + </tr> + + <tr> + <td>LITNET</td> + <td>https://litnet.lt/</td> + </tr> + + <tr> + <td>MARnet</td> + <td>https://ukim.edu.mk/megjunarodna-sorabotka/internacionalizacija/chlenstvo-vo-akademski-mrezhi/</td> + </tr> + + <tr> + <td>MREN</td> + <td></td> + <td>https://netmon.ucg.ac.me/mantra/</td> + <td>no map overlay</td> + </tr> + + <tr> + <td>PSNC</td> + <td>https://pionier.net.pl/en/about-pionier/#interaktywna_mapa_sieci_pionier</td> + <td>neat representation on side panel</td> + </tr> + + <tr> + <td>RARE</td> + <td></td> + <td>https://gfn-gp4l-rare.public.nmaas.eu/dashboards/f/ddyhkm9cflc74c/gp4l</td> + </tr> + + <tr> + <td>RASH</td> + <td>https://www.rash.al/media/filer_public_thumbnails/filer_public/bc/a7/bca70fbc-295c-4a4b-9873-92a4a64791b3/rrjeti_i_skeme_i_geant.jpg__1280x736_q85_subsampling-2.jpg + </td> + </tr> + + <tr> + <td>RedIRIS</td> + <td>https://www.rediris.es/lared/mapa.html</td> + </tr> + + <tr> + <td>RENAM</td> + </tr> + + <tr> + <td>RENATER</td> + <td> + <p>https://www.renater.fr/documentation/ressources-multimedia/weathermap/metropole/</p> + <p>https://www.renater.fr/documentation/ressources-multimedia/weathermap/weathermap_domtom/</p> + </td> + </tr> + + <tr> + <td>Restena</td> + <td>https://www.restena.lu/en/network</td> + </tr> + + <tr> + <td>RHnet</td> + </tr> + + <tr> + <td>RoEdunet</td> + </tr> + + <tr> + <td>SANET</td> + <td>https://www.sanet.sk/?page_id=2388</td> + </tr> + + <tr> + <td>Sikt</td> + <td>https://stats.uninett.no/stat-q/load-map/uninett,,traffic,peak</td> + </tr> + + <tr> + <td>SUNET</td> + <td>http://stats.sunet.se/stat-q/load-map/SunetC-univ,,traffic,peak</td> + </tr> + + <tr> + <td>SURF</td> + <td></td> + <td>https://netwerkdashboard.surfnet.nl/</td> + <td>inaccesible</td> + </tr> + + <tr> + <td>SWITCH</td> + <td>https://static.www.switch.ch/sites/default/files/styles/hero_large_16_9/public/2024-10/omg.png?itok=gDXPFCmI + </td> + </tr> + + <tr> + <td>ULAKBIM</td> + <td>https://stat.ulakbim.gov.tr/ulaknet/</td> + <td>small size poor network direction but has integration with data speed info</td> + </tr> + + <tr> + <td>URAN</td> + <td>https://uran.ua/~eng/net-ukraine.htm</td> + </tr> + + </tbody> + </table> \ No newline at end of file diff --git a/docs/source/planning.rst b/docs/source/planning.rst new file mode 100644 index 0000000000000000000000000000000000000000..9b8be646e58b65e90260a07234704a78c168f85f --- /dev/null +++ b/docs/source/planning.rst @@ -0,0 +1,141 @@ +Planning, Design, etc +===================================== + +.. contents:: Contents + :depth: 4 + :local: + + +Nominal Use Cases/Requirements +------------------------------ + +- replace intermapper/heat map + + - availability + - capacity + - utilisation + - etc. + +- integrate with connectivity map + + - visualize geant-owned data-driven info on the same map with static (manually input/managed) non-geant data + +- monitoring + + - health of nodes/edges + - alarms/link state edge heat map + +- grid-based for fixed (e.g. our) networks +- handle overlapping edges + + +Ideas +----- + +- For the Geant-managed heat maps: maybe nice to agree upon a simple grid-locked geo-node/edge approach + +Some R&E Samples +---------------- + +- ESNet - Netsage + + - https://portal.netsage.global + - https://www.netsage.global + - https://github.com/GlobalNOC/globalnoc-networkmap-panel + - https://grafana.com/grafana/plugins/esnet-networkmap-panel/ + - https://github.com/esnet/grafana-esnet-networkmap-panel/tree/main + +- Jisc - Netsight3 + + - https://www.jisc.ac.uk/netsight + - https://netsight3.ja.net/help/ + +- SURF Netwerk Dashboard + + - https://netwerkdashboard.surfnet.nl/ + +- Reannz weathermap: + + - https://weathermap.reannz.co.nz/ + +- Funet network load map: + + - https://netmap.funet.fi/ + +- NORDUnet: + + - https://stats.nordu.net/stat-q/load-map/ndn-map,,traffic,peak + +- Pionier/PSNC: + + - https://pionier.net.pl/en/about-pionier/#interaktywna_mapa_sieci_pionier + +- Timemap (WP6, mainly GARR) + + - https://timemap.geant.org/ + - https://gitlab.geant.org/fabio.farina/timemap (New link https://gitlab.software.geant.org/fabio.farina/timemap ) + +Misc Internal things +-------------------- + +- IS/IS-driven: http://netdash.geant.net:8080/static/isis/geantISIS.svg +- Intermapper + + - https://weathermap.geant.org/g59bce200/document/_/!index.html?REFRESH=10+Seconds + +- ULAKBIM + + - https://stat.ulakbim.gov.tr/ulaknet/ + + +NRENS with their network info +------------------------------ + +.. include:: nren-maps.html + + +FrontEnd Technologies worth exploring +-------------------------------------- + +- Openlayers : https://openlayers.org/ +- Leaflet : https://leafletjs.com/ +- GeoJson : https://geojson.io/#map=3.53/43.52/6.81 + + +High-Level Architecture +------------------------- + +.. only:: drawio + + .. drawio-image:: diagrams.drawio + :page-name: hl-arch + +Design/Edit concerns for subway map +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +- rendered end-user maps are static (i.e. end-user can't move map elements around) +- designers need some way of customizing maps + + - draw.io? + - can we support full design control? i.e. artists drawing shapes/effects + - some styles are ok with draw.io + + +- Designer input + + - how should we handle errors in designer input? + + - should we have a validation step when designers return their modifications? + + - should we keep the design template completely outside of mapping provider? or some metadata (e.g. lists of nodes/edges) in mapping provider? + + - Discussion with Andrea: + + - Andrea can produce svg's, with some unique id in the id attribute + - front end will update svg based on mapping-provider overlay data + + + + + + diff --git a/requirements.txt b/requirements.txt index e6911e139c290806f815a36209d8a9d869d17e5b..8cedf04a6b774601a712430bfb7494d302f9fb80 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,13 @@ fastapi uvicorn[standard] + sphinx +sphinx-rtd-theme +sphinxcontrib-plantuml +sphinxcontrib-drawio +sphinxcontrib-openapi + ruff mypy tox -pre-commit \ No newline at end of file +pre-commit