fix: 限定 Prometheus 目标与发现规则
This commit is contained in:
@@ -3,7 +3,11 @@ import { spawnSync } from "node:child_process";
|
||||
import { rootPath } from "./config";
|
||||
import { isRenderedCliResult } from "./output";
|
||||
import { runPlatformObservabilityCommand } from "./platform-infra-observability";
|
||||
import { resolveTarget } from "./platform-infra-observability/actions";
|
||||
import { readObservabilityConfig } from "./platform-infra-observability/config";
|
||||
import { renderObservabilityPlanFailure } from "./platform-infra-observability/plan-render";
|
||||
import { statusScript } from "./platform-infra-observability/search-script";
|
||||
import { renderManifest } from "./platform-infra-observability/trace-script";
|
||||
|
||||
describe("platform-infra observability progressive disclosure", () => {
|
||||
test("default plan is a bounded table while full and raw preserve the complete plan", async () => {
|
||||
@@ -13,7 +17,7 @@ describe("platform-infra observability progressive disclosure", () => {
|
||||
expect(Buffer.byteLength(compact.renderedText, "utf8")).toBeLessThan(10_240);
|
||||
expect(compact.renderedText).toContain("serviceConnections=8");
|
||||
expect(compact.renderedText).toContain("configRefs=6/6 missing=0");
|
||||
expect(compact.renderedText).toContain("prometheus=true service=prometheus");
|
||||
expect(compact.renderedText).toContain("prometheus=enabled service=prometheus targets=NC01");
|
||||
expect(compact.renderedText).toContain("scrapeSelector=unidesk.ai/metrics=true");
|
||||
expect(compact.renderedText).toContain("--full");
|
||||
expect(compact.renderedText).toContain("--raw");
|
||||
@@ -41,6 +45,44 @@ describe("platform-infra observability progressive disclosure", () => {
|
||||
expect(result.stdout).not.toContain("/tmp/unidesk-cli-output");
|
||||
});
|
||||
|
||||
test("Prometheus manifests and runtime access only apply to YAML-selected targets", async () => {
|
||||
const observability = readObservabilityConfig();
|
||||
const nc01 = resolveTarget(observability, "NC01");
|
||||
const d518 = resolveTarget(observability, "D518");
|
||||
const jd01 = resolveTarget(observability, "JD01");
|
||||
const nc01Manifest = renderManifest(observability, nc01);
|
||||
for (const target of [d518, jd01]) {
|
||||
const manifest = renderManifest(observability, target);
|
||||
expect(manifest).not.toContain("kind: ClusterRole\nmetadata:\n name: platform-infra-prometheus");
|
||||
expect(manifest).not.toContain("kind: PersistentVolumeClaim\nmetadata:\n name: prometheus-data");
|
||||
expect(manifest).not.toContain("app.kubernetes.io/component: metrics-backend");
|
||||
const plan = await runPlatformObservabilityCommand({} as never, ["plan", "--target", target.id]);
|
||||
expect(isRenderedCliResult(plan)).toBe(true);
|
||||
if (!isRenderedCliResult(plan)) throw new Error("expected rendered plan");
|
||||
expect(plan.renderedText).toContain("prometheus=disabled-for-target");
|
||||
expect(plan.renderedText).toContain("objects=8");
|
||||
const script = statusScript(observability, target, false);
|
||||
expect(script).not.toContain("capture_json metrics_deployments");
|
||||
expect(script).not.toContain("prometheus-ready");
|
||||
const query = await runPlatformObservabilityCommand({} as never, ["metrics-query", "--target", target.id, "--query", "up", "--full"]);
|
||||
expect(query).toMatchObject({ metrics: { enabled: false, disposition: "disabled-for-target", targetIds: ["NC01"] } });
|
||||
}
|
||||
expect(nc01Manifest).toContain("kind: ClusterRole\nmetadata:\n name: platform-infra-prometheus");
|
||||
expect(nc01Manifest).toContain("kind: PersistentVolumeClaim\nmetadata:\n name: prometheus-data");
|
||||
});
|
||||
|
||||
test("Prometheus relabel rules prefer an explicit path and only default when absent", () => {
|
||||
const observability = readObservabilityConfig();
|
||||
const manifest = renderManifest(observability, resolveTarget(observability, "NC01"));
|
||||
const explicitPath = "source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]\n action: replace\n target_label: __metrics_path__\n regex: (/.+)";
|
||||
const defaultPath = "source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]\n action: replace\n target_label: __metrics_path__\n regex: ^$\n replacement: /metrics";
|
||||
expect(manifest).toContain("source_labels: [__meta_kubernetes_pod_label_unidesk_ai_metrics]");
|
||||
expect(manifest).toContain('regex: "true"');
|
||||
expect(manifest).toContain(explicitPath);
|
||||
expect(manifest).toContain(defaultPath);
|
||||
expect(manifest.indexOf(explicitPath)).toBeLessThan(manifest.indexOf(defaultPath));
|
||||
});
|
||||
|
||||
test("query commands expose only scoped help", () => {
|
||||
for (const operation of ["search", "trace", "diagnose-code-agent", "metrics-query"]) {
|
||||
const result = cli(["platform-infra", "observability", operation, "--help"]);
|
||||
|
||||
Reference in New Issue
Block a user