From 32ab61746f477cf2bfc0d313539a21d3467d8b73 Mon Sep 17 00:00:00 2001 From: Kristina Durivage Date: Wed, 22 Oct 2025 21:12:16 -0500 Subject: [PATCH] WIP --- .../apps/correlations/legacy_storage.go | 2 +- .../clients/correlations/v0alpha1/index.ts | 1 + .../features/correlations/useCorrelations.ts | 74 ++++++++++++++++--- 3 files changed, 64 insertions(+), 13 deletions(-) diff --git a/pkg/registry/apps/correlations/legacy_storage.go b/pkg/registry/apps/correlations/legacy_storage.go index 733ad4ec330..8c2ebbb65d8 100644 --- a/pkg/registry/apps/correlations/legacy_storage.go +++ b/pkg/registry/apps/correlations/legacy_storage.go @@ -63,7 +63,7 @@ func (s *legacyStorage) List(ctx context.Context, options *internalversion.ListO if options.FieldSelector != nil { for _, r := range options.FieldSelector.Requirements() { switch r.Field { - case "spec.datasource.name": + case "metadata.name": switch r.Operator { case selection.Equals, selection.DoubleEquals: uids = []string{r.Value} diff --git a/public/app/api/clients/correlations/v0alpha1/index.ts b/public/app/api/clients/correlations/v0alpha1/index.ts index 02dd06a3ee2..1b01693ca48 100644 --- a/public/app/api/clients/correlations/v0alpha1/index.ts +++ b/public/app/api/clients/correlations/v0alpha1/index.ts @@ -20,5 +20,6 @@ export const correlationAPIv0alpha1 = generatedAPI.enhanceEndpoints({ return originalQuery(requestOptions); }; }, + // todo - do i add data massaging to list correlations here?? }, }); diff --git a/public/app/features/correlations/useCorrelations.ts b/public/app/features/correlations/useCorrelations.ts index 1ae71f1bc76..e8f577124b9 100644 --- a/public/app/features/correlations/useCorrelations.ts +++ b/public/app/features/correlations/useCorrelations.ts @@ -1,7 +1,17 @@ import { useAsyncFn } from 'react-use'; import { lastValueFrom } from 'rxjs'; -import { getDataSourceSrv, FetchResponse, CorrelationData, CorrelationsData } from '@grafana/runtime'; +import { + getDataSourceSrv, + FetchResponse, + CorrelationData, + CorrelationsData, + config, + CorrelationExternal, + CorrelationQuery, +} from '@grafana/runtime'; +import { correlationAPIv0alpha1 } from 'app/api/clients/correlations/v0alpha1'; +import { CorrelationList, Correlation as CorrelationK8s } from 'app/api/clients/correlations/v0alpha1/endpoints.gen'; import { useGrafana } from 'app/core/context/GrafanaContext'; import { @@ -67,6 +77,33 @@ const toEnrichedCorrelationData = ({ sourceUID, ...correlation }: Correlation): return undefined; }; +const toEnrichedCorrelationDataK8s = (item: CorrelationK8s): CorrelationData | undefined => { + if (item.metadata.name !== undefined) { + const baseCor = { + uid: item.metadata.name, + sourceUID: item.spec.source.name, //todo + label: item.spec.label, + description: item.spec.description, + provisioned: false, // todo + type: item.spec.type, + }; + + if (item.spec.type === 'external') { + const extCorr: CorrelationExternal = { + ...baseCor, + }; + return toEnrichedCorrelationData(extCorr); + } else { + const queryCorr: CorrelationQuery = { + ...baseCor, + }; + return toEnrichedCorrelationData(queryCorr); + } + } else { + return undefined; + } +}; + const validSourceFilter = (correlation: CorrelationData | undefined): correlation is CorrelationData => !!correlation; export const toEnrichedCorrelationsData = (correlationsResponse: CorrelationsResponse): CorrelationsData => { @@ -76,6 +113,13 @@ export const toEnrichedCorrelationsData = (correlationsResponse: CorrelationsRes }; }; +export const toEnrichedCorrelationDataK8s = (correlationsResponse: CorrelationList): CorrelationsData => { + return { + ...correlationsResponse, + correlations: correlationsResponse.items.map(toEnrichedCorrelationDataK8s).filter(validSourceFilter), + }; +}; + export function getData(response: FetchResponse) { return response.data; } @@ -90,17 +134,23 @@ export const useCorrelations = () => { const { backend } = useGrafana(); const [getInfo, get] = useAsyncFn<(params: GetCorrelationsParams) => Promise>( - (params) => - lastValueFrom( - backend.fetch({ - url: '/api/datasources/correlations', - params: { page: params.page }, - method: 'GET', - showErrorAlert: false, - }) - ) - .then(getData) - .then(toEnrichedCorrelationsData), + (params) => { + if (config.featureToggles.kubernetesCorrelations) { + return toEnrichedCorrelationDataK8s(correlationAPIv0alpha1.endpoints.listCorrelation.select({})); + } else { + return lastValueFrom( + backend.fetch({ + url: '/api/datasources/correlations', + params: { page: params.page }, + method: 'GET', + showErrorAlert: false, + }) + ) + .then(getData) + .then(toEnrichedCorrelationsData); + } + }, + [backend] );