From cc35dd599ac7f5b5eb2e5efbfd4492aab7389d2d Mon Sep 17 00:00:00 2001 From: oddlama Date: Mon, 1 Apr 2024 00:29:48 +0200 Subject: [PATCH] feat(topology): add network overview card --- topology/topology/renderers/elk/default.nix | 11 ++++ topology/topology/renderers/svg/default.nix | 73 +++++++++++++++------ 2 files changed, 64 insertions(+), 20 deletions(-) diff --git a/topology/topology/renderers/elk/default.nix b/topology/topology/renderers/elk/default.nix index 4e1be48..8956f6a 100644 --- a/topology/topology/renderers/elk/default.nix +++ b/topology/topology/renderers/elk/default.nix @@ -253,6 +253,7 @@ in { "org.eclipse.elk.algorithm" = "layered"; "org.eclipse.elk.edgeRouting" = "ORTHOGONAL"; "org.eclipse.elk.direction" = "RIGHT"; + "org.eclipse.elk.layered.allowNonFlowPortsToSwitchSides" = true; "org.eclipse.elk.layered.crossingMinimization.strategy" = true; "org.eclipse.elk.layered.nodePlacement.strategy" = "NETWORK_SIMPLEX"; "org.eclipse.elk.layered.spacing.edgeNodeBetweenLayers" = 40; @@ -284,6 +285,16 @@ in { }; }; } + + # Add network overview + { + children.network-overview = { + svg = { + file = config.lib.renderers.svg.net.mkOverview; + scale = 0.8; + }; + }; + } ] ++ flatten (map netToElk (attrValues config.networks)) ++ flatten (map nodeToElk (attrValues config.nodes)) diff --git a/topology/topology/renderers/svg/default.nix b/topology/topology/renderers/svg/default.nix index 3ad788f..69d8b64 100644 --- a/topology/topology/renderers/svg/default.nix +++ b/topology/topology/renderers/svg/default.nix @@ -3,10 +3,8 @@ # - NAT indication # - embed font globally, try removing satori embed? # - network overview card (list all networks with name and cidr, legend style) -# - stable pseudorandom colors from palette with no-reuse until necessary # - network centric view as standalone # - split network layout or make rectpacking of childs -# - hardware info (image small top and image big bottom and full (no card), maybe just image and render position) # - more service info # - disks (from disko) + render # - impermanence render? @@ -110,36 +108,71 @@ ''; net = { + netStylePreview = net: twAttrs: let + secondaryColor = + if net.style.secondaryColor == null + then "#00000000" + else net.style.secondaryColor; + in + { + solid = ''
''; + dashed = ''
''; + dotted = ''
''; + } + .${net.style.pattern}; + mkCard = net: { width = 480; - html = let - netStylePreview = let - secondaryColor = - if net.style.secondaryColor == null - then "#00000000" - else net.style.secondaryColor; - in - { - solid = ''
''; - dashed = ''
''; - dotted = ''
''; - } - .${net.style.pattern}; - in + html = mkCardContainer /* html */ ''
- ${netStylePreview} + ${html.net.netStylePreview net "w-8 h-4 mr-4"}

${net.name}

${mkImageMaybe "w-12 h-12 ml-4" (config.lib.icons.get net.icon)}
- ${optionalString (net.cidrv4 != null) ''
CIDRv4${net.cidrv4}
''} - ${optionalString (net.cidrv6 != null) ''
CIDRv6${net.cidrv6}
''} + ${optionalString (net.cidrv4 != null) ''
CIDRv4${net.cidrv4}
''} + ${optionalString (net.cidrv6 != null) ''
CIDRv6${net.cidrv6}
''} + ''; + }; + + mkOverview = { + width = 480; + html = + mkCardContainer + /* + html + */ + '' +
+

Networks Overview

+
+ + ${concatLines (flip map (attrValues config.networks) ( + net: + /* + html + */ + '' +
+
+ ${html.net.netStylePreview net "w-12 h-6 mr-4"} +
+

${net.name}

+ ${optionalString (net.cidrv4 != null) ''
CIDRv4${net.cidrv4}
''} + ${optionalString (net.cidrv6 != null) ''
CIDRv6${net.cidrv6}
''} +
+
+
+ '' + ))} + + ${spacingMt2} ''; }; }; @@ -323,10 +356,10 @@ in { config = { lib.renderers.svg = { - # FIXME: networks.mkOverview = renderHtmlToSvg html.networks.mkOverview "networks-overview"; services.mkOverview = renderHtmlToSvg html.services.mkOverview "services-overview"; net.mkCard = net: renderHtmlToSvg (html.net.mkCard net) "card-net-${net.id}"; + net.mkOverview = renderHtmlToSvg html.net.mkOverview "networks-overview"; node = { mkImageWithName = node: renderHtmlToSvg (html.node.mkImageWithName node) "image-with-name-${node.id}";