memoise shared top-level renderers

and add a comment indicating non-memoisation of other, not shared
top-level renderers.

This memoisation is effective when the browser requests multiple
topologies for the same report.
This commit is contained in:
Matthias Radestock
2017-11-04 23:05:52 +00:00
parent 0b9bab255c
commit b793a9efa8
7 changed files with 25 additions and 7 deletions

View File

@@ -182,11 +182,11 @@ func (r containerWithImageNameRenderer) Render(rpt report.Report, dct Decorator)
// ContainerWithImageNameRenderer is a Renderer which produces a container
// graph where the ranks are the image names, not their IDs
var ContainerWithImageNameRenderer = containerWithImageNameRenderer{ContainerRenderer}
var ContainerWithImageNameRenderer = Memoise(containerWithImageNameRenderer{ContainerRenderer})
// ContainerImageRenderer is a Renderer which produces a renderable container
// image graph by merging the container graph and the container image topology.
var ContainerImageRenderer = FilterEmpty(report.Container,
var ContainerImageRenderer = Memoise(FilterEmpty(report.Container,
MakeMap(
MapContainerImage2Name,
MakeReduce(
@@ -197,10 +197,12 @@ var ContainerImageRenderer = FilterEmpty(report.Container,
SelectContainerImage,
),
),
)
))
// ContainerHostnameRenderer is a Renderer which produces a renderable container
// by hostname graph..
//
// not memoised
var ContainerHostnameRenderer = FilterEmpty(report.Container,
MakeReduce(
MakeMap(

View File

@@ -5,7 +5,7 @@ import (
)
// ECSTaskRenderer is a Renderer for Amazon ECS tasks.
var ECSTaskRenderer = ConditionalRenderer(renderECSTopologies,
var ECSTaskRenderer = Memoise(ConditionalRenderer(renderECSTopologies,
renderParents(
report.Container, []string{report.ECSTask}, UnmanagedID,
MakeFilter(
@@ -13,9 +13,11 @@ var ECSTaskRenderer = ConditionalRenderer(renderECSTopologies,
ContainerWithImageNameRenderer,
),
),
)
))
// ECSServiceRenderer is a Renderer for Amazon ECS services.
//
// not memoised
var ECSServiceRenderer = ConditionalRenderer(renderECSTopologies,
renderParents(
report.ECSTask, []string{report.ECSService}, "",

View File

@@ -6,6 +6,8 @@ import (
// HostRenderer is a Renderer which produces a renderable host
// graph from the host topology.
//
// not memoised
var HostRenderer = MakeReduce(
MakeMap(
MapEndpoint2Host,

View File

@@ -42,7 +42,7 @@ func isPauseContainer(n report.Node) bool {
// PodRenderer is a Renderer which produces a renderable kubernetes
// graph by merging the container graph and the pods topology.
var PodRenderer = ConditionalRenderer(renderKubernetesTopologies,
var PodRenderer = Memoise(ConditionalRenderer(renderKubernetesTopologies,
MakeFilter(
func(n report.Node) bool {
state, ok := n.Latest.Lookup(kubernetes.State)
@@ -65,10 +65,12 @@ var PodRenderer = ConditionalRenderer(renderKubernetesTopologies,
ConnectionJoin(MapPod2IP, selectPodsWithDeployments{}),
),
),
)
))
// PodServiceRenderer is a Renderer which produces a renderable kubernetes services
// graph by merging the pods graph and the services topology.
//
// not memoised
var PodServiceRenderer = ConditionalRenderer(renderKubernetesTopologies,
renderParents(
report.Pod, []string{report.Service}, "",
@@ -80,6 +82,8 @@ var PodServiceRenderer = ConditionalRenderer(renderKubernetesTopologies,
// Pods with no controller are mapped to 'Unmanaged'
// We can't simply combine the rendered graphs of the high level objects as they would never
// have connections to each other.
//
// not memoised
var KubeControllerRenderer = ConditionalRenderer(renderKubernetesTopologies,
renderParents(
report.Pod, []string{report.Deployment, report.DaemonSet, report.StatefulSet, report.CronJob}, UnmanagedID,

View File

@@ -74,10 +74,14 @@ func (r processWithContainerNameRenderer) Render(rpt report.Report, dct Decorato
// ProcessWithContainerNameRenderer is a Renderer which produces a process
// graph enriched with container names where appropriate
//
// not memoised
var ProcessWithContainerNameRenderer = processWithContainerNameRenderer{ProcessRenderer}
// ProcessNameRenderer is a Renderer which produces a renderable process
// name graph by munging the progess graph.
//
// not memoised
var ProcessNameRenderer = ConditionalRenderer(renderProcesses,
MakeMap(
MapProcess2Name,

View File

@@ -5,6 +5,8 @@ import (
)
// SwarmServiceRenderer is a Renderer for Docker Swarm services
//
// not memoised
var SwarmServiceRenderer = ConditionalRenderer(renderSwarmTopologies,
renderParents(
report.Container, []string{report.SwarmService}, UnmanagedID,

View File

@@ -6,6 +6,8 @@ import (
)
// WeaveRenderer is a Renderer which produces a renderable weave topology.
//
// not memoised
var WeaveRenderer = MakeMap(
MapWeaveIdentity,
SelectOverlay,