private Optional<NodeMessage> feedBlockWarningIfNodeIsBlocking(ClusterStateBundle stateBundle, NodeInfo nodeInfo) {
            // We only show a feed block row if the node is actually blocking feed in the cluster, not
            // just if limits have been exceeded (as feed block may be config disabled).
            // O(n) but n expected to be 0-(very small number) in all realistic cases.
            if (stateBundle.clusterFeedIsBlocked()) {
                var exhaustions = stateBundle.getFeedBlockOrNull().getConcreteExhaustions().stream()
                        .filter(ex -> ex.node.getIndex() == nodeInfo.getNodeIndex())
                        .toList();
                if (!exhaustions.isEmpty()) {
                    var exhaustionsDesc = exhaustions.stream()
                            .map(NodeResourceExhaustion::toShorthandDescription)
                            .collect(Collectors.joining(", "));
                    return Optional.of(new NodeMessage(
                            MessageSeverity.ERROR,
                            String.format("<strong>Node is blocking feed: %s</strong>", HtmlTable.escape(exhaustionsDesc))));
                }
            }
            return Optional.empty();
        }
Renders web page with cluster status.
clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/status/statuspage/VdsClusterHtmlRenderer.java