This change creates a host topology from cluster-wide probe using
kubernetes nodes with cordon/un-cordon control. This also adds the
logic to merge the controls coming from different probes for host
topology.
We should have done this anyway, but I haven't noticed the error
previously. Possibly Go 1.14 is more aggressive about exiting when
some goroutines are still active.
If the probe is configured with `spy.interval` greater than
`publish.interval`, the report to be published can be completely
blank. In that case, skip publishing it so the next time we do have
some data the time-window is correct.
There's no reason to expect anyone is changing their DNS that fast,
and the probe queries all endpoints every time it polls so slowing
down will reduce effort.
Dockershim has added a label `io.kubernetes.docker.type` for at least
four years, where the pause container is of type `podsandbox`. This
should be more reliable than trying to keep up with everyone's name
for the pause container.
Fix a logic error in ECS scale-down button, bad copy/paste in
ActiveControls() and neaten the switch cases in container controls.
Co-Authored-By: Filip Barl <filip@weave.works>
Utility functions to create fake sets of connections for testing, and
then exercising the subset filtering code to check that quantities
come out as expected.
The app will only show one line, regardless of how many connections we
have, so reduce the number to save bandwidth and rendering time.
We filter by choosing a modulus, e.g. send every connection that is a
multiple of 3, or 9, and so on. We avoid multiples of 2 because port
numbers are often a multiple of 2 or 4 for bit-encoding reasons.
The previous code tracked only by four-tuple, which meant that two
connections with same address/port combinations in different namespace
would clash and one would get dropped.
Also previously the tuple was duplicated between the map key and
value, so we remove it from the value.
We only add the namespace in the case that the local address is
loopback, which matches how the rest of Scope treats addresses.
Instead of a whole extra data structure which is quite expensive to
marshal and unmarshal, just send the information in a string. No
clever merging strategy is required - the states are all set in one
place per node type.
It was possible for `t.ebpfTracker` to change underneath this code
while running on a background goroutine, so change it to take
`ebpfTracker` as a parameter.
While we're here, rename the functions to better match what they do.