Documentation ¶
Index ¶
- Constants
- Variables
- func DNSFirstMatch(n report.Node, match func(name string) bool) (string, bool)
- func IsApplication(n report.Node) bool
- func IsConnected(node report.Node) bool
- func IsInternetNode(n report.Node) bool
- func IsNotPseudo(n report.Node) bool
- func IsRunning(n report.Node) bool
- func LocalNetworks(r report.Report) report.Networks
- func MakeGroupNodeTopology(originalTopology, key string) string
- func MakePseudoNodeID(parts ...string) string
- func MapContainer2ContainerImage(n report.Node) report.Nodes
- func MapContainer2Hostname(n report.Node) report.Nodes
- func MapContainer2IP(m report.Node) []string
- func MapContainerImage2Name(n report.Node) report.Nodes
- func MapPod2IP(m report.Node) []string
- func MapProcess2Container(n report.Node) report.Nodes
- func MapToEmpty(n report.Node) report.Nodes
- func MapWeaveIdentity(m report.Node) report.Nodes
- func NewDerivedNode(id string, node report.Node) report.Node
- func NewDerivedPseudoNode(id string, node report.Node) report.Node
- func Noop(_ report.Node) bool
- func ParseGroupNodeTopology(topology string) (string, string, bool)
- func ParsePseudoNodeID(nodeID string) (string, bool)
- func ResetCache()
- type Condition
- type CustomRenderer
- type Filter
- type FilterFunc
- func AnyFilterFunc(fs ...FilterFunc) FilterFunc
- func Complement(f FilterFunc) FilterFunc
- func ComposeFilterFuncs(fs ...FilterFunc) FilterFunc
- func DoesNotHaveLabel(labelKey string, labelValue string) FilterFunc
- func HasChildren(topology string) FilterFunc
- func HasLabel(labelKey string, labelValue string) FilterFunc
- func IsNamespace(namespace string) FilterFunc
- func IsTopology(topology string) FilterFunc
- type Map
- type MapFunc
- type Nodes
- type Reduce
- type Renderer
- func ColorConnected(r Renderer) Renderer
- func ConditionalRenderer(c Condition, r Renderer) Renderer
- func ConnectionJoin(toIPs func(report.Node) []string, topology string) Renderer
- func FilterEmpty(topology string, r Renderer) Renderer
- func MakeFilter(f FilterFunc, r Renderer) Renderer
- func MakeFilterPseudo(f FilterFunc, r Renderer) Renderer
- func MakeMap(f MapFunc, r Renderer) Renderer
- func MakeReduce(renderers ...Renderer) Renderer
- func MapEndpoints(f endpointMapFunc, topology string) Renderer
- func Memoise(r Renderer) Renderer
- func PropagateSingleMetrics(topology string, r Renderer) Renderer
- type TopologySelector
- type Transformer
- type Transformers
Constants ¶
const ( UncontainedID = "uncontained" UncontainedMajor = "Uncontained" // Topology for IPs so we can differentiate them at the end IP = "IP" )
Constants are used in the tests.
const ( IncomingInternetID = "in-theinternet" OutgoingInternetID = "out-theinternet" )
Constants are used in the tests.
const ( UnmanagedID = "unmanaged" UnmanagedMajor = "Unmanaged" )
Constants are used in the tests.
const ( InboundMajor = "The Internet" OutboundMajor = "The Internet" InboundMinor = "Inbound connections" OutboundMinor = "Outbound connections" )
Constants are used in the tests.
const IsConnectedMark = "is_connected"
IsConnectedMark is the key added to Node.Metadata by ColorConnected to indicate a node has an edge pointing to it or from it
const Pseudo = "pseudo"
Pseudo is the topology for nodes that aren't "real" nodes inside a cluster, such as nodes representing the internet, external services, and artificial grouping such as "uncontained processes" and "unmanaged containers".
Variables ¶
var ( SelectEndpoint = TopologySelector(report.Endpoint) SelectProcess = TopologySelector(report.Process) SelectContainer = TopologySelector(report.Container) SelectContainerImage = TopologySelector(report.ContainerImage) SelectHost = TopologySelector(report.Host) SelectPod = TopologySelector(report.Pod) SelectService = TopologySelector(report.Service) SelectDeployment = TopologySelector(report.Deployment) SelectDaemonSet = TopologySelector(report.DaemonSet) SelectStatefulSet = TopologySelector(report.StatefulSet) SelectCronJob = TopologySelector(report.CronJob) SelectECSTask = TopologySelector(report.ECSTask) SelectECSService = TopologySelector(report.ECSService) SelectSwarmService = TopologySelector(report.SwarmService) SelectOverlay = TopologySelector(report.Overlay) )
The topology selectors implement a Renderer which fetch the nodes from the various report topologies.
var ContainerHostnameRenderer = FilterEmpty(report.Container, MakeReduce( MakeMap( MapContainer2Hostname, ContainerWithImageNameRenderer, ), MakeMap( MapToEmpty, MakeMap( MapContainer2Hostname, ContainerRenderer, ), ), ), )
ContainerHostnameRenderer is a Renderer which produces a renderable container by hostname graph..
not memoised
var ContainerImageRenderer = Memoise(FilterEmpty(report.Container, MakeMap( MapContainerImage2Name, MakeReduce( MakeMap( MapContainer2ContainerImage, ContainerWithImageNameRenderer, ), SelectContainerImage, ), ), ))
ContainerImageRenderer is a Renderer which produces a renderable container image graph by merging the container graph and the container image topology.
var ContainerRenderer = Memoise(MakeFilter( func(n report.Node) bool { state, ok := n.Latest.Lookup(docker.ContainerState) return !ok || state != docker.StateDeleted }, MakeReduce( MakeMap( MapProcess2Container, ProcessRenderer, ), ConnectionJoin(MapContainer2IP, report.Container), ), ))
ContainerRenderer is a Renderer which produces a renderable container graph by merging the process graph and the container topology. NB We only want processes in container _or_ processes with network connections but we need to be careful to ensure we only include each edge once, by only including the ProcessRenderer once.
var ContainerWithImageNameRenderer = Memoise(containerWithImageNameRenderer{ContainerRenderer})
ContainerWithImageNameRenderer is a Renderer which produces a container graph where the ranks are the image names, not their IDs
var ECSServiceRenderer = ConditionalRenderer(renderECSTopologies, renderParents( report.ECSTask, []string{report.ECSService}, "", ECSTaskRenderer, ), )
ECSServiceRenderer is a Renderer for Amazon ECS services.
not memoised
var ECSTaskRenderer = Memoise(ConditionalRenderer(renderECSTopologies, renderParents( report.Container, []string{report.ECSTask}, UnmanagedID, MakeFilter( IsRunning, ContainerWithImageNameRenderer, ), ), ))
ECSTaskRenderer is a Renderer for Amazon ECS tasks.
var EndpointRenderer = SelectEndpoint
EndpointRenderer is a Renderer which produces a renderable endpoint graph.
var FilterUnconnected = filterUnconnected{/* contains filtered or unexported fields */}
FilterUnconnected is a transformer that filters unconnected nodes
var FilterUnconnectedPseudo = filterUnconnected{/* contains filtered or unexported fields */}
FilterUnconnectedPseudo is a transformer that filters unconnected pseudo nodes
var HostRenderer = MakeReduce( CustomRenderer{RenderFunc: nodes2Hosts, Renderer: ProcessRenderer}, CustomRenderer{RenderFunc: nodes2Hosts, Renderer: ContainerRenderer}, CustomRenderer{RenderFunc: nodes2Hosts, Renderer: ContainerImageRenderer}, CustomRenderer{RenderFunc: nodes2Hosts, Renderer: PodRenderer}, MapEndpoints(endpoint2Host, report.Host), )
HostRenderer is a Renderer which produces a renderable host graph from the host topology.
not memoised
var IsPseudoTopology = IsTopology(Pseudo)
IsPseudoTopology returns true if the node is in a pseudo topology, mimicing the check performed by MakeFilter() instead of the more complex check in IsNotPseudo()
var IsStopped = Complement(IsRunning)
IsStopped checks if the node is *not* a running docker container
var IsSystem = Complement(IsApplication)
IsSystem checks if the node is a "system" node
var KubeControllerRenderer = ConditionalRenderer(renderKubernetesTopologies, renderParents( report.Pod, []string{report.Deployment, report.DaemonSet, report.StatefulSet, report.CronJob}, UnmanagedID, PodRenderer, ), )
KubeControllerRenderer is a Renderer which combines all the 'controller' topologies. 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 PodRenderer = Memoise(ConditionalRenderer(renderKubernetesTopologies, MakeFilter( func(n report.Node) bool { state, ok := n.Latest.Lookup(kubernetes.State) return (!ok || state != kubernetes.StateDeleted) }, MakeReduce( PropagateSingleMetrics(report.Container, MakeMap( Map2Parent([]string{report.Pod}, UnmanagedID), MakeFilter( ComposeFilterFuncs( IsRunning, Complement(isPauseContainer), ), ContainerWithImageNameRenderer, ), ), ), ConnectionJoin(MapPod2IP, report.Pod), ), ), ))
PodRenderer is a Renderer which produces a renderable kubernetes graph by merging the container graph and the pods topology.
var PodServiceRenderer = ConditionalRenderer(renderKubernetesTopologies, renderParents( report.Pod, []string{report.Service}, "", PodRenderer, ), )
PodServiceRenderer is a Renderer which produces a renderable kubernetes services graph by merging the pods graph and the services topology.
not memoised
var ProcessNameRenderer = CustomRenderer{RenderFunc: processes2Names, Renderer: ProcessRenderer}
ProcessNameRenderer is a Renderer which produces a renderable process name graph by munging the progess graph.
not memoised
var ProcessRenderer = Memoise(ColorConnected(endpoints2Processes{}))
ProcessRenderer is a Renderer which produces a renderable process graph by merging the endpoint graph and the process topology. It also colors connected nodes, so we can apply a filter to show/hide unconnected nodes depending on user choice.
var ProcessWithContainerNameRenderer = processWithContainerNameRenderer{ProcessRenderer}
ProcessWithContainerNameRenderer is a Renderer which produces a process graph enriched with container names where appropriate
not memoised
var (
// ServiceNodeIDPrefix is how the ID of all service pseudo nodes begin
ServiceNodeIDPrefix = "service-"
)
var SwarmServiceRenderer = ConditionalRenderer(renderSwarmTopologies, renderParents( report.Container, []string{report.SwarmService}, UnmanagedID, MakeFilter( IsRunning, ContainerWithImageNameRenderer, ), ), )
SwarmServiceRenderer is a Renderer for Docker Swarm services
not memoised
var UncontainedIDPrefix = MakePseudoNodeID(UncontainedID, "")
UncontainedIDPrefix is the prefix of uncontained pseudo nodes
var UnmanagedIDPrefix = MakePseudoNodeID(UnmanagedID, "")
UnmanagedIDPrefix is the prefix of unmanaged pseudo nodes
var WeaveRenderer = MakeMap( MapWeaveIdentity, SelectOverlay, )
WeaveRenderer is a Renderer which produces a renderable weave topology.
not memoised
Functions ¶
func DNSFirstMatch ¶ added in v1.6.6
DNSFirstMatch returns the first DNS name where match() returns true, from a prioritized list of snooped and reverse-resolved DNS names associated with node n.
func IsApplication ¶ added in v0.15.0
IsApplication checks if the node is an "application" node
func IsConnected ¶ added in v0.7.0
IsConnected checks whether the node has been marked with the IsConnectedMark.
func IsInternetNode ¶ added in v1.7.0
IsInternetNode determines whether the node represents the Internet.
func IsNotPseudo ¶ added in v0.16.0
IsNotPseudo returns true if the node is not a pseudo node or internet/service nodes.
func LocalNetworks ¶
LocalNetworks returns a superset of the networks (think: CIDRs) that are "local" from the perspective of each host represented in the report. It's used to determine which nodes in the report are "remote", i.e. outside of our infrastructure.
func MakeGroupNodeTopology ¶ added in v0.15.0
MakeGroupNodeTopology joins the parts of a group topology into the topology of a group node
func MakePseudoNodeID ¶
MakePseudoNodeID joins the parts of an id into the id of a pseudonode
func MapContainer2ContainerImage ¶
MapContainer2ContainerImage maps container Nodes to container image Nodes.
Pseudo nodes are passed straight through.
If this function is given a node without a docker_image_id it will drop that node.
Otherwise, this function will produce a node with the correct ID format for a container image, but without any Major or Minor labels. It does not have enough info to do that, and the resulting graph must be merged with a container image graph to get that info.
func MapContainer2Hostname ¶ added in v0.9.0
MapContainer2Hostname maps container Nodes to 'hostname' renderabled nodes..
func MapContainer2IP ¶ added in v0.7.0
MapContainer2IP maps container nodes to their IP addresses (outputs multiple nodes). This allows container to be joined directly with the endpoint topology.
func MapContainerImage2Name ¶ added in v0.5.0
MapContainerImage2Name ignores image versions
func MapPod2IP ¶ added in v0.16.0
MapPod2IP maps pod nodes to their IP address. This allows pods to be joined directly with the endpoint topology.
func MapProcess2Container ¶
MapProcess2Container maps process Nodes to container Nodes.
Pseudo nodes are passed straight through.
If this function is given a node without a docker_container_id, it will produce an "Uncontained" pseudo node.
Otherwise, this function will produce a node with the correct ID format for a container, but without any Major or Minor labels. It does not have enough info to do that, and the resulting graph must be merged with a container graph to get that info.
func MapToEmpty ¶ added in v0.15.0
MapToEmpty removes all the attributes, children, etc, of a node. Useful when we just want to count the presence of nodes.
func MapWeaveIdentity ¶ added in v1.0.0
MapWeaveIdentity maps an overlay topology node to a weave topology node.
func NewDerivedNode ¶ added in v0.7.0
NewDerivedNode makes a node based on node, but with a new ID
func NewDerivedPseudoNode ¶ added in v0.14.0
NewDerivedPseudoNode makes a new pseudo node with the node as a child
func ParseGroupNodeTopology ¶ added in v1.7.0
ParseGroupNodeTopology returns the parts of a group topology.
func ParsePseudoNodeID ¶ added in v1.7.0
ParsePseudoNodeID returns the joined id parts of a pseudonode ID. If the ID is not recognisable as a pseudonode ID, it is returned as is, with the returned bool set to false. That is convenient because not all pseudonode IDs actually follow the format produced by MakePseudoNodeID.
func ResetCache ¶ added in v0.12.0
func ResetCache()
ResetCache blows away the rendered node cache, and known service cache.
Types ¶
type Condition ¶ added in v0.15.0
Condition is a predecate over the entire report that can evaluate to true or false.
type CustomRenderer ¶ added in v0.7.0
CustomRenderer allow for mapping functions that received the entire topology in one call - useful for functions that need to consider the entire graph. We should minimise the use of this renderer type, as it is very inflexible.
type Filter ¶ added in v0.7.0
type Filter struct { Renderer FilterFunc FilterFunc }
Filter removes nodes from a view based on a predicate.
type FilterFunc ¶ added in v0.15.0
FilterFunc is the function type used by Filters
func AnyFilterFunc ¶ added in v1.3.0
func AnyFilterFunc(fs ...FilterFunc) FilterFunc
AnyFilterFunc checks if any of the filterfuncs matches.
func Complement ¶ added in v0.14.0
func Complement(f FilterFunc) FilterFunc
Complement takes a FilterFunc f and returns a FilterFunc that has the same effects, if any, and returns the opposite truth value.
func ComposeFilterFuncs ¶ added in v0.15.0
func ComposeFilterFuncs(fs ...FilterFunc) FilterFunc
ComposeFilterFuncs composes filterfuncs into a single FilterFunc checking all.
func DoesNotHaveLabel ¶ added in v1.1.0
func DoesNotHaveLabel(labelKey string, labelValue string) FilterFunc
DoesNotHaveLabel checks if the node does NOT have the specified docker label
func HasChildren ¶ added in v0.15.0
func HasChildren(topology string) FilterFunc
HasChildren returns true if the node has no children from the specified topology.
func HasLabel ¶ added in v1.1.0
func HasLabel(labelKey string, labelValue string) FilterFunc
HasLabel checks if the node has the desired docker label
func IsNamespace ¶ added in v0.15.0
func IsNamespace(namespace string) FilterFunc
IsNamespace checks if the node is a pod/service in the specified namespace
func IsTopology ¶ added in v1.6.0
func IsTopology(topology string) FilterFunc
IsTopology checks if the node is from a particular report topology
func (FilterFunc) Transform ¶ added in v1.6.6
func (f FilterFunc) Transform(nodes Nodes) Nodes
Transform applies the filter to all nodes
type Map ¶
Map is a Renderer which produces a set of Nodes from the set of Nodes produced by another Renderer.
type MapFunc ¶
MapFunc is anything which can take an arbitrary Node and return a set of other Nodes.
If the output is empty, the node shall be omitted from the rendered topology.
func Map2Parent ¶ added in v0.15.0
Map2Parent returns a MapFunc which maps Nodes to some parent grouping.
type Nodes ¶ added in v1.6.6
Nodes is the result of Rendering
type Reduce ¶
type Reduce []Renderer
Reduce renderer is a Renderer which merges together the output of several other renderers.
type Renderer ¶
Renderer is something that can render a report to a set of Nodes.
func ColorConnected ¶ added in v0.7.0
ColorConnected colors nodes with the IsConnectedMark key if they have edges to or from them. Edges to/from yourself are not counted here (see #656).
func ConditionalRenderer ¶ added in v0.15.0
ConditionalRenderer renders nothing if the condition is false, otherwise it defers to the wrapped Renderer.
func ConnectionJoin ¶ added in v1.5.0
ConnectionJoin joins the given topology with connections from the endpoints topology, using the toIPs function to extract IPs from the nodes.
func FilterEmpty ¶ added in v0.15.0
FilterEmpty is a Renderer which filters out nodes which have no children from the specified topology.
func MakeFilter ¶ added in v0.12.0
func MakeFilter(f FilterFunc, r Renderer) Renderer
MakeFilter makes a new Filter (that ignores pseudo nodes).
func MakeFilterPseudo ¶ added in v0.16.0
func MakeFilterPseudo(f FilterFunc, r Renderer) Renderer
MakeFilterPseudo makes a new Filter that will not ignore pseudo nodes.
func MakeReduce ¶
MakeReduce is the only sane way to produce a Reduce Renderer.
func MapEndpoints ¶ added in v1.7.0
MapEndpoints creates a renderer for the endpoint topology. Each endpoint is either turned into a pseudo node, or mapped to a node in the specified topology by the supplied function.
func PropagateSingleMetrics ¶ added in v0.16.0
PropagateSingleMetrics creates a renderer which propagates metrics from a node's child to the node. The child is selected based on the specified topology. No metrics are propagated when there is more than one such child.
type TopologySelector ¶ added in v0.7.0
type TopologySelector string
TopologySelector selects a single topology from a report. NB it is also a Renderer!
type Transformer ¶ added in v1.6.6
Transformer is something that transforms one set of Nodes to another set of Nodes.
type Transformers ¶ added in v1.6.6
type Transformers []Transformer
Transformers is a composition of Transformers
func (Transformers) Transform ¶ added in v1.6.6
func (ts Transformers) Transform(nodes Nodes) Nodes
Transform implements Transformer