/
githubmirror
/
ydb-embedded-ui
Обзор
Документация
Войти
/
githubmirror
/
ydb-embedded-ui
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/utils/monitoring.ts
97 строк
3 KB
Hellen
feat: dynamic links for Clusters and Databases tables (#3877)
06 май 2026, 11:57
Не верифицирован
06 май 2026, 11:57
3b1185d
Код
Авторство
О чём код?
import {parseMonitoringField} from '../store/reducers/cluster/parseFields'; import type {MetaBaseClusterInfo, MetaClusterMonitoringData} from '../types/api/meta'; import type {ETenantType, TTenant} from '../types/api/tenant'; interface GetMonitoringLinkProps { monitoring: MetaBaseClusterInfo['solomon']; dbName: string; dbType: ETenantType; clusterName?: string; controlPlane?: TTenant['ControlPlane']; userAttributes?: TTenant['UserAttributes']; } /** * @deprecated Use parseMonitoringField from store/reducers/cluster/parseFields instead. */ export function parseMonitoringData( monitoring: MetaBaseClusterInfo['solomon'], ): MetaClusterMonitoringData | undefined { if (monitoring && typeof monitoring === 'object') { return monitoring; } try { const data = monitoring ? JSON.parse(monitoring) : undefined; if (typeof data === 'object' && 'monitoring_url' in data) { return data; } } catch {} return undefined; } export type GetMonitoringLink = typeof getMonitoringLink; export function getMonitoringLink({ monitoring, dbName, dbType, clusterName, }: GetMonitoringLinkProps) { const data = parseMonitoringField(monitoring); if (!data || typeof data === 'string') { return ''; } const host = data.host ?? 'cluster'; const slot = data.slot ?? 'static'; const finalClusterName = data.cluster_name || clusterName || ''; const url = new URL(data.monitoring_url); if (!url.search) { const dashboard = dbType === 'Serverless' ? data.serverless_dashboard : data.dedicated_dashboard; if (dashboard) { url.pathname += `/${dashboard}`; } } if (!url.searchParams.has('p.cluster')) { url.searchParams.set('p.cluster', finalClusterName); } url.searchParams.set('p.host', host); url.searchParams.set('p.slot', slot); url.searchParams.set('p.database', dbName); return url.toString(); } export type GetMonitoringClusterLink = typeof getMonitoringClusterLink; export function getMonitoringClusterLink( monitoring: MetaBaseClusterInfo['solomon'], clusterName?: string, ) { const data = parseMonitoringField(monitoring); if (!data || typeof data === 'string') { return ''; } const clusterDashboard = data.cluster_dashboard; const finalClusterName = data.cluster_name || clusterName || ''; const url = new URL(data.monitoring_url); if (!url.search && clusterDashboard) { url.pathname += `/${clusterDashboard}/view`; } if (!url.searchParams.has('p.cluster')) { url.searchParams.set('p.cluster', finalClusterName); } url.searchParams.set('p.database', '-'); return url.toString(); }