src/plugins.d/FUNCTION_TOPOLOGY_IMPLEMENTATION_SCOPE.md
This document scopes the work needed to move Netdata topology producers, Cloud aggregation, and the Cloud UI to the production topology schema defined in FUNCTION_TOPOLOGY_DEVELOPER_GUIDE.md and FUNCTION_TOPOLOGY_SCHEMA.json.
It is not an implementation plan for one commit. It is the work map for the backend, frontend, producer, and aggregator changes.
.local/ and are never
committed.Required changes:
src/plugins.d/FUNCTION_TOPOLOGY_SCHEMA.json;Likely files:
src/go/tools/functions-validation/src/plugins.d/FUNCTION_UI_REFERENCE.mdsrc/plugins.d/FUNCTION_UI_DEVELOPER_GUIDE.mdsrc/plugins.d/FUNCTION_TOPOLOGY_SCHEMA.jsonsrc/plugins.d/FUNCTION_TOPOLOGY_DEVELOPER_GUIDE.mdThe schema uses compact columnar tables. Producers should not hand-roll table encoding repeatedly.
Required helpers:
rows / columns / values;const, values, and dict;Likely homes:
src/go/pkg/topology/v1 or src/go/pkg/funcapi/topology:network-connections:
src/collectors/network-viewer.plugin/network-viewer.c;netdata.topology.v1 at
src/collectors/network-viewer.plugin/network-viewer.c:2535;aggregated / mode:aggregated and detailed /
mode:detailed, with aggregated as the default, at
src/collectors/network-viewer.plugin/network-viewer.c:272;mode selector at
src/collectors/network-viewer.plugin/network-viewer.c:1451;src/collectors/network-viewer.plugin/network-viewer.c:2568;src/collectors/network-viewer.plugin/network-viewer.c:2571;src/collectors/network-viewer.plugin/network-viewer.c:2041;data.presentation.
Actor modal socket lists must be derived from evidence by the Cloud
frontend/aggregator during rollout.actor_labels, process
username, process cmdline, self local_ip_count, socket-port inventory,
and modal recipes. Remaining work is integrated UI/aggregator QA.topology:streaming:
src/web/api/functions/function-topology-streaming.c and
src/streaming/stream-path.c;netdata.topology.v1 directly at
src/web/api/functions/function-topology-streaming.c:1870;src/web/api/functions/function-topology-streaming.c:1912;actor_detail table at
src/web/api/functions/function-topology-streaming.c:1255;src/web/api/functions/function-topology-streaming.c:1259;src/web/api/functions/function-topology-streaming.c:1226;actor_labels, complete host labels
where available, host/system metadata labels, OS/architecture/CPU fields, link
metric columns, and modal recipes. Remaining streaming work is parity/UX
validation with the Cloud frontend and Cloud aggregator once those parallel
workers are ready.topology:snmp:
src/go/plugin/go.d/collector/snmp_topology/ and
src/go/pkg/l2topology/;l2topology.Graph projection
from l2topology.Result;netdata.topology.v1 through
src/go/plugin/go.d/collector/snmp_topology/internal/topologyv1;data.presentation;bidirectional and
unidirectional at src/go/pkg/l2topology/topology_adapter_segments_builder_emit.go:60
and src/go/pkg/l2topology/topology_adapter_projection_pairs.go:230;observed_bidirectional or unordered aggregation policy
where discovery direction is noise, preserve LLDP/CDP/FDB/ARP/STP evidence,
keep interface inventory as actor detail/inventory, and move metric query
definitions to overlay templates/refs.vSphere:
src/go/plugin/go.d/collector/vsphere/;netdata.topology.v1 directly from the Go collector;The Cloud frontend compatibility work is outside this repository, but the schema rollout depends on it:
normalizeTopologyPayload(response?.data || {}) and then computes render-time
aggregated links at ${CLOUD_FRONTEND_REPO}/src/domains/functions/useFetch/normalizers/topology/index.js:9;${CLOUD_FRONTEND_REPO}/src/domains/functions/topology/graphAggregation.js:58;source values,
including source === "links", at
${CLOUD_FRONTEND_REPO}/src/domains/functions/components/topology/actorModal/index.js:286;isSelfNode, isDerivedSegmentNode, isDeviceNode,
LLDP/CDP protocol checks, capability icon inference, and hardcoded search
paths inside the temporary legacy adapter only.topology:network-connectionsProducer path:
src/collectors/network-viewer.plugin/network-viewer.cRequired behavior:
data.correlation.points and
data.correlation.claims rows for socket tuple resolution;Validation:
.local/;Current state:
src/collectors/network-viewer.plugin/network-viewer.c now emits compact
actor rows, graph-link rows, and optional socket evidence rows directly in
netdata.topology.v1;topology:streamingProducer paths:
src/web/api/functions/function-topology-streaming.csrc/streaming/stream-path.cRequired behavior:
stream_path as actor detail, not relationship evidence;Validation:
Current state:
src/web/api/functions/function-topology-streaming.c now emits
netdata.topology.v1 directly from the C Function;stream_path, retention,
inbound, and outbound tables are compact columnar sections;data.presentation, including highlight-path selection, legend, link styles,
and graph port-bullet tokens.topology:snmpProducer paths:
src/go/plugin/go.d/collector/snmp_topology/src/go/pkg/l2topology/Required behavior:
canonicalize_unordered when
direction is discovery noise;Validation:
Current state:
src/go/plugin/go.d/collector/snmp_topology/internal/topologyv1;src/go/pkg/l2topology and uses
l2topology.Graph, not the legacy Go topology payload package;json columns where needed;internal/topologymodel, internal/topologyoptions,
internal/topologyshape, internal/topologyenrich, and
internal/topologyv1; see
src/go/plugin/go.d/collector/snmp_topology/ARCHITECTURE.md for the current
maintainer map;actor_labels, promoted
scalar/count actor fields, stable actor_ports rows, structured endpoint
evidence, modal recipes, and payload-level presentation metadata. Remaining
SNMP work is to migrate metric lookup fragments into first-class overlay
templates/refs instead of only preserving them in actor/detail data, plus
integrated UI/aggregator QA.Producer path:
src/go/plugin/go.d/collector/vsphere/Required behavior:
Current state:
netdata.topology.v1 directly from
src/go/plugin/go.d/collector/vsphere/func_topology.go;actor_labels tables with src/go/pkg/topology/v1;data.presentation.Required changes:
presentation.modal recipes for actor/link modals;actor_labels as actor labels instead of raw metadata JSON;Likely frontend areas:
Frontend risks:
The aggregator should be implemented in Go as a separate Cloud component or service, not inside charts-service request routing.
The MVP aggregator must support all topology kinds covered by the production
schema contract. topology:network-connections remains the required
high-cardinality benchmark, but it is not an acceptable production boundary by
itself. The Cloud UI should not need separate aggregation paths for different
topology kinds.
netdata.topology.v1 payloads;netdata.topology.v1 payload with:
Suggested package split:
schema: generated or hand-written Go structs for the topology schema;codec: compact table decode/encode helpers;model: canonical in-memory actors, links, evidence, tables, overlays;aggregate: scope-based actor/link/evidence merge logic;match: declarative correlation-key normalization, priority handling, exact
and partial match resolution, and exact tuple matching;validate: schema and semantic validation;fixtures: sanitized corpus and synthetic scale fixtures.Required behavior:
data.correlation.rules without hardcoding topology-kind-specific key
names in the aggregator;absorb matches,
rewiring incident correlation links to the matched actor with the rule's
output_link_type;link partial
matches, emitting weak semantic correlation links for visible partial matches;preserve;count;actor_labels after actor reference remapping and preserve repeated
values as repeated rows; string and string_ref label columns are
equivalent logical strings and must be normalized before label deduplication;set or append semantics defined by templates.Network socket matching:
The aggregator must have explicit limits:
If a limit is exceeded:
Paged or chunked evidence transport remains a phase-2 option. Phase 1 should make payloads small enough that this is rarely needed.
Required test classes:
.local/ promoted only as non-sensitive
fixtures when safe.topology:network-connections should be the
first high-cardinality producer exercised internally, but it is not the
production boundary for Cloud aggregation.cloud-topology-service in parallel against fixtures and
new-schema payloads. Its MVP is complete only when all topology kinds covered
by this contract pass service-level aggregation tests.cloud-topology-service.POST /api/v3/spaces/{spaceID}/rooms/{roomID}/topology.netdata.topology.v1.topology:network-connections.These items cannot be safely invented from this repository and must be handed
to Cloud backend and DevOps when cloud-topology-service is otherwise ready for
operational integration: