feat(elasticsearch): allow disabling connectivity checks

This commit is contained in:
JcEvoX authored and GitHub committed 2026-08-13 20:11:52 +08:00
1 parent be3336c1ec
commit cce36ae058
12 files changed
+202 -10

No files matched your search

@@ -0,0 +1,20 @@
import { describe, expect, it } from "vitest";
import { buildElasticsearchExternalConfig, elasticsearchConnectivityCheckDisabledFromConfig } from "@/lib/connection/elasticsearchKibanaProxy";
describe("Elasticsearch connectivity-check configuration", () => {
it.each([true, "true", "TRUE", "1", "yes", "YES", "on", "ON"])("reads enabled value %j", (value) => {
expect(elasticsearchConnectivityCheckDisabledFromConfig({ connectivityCheckDisabled: value })).toBe(true);
});
it.each([false, "false", "0", "no", "off", "", 1, null])("rejects disabled value %j", (value) => {
expect(elasticsearchConnectivityCheckDisabledFromConfig({ connectivityCheckDisabled: value })).toBe(false);
});
it("normalizes a legacy string flag when an edited connection is saved", () => {
const disabled = elasticsearchConnectivityCheckDisabledFromConfig({ connectivityCheckDisabled: " yes " });
const saved = buildElasticsearchExternalConfig("direct", "", "", "", disabled);
expect(saved).toEqual({ connectivityCheckDisabled: true });
expect(elasticsearchConnectivityCheckDisabledFromConfig(saved)).toBe(true);
});
});
@@ -5,6 +5,8 @@ export interface ElasticsearchExternalConfig {
kibanaBasePath?: string;
/** GET path for connect/test/health. Empty means GET /. */
connectivityCheckPath?: string;
/** When true, skip the connectivity check entirely (test/open never probes). */
connectivityCheckDisabled?: boolean;
/** Regex collapsing rolling/time-series index suffixes into a `*` pattern. Empty → default; "off" → no grouping. */
indexGroupingPattern?: string;
}
@@ -46,19 +48,28 @@ export function elasticsearchConnectivityCheckPathFromConfig(value: unknown): st
return typeof path === "string" ? normalizeElasticsearchConnectivityCheckPath(path) : "";
}
export function elasticsearchConnectivityCheckDisabledFromConfig(value: unknown): boolean {
const disabled = externalConfigRecord(value).connectivityCheckDisabled;
if (disabled === true) return true;
if (typeof disabled !== "string") return false;
const normalized = disabled.trim().toLowerCase();
return normalized === "true" || normalized === "1" || normalized === "yes" || normalized === "on";
}
export function elasticsearchIndexGroupingPatternFromConfig(value: unknown): string {
const config = externalConfigRecord(value);
const pattern = config.indexGroupingPattern;
return typeof pattern === "string" ? pattern.trim() : "";
}
export function buildElasticsearchExternalConfig(mode: ElasticsearchConnectionMode, kibanaBasePath: string, connectivityCheckPath = "", indexGroupingPattern = ""): ElasticsearchExternalConfig | undefined {
export function buildElasticsearchExternalConfig(mode: ElasticsearchConnectionMode, kibanaBasePath: string, connectivityCheckPath = "", indexGroupingPattern = "", connectivityCheckDisabled = false): ElasticsearchExternalConfig | undefined {
const checkPath = normalizeElasticsearchConnectivityCheckPath(connectivityCheckPath);
const grouping = indexGroupingPattern.trim();
if (mode !== "kibana") {
if (!checkPath && !grouping) return undefined;
if (!checkPath && !grouping && !connectivityCheckDisabled) return undefined;
const config: ElasticsearchExternalConfig = {};
if (checkPath) config.connectivityCheckPath = checkPath;
if (connectivityCheckDisabled) config.connectivityCheckDisabled = true;
if (grouping) config.indexGroupingPattern = grouping;
return config;
}
@@ -66,6 +77,7 @@ export function buildElasticsearchExternalConfig(mode: ElasticsearchConnectionMo
const config: ElasticsearchExternalConfig = { mode: "kibana" };
if (normalizedPath) config.kibanaBasePath = normalizedPath;
if (checkPath) config.connectivityCheckPath = checkPath;
if (connectivityCheckDisabled) config.connectivityCheckDisabled = true;
if (grouping) config.indexGroupingPattern = grouping;
return config;
}