diff --git a/x-pack/platform/plugins/private/translations/translations/fr-FR.json b/x-pack/platform/plugins/private/translations/translations/fr-FR.json index 4044303eb570a..bc2850814bfaf 100644 --- a/x-pack/platform/plugins/private/translations/translations/fr-FR.json +++ b/x-pack/platform/plugins/private/translations/translations/fr-FR.json @@ -25897,7 +25897,6 @@ "xpack.metricsData.assetDetails.metrics.label.diskReadIOPS": "Entrées et sorties par seconde en lecture sur le disque", "xpack.metricsData.assetDetails.metrics.label.diskReadThroughput": "Rendement de lecture du disque", "xpack.metricsData.assetDetails.metrics.label.diskSpaceAvailable": "Espace disque disponible", - "xpack.metricsData.assetDetails.metrics.label.diskSpaceAvailablity": "Disponibilité de l'espace disque", "xpack.metricsData.assetDetails.metrics.label.diskThroughput": "Rendement du disque", "xpack.metricsData.assetDetails.metrics.label.diskUsage": "Utilisation du disque", "xpack.metricsData.assetDetails.metrics.label.diskUsageAverage": "Utilisation moyenne du disque", diff --git a/x-pack/platform/plugins/private/translations/translations/ja-JP.json b/x-pack/platform/plugins/private/translations/translations/ja-JP.json index 1a2be1427e63c..6cd8858f831f4 100644 --- a/x-pack/platform/plugins/private/translations/translations/ja-JP.json +++ b/x-pack/platform/plugins/private/translations/translations/ja-JP.json @@ -25928,7 +25928,6 @@ "xpack.metricsData.assetDetails.metrics.label.diskReadIOPS": "ディスク読み取りIOPS", "xpack.metricsData.assetDetails.metrics.label.diskReadThroughput": "ディスク読み取りスループット", "xpack.metricsData.assetDetails.metrics.label.diskSpaceAvailable": "空きディスク容量", - "xpack.metricsData.assetDetails.metrics.label.diskSpaceAvailablity": "空きディスク容量", "xpack.metricsData.assetDetails.metrics.label.diskThroughput": "Disk Throughput", "xpack.metricsData.assetDetails.metrics.label.diskUsage": "ディスク使用量", "xpack.metricsData.assetDetails.metrics.label.diskUsageAverage": "ディスク使用量(平均)", diff --git a/x-pack/platform/plugins/private/translations/translations/zh-CN.json b/x-pack/platform/plugins/private/translations/translations/zh-CN.json index 9fadbd5c27a2e..200873cdbdd22 100644 --- a/x-pack/platform/plugins/private/translations/translations/zh-CN.json +++ b/x-pack/platform/plugins/private/translations/translations/zh-CN.json @@ -25918,7 +25918,6 @@ "xpack.metricsData.assetDetails.metrics.label.diskReadIOPS": "磁盘读取 IOPS", "xpack.metricsData.assetDetails.metrics.label.diskReadThroughput": "磁盘读取吞吐量", "xpack.metricsData.assetDetails.metrics.label.diskSpaceAvailable": "可用磁盘空间", - "xpack.metricsData.assetDetails.metrics.label.diskSpaceAvailablity": "磁盘空间可用性", "xpack.metricsData.assetDetails.metrics.label.diskThroughput": "磁盘吞吐量", "xpack.metricsData.assetDetails.metrics.label.diskUsage": "磁盘使用率", "xpack.metricsData.assetDetails.metrics.label.diskUsageAverage": "磁盘使用率平均值", diff --git a/x-pack/solutions/observability/plugins/infra/public/components/asset_details/components/kpis/host_kpi_charts.tsx b/x-pack/solutions/observability/plugins/infra/public/components/asset_details/components/kpis/host_kpi_charts.tsx index 2b68627176a0c..ae956913795c2 100644 --- a/x-pack/solutions/observability/plugins/infra/public/components/asset_details/components/kpis/host_kpi_charts.tsx +++ b/x-pack/solutions/observability/plugins/infra/public/components/asset_details/components/kpis/host_kpi_charts.tsx @@ -9,6 +9,7 @@ import React from 'react'; import { EuiFlexItem } from '@elastic/eui'; import type { DataView } from '@kbn/data-views-plugin/public'; import type { Filter, Query, TimeRange } from '@kbn/es-query'; +import type { DataSchemaFormat } from '@kbn/metrics-data-access-plugin/common'; import { Kpi } from './kpi'; import { useHostKpiCharts } from '../../hooks/use_host_metrics_charts'; @@ -20,6 +21,8 @@ export interface HostKpiChartsProps { lastReloadRequestTime?: number; getSubtitle?: (formulaValue: string) => string; loading?: boolean; + + schema?: DataSchemaFormat | null; } export const HostKpiCharts = ({ @@ -30,10 +33,12 @@ export const HostKpiCharts = ({ query, lastReloadRequestTime, loading = false, + schema, }: HostKpiChartsProps) => { const charts = useHostKpiCharts({ dataViewId: dataView?.id, getSubtitle, + schema, }); return ( diff --git a/x-pack/solutions/observability/plugins/infra/public/components/asset_details/hooks/use_host_metrics_charts.ts b/x-pack/solutions/observability/plugins/infra/public/components/asset_details/hooks/use_host_metrics_charts.ts index eee835176f0ed..546780d19eebb 100644 --- a/x-pack/solutions/observability/plugins/infra/public/components/asset_details/hooks/use_host_metrics_charts.ts +++ b/x-pack/solutions/observability/plugins/infra/public/components/asset_details/hooks/use_host_metrics_charts.ts @@ -6,8 +6,7 @@ */ import { i18n } from '@kbn/i18n'; -import { findInventoryModel } from '@kbn/metrics-data-access-plugin/common'; -import { useMemo } from 'react'; +import { DataSchemaFormat, findInventoryModel } from '@kbn/metrics-data-access-plugin/common'; import useAsync from 'react-use/lib/useAsync'; import type { HostMetricTypes } from '../charts/types'; import { useChartSeriesColor } from './use_chart_series_color'; @@ -16,13 +15,20 @@ export const useHostCharts = ({ metric, dataViewId, overview, + schema, }: { metric: HostMetricTypes; dataViewId?: string; overview?: boolean; + schema?: DataSchemaFormat | null; }) => { const { value: charts = [], error } = useAsync(async () => { - const hostCharts = await getHostsCharts({ metric, overview }); + const hostCharts = await getHostsCharts({ + metric, + overview, + schema: schema ?? DataSchemaFormat.ECS, + }); + return hostCharts.map((chart) => ({ ...chart, ...(dataViewId && { @@ -31,7 +37,7 @@ export const useHostCharts = ({ }, }), })); - }, [dataViewId, metric, overview]); + }, [dataViewId, metric, overview, schema]); return { charts, error }; }; @@ -39,22 +45,30 @@ export const useHostCharts = ({ export const useKubernetesCharts = ({ dataViewId, overview, + schema, }: { dataViewId?: string; overview?: boolean; + schema?: DataSchemaFormat | null; }) => { - const model = useMemo(() => findInventoryModel('host'), []); + const model = findInventoryModel('host'); const { value: charts = [], error } = useAsync(async () => { - const { kibernetesNode } = await model.metrics.getCharts(); + const { kubernetesNode } = await model.metrics.getCharts({ + schema: schema ?? DataSchemaFormat.ECS, + }); + + if (!kubernetesNode) { + return []; + } const items = overview - ? [kibernetesNode.xy.nodeCpuCapacity, kibernetesNode.xy.nodeMemoryCapacity] + ? [kubernetesNode.xy.nodeCpuCapacity, kubernetesNode.xy.nodeMemoryCapacity] : [ - kibernetesNode.xy.nodeCpuCapacity, - kibernetesNode.xy.nodeMemoryCapacity, - kibernetesNode.xy.nodeDiskCapacity, - kibernetesNode.xy.nodePodCapacity, + kubernetesNode.xy.nodeCpuCapacity, + kubernetesNode.xy.nodeMemoryCapacity, + kubernetesNode.xy.nodeDiskCapacity, + kubernetesNode.xy.nodePodCapacity, ]; return items.map((chart) => { @@ -67,7 +81,7 @@ export const useKubernetesCharts = ({ }), }; }); - }, [dataViewId, overview, model.metrics]); + }, [model.metrics, schema, overview, dataViewId]); return { charts, error }; }; @@ -83,16 +97,20 @@ export const useHostKpiCharts = ({ dataViewId, seriesColor, getSubtitle, + schema, }: { dataViewId?: string; seriesColor?: string; getSubtitle?: (formulaValue: string) => string; + schema?: DataSchemaFormat | null; }) => { seriesColor = useChartSeriesColor(seriesColor); const { value: charts = [] } = useAsync(async () => { const model = findInventoryModel('host'); - const { cpu, memory, disk } = await model.metrics.getCharts(); + const { cpu, memory, disk } = await model.metrics.getCharts({ + schema: schema ?? DataSchemaFormat.ECS, + }); return [ cpu.metric.cpuUsage, @@ -110,7 +128,7 @@ export const useHostKpiCharts = ({ }, }), })); - }, [dataViewId, seriesColor, getSubtitle]); + }, [dataViewId, seriesColor, getSubtitle, schema]); return charts; }; @@ -118,12 +136,17 @@ export const useHostKpiCharts = ({ const getHostsCharts = async ({ metric, overview, + schema, }: { metric: HostMetricTypes; overview?: boolean; + schema?: DataSchemaFormat | null; }) => { const model = findInventoryModel('host'); - const { cpu, memory, network, disk, logs } = await model.metrics.getCharts(); + + const { cpu, memory, network, disk, logs } = await model.metrics.getCharts({ + schema: schema ?? DataSchemaFormat.ECS, + }); switch (metric) { case 'cpu': diff --git a/x-pack/solutions/observability/plugins/infra/public/pages/metrics/hosts/components/kpis/kpi_charts.tsx b/x-pack/solutions/observability/plugins/infra/public/pages/metrics/hosts/components/kpis/kpi_charts.tsx index 23031bda3f912..29d95a0e57037 100644 --- a/x-pack/solutions/observability/plugins/infra/public/pages/metrics/hosts/components/kpis/kpi_charts.tsx +++ b/x-pack/solutions/observability/plugins/infra/public/pages/metrics/hosts/components/kpis/kpi_charts.tsx @@ -80,6 +80,7 @@ export const KpiCharts = () => { lastReloadRequestTime={afterLoadedState.reloadRequestTime} getSubtitle={afterLoadedState.getSubtitle} loading={loading} + schema={searchCriteria.preferredSchema} /> ); }; diff --git a/x-pack/solutions/observability/plugins/infra/public/pages/metrics/hosts/components/tabs/metrics/metrics_grid.tsx b/x-pack/solutions/observability/plugins/infra/public/pages/metrics/hosts/components/tabs/metrics/metrics_grid.tsx index 49e833a74a33e..fdf29194663af 100644 --- a/x-pack/solutions/observability/plugins/infra/public/pages/metrics/hosts/components/tabs/metrics/metrics_grid.tsx +++ b/x-pack/solutions/observability/plugins/infra/public/pages/metrics/hosts/components/tabs/metrics/metrics_grid.tsx @@ -12,10 +12,15 @@ import { Chart } from './chart'; import { Popover } from '../../common/popover'; import { useMetricsDataViewContext } from '../../../../../../containers/metrics_source'; import { useMetricsCharts } from '../../../hooks/use_metrics_charts'; +import { useUnifiedSearchContext } from '../../../hooks/use_unified_search'; export const MetricsGrid = () => { const { metricsView } = useMetricsDataViewContext(); - const charts = useMetricsCharts({ dataViewId: metricsView?.dataViewReference.id }); + const { searchCriteria } = useUnifiedSearchContext(); + const charts = useMetricsCharts({ + dataViewId: metricsView?.dataViewReference.id, + schema: searchCriteria.preferredSchema, + }); return ( <> diff --git a/x-pack/solutions/observability/plugins/infra/public/pages/metrics/hosts/hooks/use_hosts_table.tsx b/x-pack/solutions/observability/plugins/infra/public/pages/metrics/hosts/hooks/use_hosts_table.tsx index 81b781f67b22b..703b92867ba39 100644 --- a/x-pack/solutions/observability/plugins/infra/public/pages/metrics/hosts/hooks/use_hosts_table.tsx +++ b/x-pack/solutions/observability/plugins/infra/public/pages/metrics/hosts/hooks/use_hosts_table.tsx @@ -17,7 +17,7 @@ import useAsync from 'react-use/lib/useAsync'; import { isEqual } from 'lodash'; import { isNumber } from 'lodash/fp'; import type { CloudProvider } from '@kbn/custom-icons'; -import { findInventoryModel } from '@kbn/metrics-data-access-plugin/common'; +import { DataSchemaFormat, findInventoryModel } from '@kbn/metrics-data-access-plugin/common'; import { EuiToolTip } from '@elastic/eui'; import { EuiBadge } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; @@ -42,6 +42,7 @@ import { TABLE_COLUMN_LABEL, TABLE_CONTENT_LABEL } from '../translations'; import { METRICS_TOOLTIP } from '../../../../common/visualizations'; import { buildCombinedAssetFilter } from '../../../../utils/filters/build'; import { AddDataTroubleshootingPopover } from '../components/table/add_data_troubleshooting_popover'; +import { useUnifiedSearchContext } from './use_unified_search'; /** * Columns and items types @@ -153,11 +154,18 @@ export const useHostsTable = () => { const inventoryModel = findInventoryModel('host'); const [selectedItems, setSelectedItems] = useState([]); const { hostNodes } = useHostsViewContext(); + const { searchCriteria } = useUnifiedSearchContext(); const displayAlerts = hostNodes.some((item) => 'alertsCount' in item); const showApmHostTroubleshooting = hostNodes.some((item) => !item.hasSystemMetrics); - const { value: formulas } = useAsync(() => inventoryModel.metrics.getFormulas()); + const { value: formulas } = useAsync( + () => + inventoryModel.metrics.getFormulas({ + schema: searchCriteria.preferredSchema ?? DataSchemaFormat.ECS, + }), + [inventoryModel.metrics, searchCriteria.preferredSchema] + ); const [{ detailsItemId, pagination, sorting }, setProperties] = useHostsTableUrlState(); const { @@ -496,6 +504,7 @@ export const useHostsTable = () => { align: 'right', }, ], + [ displayAlerts, showApmHostTroubleshooting, diff --git a/x-pack/solutions/observability/plugins/infra/public/pages/metrics/hosts/hooks/use_metrics_charts.ts b/x-pack/solutions/observability/plugins/infra/public/pages/metrics/hosts/hooks/use_metrics_charts.ts index 0dda83519660b..41ab3df164c30 100644 --- a/x-pack/solutions/observability/plugins/infra/public/pages/metrics/hosts/hooks/use_metrics_charts.ts +++ b/x-pack/solutions/observability/plugins/infra/public/pages/metrics/hosts/hooks/use_metrics_charts.ts @@ -7,13 +7,22 @@ import useAsync from 'react-use/lib/useAsync'; import type { LensBreakdownConfig } from '@kbn/lens-embeddable-utils/config_builder'; +import { DataSchemaFormat } from '@kbn/metrics-data-access-plugin/common'; import { findInventoryModel } from '@kbn/metrics-data-access-plugin/common'; import { PAGE_SIZE_OPTIONS } from '../constants'; -export const useMetricsCharts = ({ dataViewId }: { dataViewId?: string }) => { +export const useMetricsCharts = ({ + dataViewId, + schema, +}: { + dataViewId?: string; + schema?: DataSchemaFormat | null; +}) => { const { value: charts = [] } = useAsync(async () => { const model = findInventoryModel('host'); - const { cpu, disk, memory, network } = await model.metrics.getCharts(); + const { cpu, disk, memory, network } = await model.metrics.getCharts({ + schema: schema ?? DataSchemaFormat.ECS, + }); return [ cpu.xy.cpuUsage, @@ -47,7 +56,7 @@ export const useMetricsCharts = ({ dataViewId }: { dataViewId?: string }) => { }, }), })); - }, [dataViewId]); + }, [schema, dataViewId]); return charts; }; diff --git a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/charts/cpu.ts b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/charts/cpu.ts index 424f419836995..555c9c1c7f139 100644 --- a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/charts/cpu.ts +++ b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/charts/cpu.ts @@ -14,120 +14,123 @@ import { DEFAULT_XY_LEGEND, DEFAULT_XY_YBOUNDS, } from '../../../shared/charts/constants'; +import type { FormulasCatalog } from '../../../shared/metrics/types'; import type { LensConfigWithId } from '../../../types'; -import { formulas } from '../formulas'; +import type { HostFormulas } from '../formulas'; -const cpuUsageBreakdown: LensConfigWithId = { - id: 'cpuUsageBreakdown', - chartType: 'xy', - title: CPU_USAGE_LABEL, - layers: [ - { - seriesType: 'area', - type: 'series', - xAxis: '@timestamp', - yAxis: [ - formulas.cpuUsageIowait, - formulas.cpuUsageIrq, - formulas.cpuUsageNice, - formulas.cpuUsageSoftirq, - formulas.cpuUsageSteal, - formulas.cpuUsageUser, - formulas.cpuUsageSystem, - ], - }, - ], - ...DEFAULT_XY_FITTING_FUNCTION, - ...DEFAULT_XY_LEGEND, - ...DEFAULT_XY_YBOUNDS, - ...DEFAULT_XY_HIDDEN_AXIS_TITLE, -}; +export const init = (formulas: FormulasCatalog) => { + const cpuUsageBreakdown: LensConfigWithId = { + id: 'cpuUsageBreakdown', + chartType: 'xy', + title: CPU_USAGE_LABEL, + layers: [ + { + seriesType: 'area', + type: 'series', + xAxis: '@timestamp', + yAxis: [ + formulas.get('cpuUsageIowait'), + formulas.get('cpuUsageIrq'), + formulas.get('cpuUsageNice'), + formulas.get('cpuUsageSoftirq'), + formulas.get('cpuUsageSteal'), + formulas.get('cpuUsageUser'), + formulas.get('cpuUsageSystem'), + ], + }, + ], + ...DEFAULT_XY_FITTING_FUNCTION, + ...DEFAULT_XY_LEGEND, + ...DEFAULT_XY_YBOUNDS, + ...DEFAULT_XY_HIDDEN_AXIS_TITLE, + }; -const loadBreakdown: LensConfigWithId = { - id: 'loadBreakdown', - chartType: 'xy', - title: LOAD_LABEL, - layers: [ - { - seriesType: 'area', - type: 'series', - xAxis: '@timestamp', - yAxis: [formulas.load1m, formulas.load5m, formulas.load15m], - }, - ], - ...DEFAULT_XY_FITTING_FUNCTION, - ...DEFAULT_XY_LEGEND, - ...DEFAULT_XY_HIDDEN_AXIS_TITLE, -}; + const loadBreakdown: LensConfigWithId = { + id: 'loadBreakdown', + chartType: 'xy', + title: LOAD_LABEL, + layers: [ + { + seriesType: 'area', + type: 'series', + xAxis: '@timestamp', + yAxis: [formulas.get('load1m'), formulas.get('load5m'), formulas.get('load15m')], + }, + ], + ...DEFAULT_XY_FITTING_FUNCTION, + ...DEFAULT_XY_LEGEND, + ...DEFAULT_XY_HIDDEN_AXIS_TITLE, + }; -const cpuUsageXY: LensConfigWithId = { - id: 'cpuUsage', - chartType: 'xy', - title: formulas.cpuUsage.label ?? '', - layers: [ - { - seriesType: 'line', - type: 'series', - xAxis: '@timestamp', - yAxis: [formulas.cpuUsage], - }, - ], - ...DEFAULT_XY_FITTING_FUNCTION, - ...DEFAULT_XY_HIDDEN_LEGEND, - ...DEFAULT_XY_HIDDEN_AXIS_TITLE, - ...DEFAULT_XY_YBOUNDS, -}; + const cpuUsageXY: LensConfigWithId = { + id: 'cpuUsage', + chartType: 'xy', + title: formulas.get('cpuUsage').label ?? '', + layers: [ + { + seriesType: 'line', + type: 'series', + xAxis: '@timestamp', + yAxis: [formulas.get('cpuUsage')], + }, + ], + ...DEFAULT_XY_FITTING_FUNCTION, + ...DEFAULT_XY_HIDDEN_LEGEND, + ...DEFAULT_XY_HIDDEN_AXIS_TITLE, + ...DEFAULT_XY_YBOUNDS, + }; -const normalizedLoad1mXY: LensConfigWithId = { - id: 'normalizedLoad1m', - chartType: 'xy', - title: formulas.normalizedLoad1m.label ?? '', - layers: [ - { - seriesType: 'line', - type: 'series', - xAxis: '@timestamp', - yAxis: [formulas.normalizedLoad1m], - }, - { - type: 'reference', - yAxis: [ - { - value: '1', - }, - ], - }, - ], - ...DEFAULT_XY_FITTING_FUNCTION, - ...DEFAULT_XY_HIDDEN_LEGEND, - ...DEFAULT_XY_HIDDEN_AXIS_TITLE, -}; + const normalizedLoad1mXY: LensConfigWithId = { + id: 'normalizedLoad1m', + chartType: 'xy', + title: formulas.get('normalizedLoad1m').label ?? '', + layers: [ + { + seriesType: 'line', + type: 'series', + xAxis: '@timestamp', + yAxis: [formulas.get('normalizedLoad1m')], + }, + { + type: 'reference', + yAxis: [ + { + value: '1', + }, + ], + }, + ], + ...DEFAULT_XY_FITTING_FUNCTION, + ...DEFAULT_XY_HIDDEN_LEGEND, + ...DEFAULT_XY_HIDDEN_AXIS_TITLE, + }; -const cpuUsageMetric: LensConfigWithId = { - id: 'cpuUsage', - chartType: 'metric', - title: formulas.cpuUsage.label ?? '', - trendLine: true, - ...formulas.cpuUsage, -}; + const cpuUsageMetric: LensConfigWithId = { + id: 'cpuUsage', + chartType: 'metric', + title: formulas.get('cpuUsage').label ?? '', + trendLine: true, + ...formulas.get('cpuUsage'), + }; -const normalizedLoad1mMetric: LensConfigWithId = { - id: 'normalizedLoad1m', - chartType: 'metric', - title: formulas.normalizedLoad1m.label ?? '', - trendLine: true, - ...formulas.normalizedLoad1m, -}; + const normalizedLoad1mMetric: LensConfigWithId = { + id: 'normalizedLoad1m', + chartType: 'metric', + title: formulas.get('normalizedLoad1m').label ?? '', + trendLine: true, + ...formulas.get('normalizedLoad1m'), + }; -export const cpu = { - xy: { - cpuUsageBreakdown, - loadBreakdown, - cpuUsage: cpuUsageXY, - normalizedLoad1m: normalizedLoad1mXY, - }, - metric: { - cpuUsage: cpuUsageMetric, - normalizedLoad1m: normalizedLoad1mMetric, - }, -} as const; + return { + xy: { + cpuUsageBreakdown, + loadBreakdown, + cpuUsage: cpuUsageXY, + normalizedLoad1m: normalizedLoad1mXY, + }, + metric: { + cpuUsage: cpuUsageMetric, + normalizedLoad1m: normalizedLoad1mMetric, + }, + }; +}; diff --git a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/charts/disk.ts b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/charts/disk.ts index 2be2a7af81074..6b6f1ffa61133 100644 --- a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/charts/disk.ts +++ b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/charts/disk.ts @@ -7,7 +7,7 @@ import { i18n } from '@kbn/i18n'; import type { LensConfigWithId } from '../../../types'; -import { formulas } from '../formulas'; +import type { HostFormulas } from '../formulas'; import { DEFAULT_XY_FITTING_FUNCTION, DEFAULT_XY_HIDDEN_AXIS_TITLE, @@ -18,205 +18,220 @@ import { DISK_THROUGHPUT_LABEL, DISK_USAGE_BY_MOUNT_POINT_LABEL, } from '../../../shared/charts/constants'; +import type { FormulasCatalog } from '../../../shared/metrics/types'; -const diskIOReadWrite: LensConfigWithId = { - id: 'diskIOReadWrite', - chartType: 'xy', - title: DISK_IOPS_LABEL, - layers: [ - { - seriesType: 'area', - type: 'series', - xAxis: '@timestamp', - yAxis: [ - { - ...formulas.diskIORead, - label: i18n.translate('xpack.metricsData.assetDetails.metricsCharts.metric.label.read', { - defaultMessage: 'Read', - }), - }, - { - ...formulas.diskIOWrite, - label: i18n.translate('xpack.metricsData.assetDetails.metricsCharts.metric.label.write', { - defaultMessage: 'Write', - }), +export const init = (formulas: FormulasCatalog) => { + const diskIOReadWrite: LensConfigWithId = { + id: 'diskIOReadWrite', + chartType: 'xy', + title: DISK_IOPS_LABEL, + layers: [ + { + seriesType: 'area', + type: 'series', + xAxis: '@timestamp', + yAxis: [ + { + ...formulas.get('diskIORead'), + label: i18n.translate( + 'xpack.metricsData.assetDetails.metricsCharts.metric.label.read', + { + defaultMessage: 'Read', + } + ), + }, + { + ...formulas.get('diskIOWrite'), + label: i18n.translate( + 'xpack.metricsData.assetDetails.metricsCharts.metric.label.write', + { + defaultMessage: 'Write', + } + ), + }, + ], + }, + ], + ...DEFAULT_XY_FITTING_FUNCTION, + ...DEFAULT_XY_LEGEND, + ...DEFAULT_XY_HIDDEN_AXIS_TITLE, + }; + + const diskUsageByMountPoint: LensConfigWithId = { + id: 'diskUsageByMountPoint', + chartType: 'xy', + title: DISK_USAGE_BY_MOUNT_POINT_LABEL, + layers: [ + { + seriesType: 'area', + type: 'series', + xAxis: '@timestamp', + breakdown: { + type: 'topValues', + field: 'system.filesystem.mount_point', + size: 5, }, - ], - }, - ], - ...DEFAULT_XY_FITTING_FUNCTION, - ...DEFAULT_XY_LEGEND, - ...DEFAULT_XY_HIDDEN_AXIS_TITLE, -}; + yAxis: [ + { + ...formulas.get('diskUsageAverage'), + label: i18n.translate( + 'xpack.metricsData.assetDetails.metricsCharts.diskUsage.label.used', + { + defaultMessage: 'Used', + } + ), + }, + ], + }, + ], + ...DEFAULT_XY_FITTING_FUNCTION, + ...DEFAULT_XY_LEGEND, + ...DEFAULT_XY_YBOUNDS, + ...DEFAULT_XY_HIDDEN_AXIS_TITLE, + }; -const diskUsageByMountPoint: LensConfigWithId = { - id: 'diskUsageByMountPoint', - chartType: 'xy', - title: DISK_USAGE_BY_MOUNT_POINT_LABEL, - layers: [ - { - seriesType: 'area', - type: 'series', - xAxis: '@timestamp', - breakdown: { - type: 'topValues', - field: 'system.filesystem.mount_point', - size: 5, + const diskThroughputReadWrite: LensConfigWithId = { + id: 'diskThroughputReadWrite', + chartType: 'xy', + title: DISK_THROUGHPUT_LABEL, + layers: [ + { + seriesType: 'area', + type: 'series', + xAxis: '@timestamp', + yAxis: [ + { + ...formulas.get('diskReadThroughput'), + label: i18n.translate( + 'xpack.metricsData.assetDetails.metricsCharts.metric.label.read', + { + defaultMessage: 'Read', + } + ), + }, + { + ...formulas.get('diskWriteThroughput'), + label: i18n.translate( + 'xpack.metricsData.assetDetails.metricsCharts.metric.label.write', + { + defaultMessage: 'Write', + } + ), + }, + ], }, - yAxis: [ - { - ...formulas.diskUsageAverage, - label: i18n.translate( - 'xpack.metricsData.assetDetails.metricsCharts.diskUsage.label.used', - { - defaultMessage: 'Used', - } - ), - }, - ], - }, - ], - ...DEFAULT_XY_FITTING_FUNCTION, - ...DEFAULT_XY_LEGEND, - ...DEFAULT_XY_YBOUNDS, - ...DEFAULT_XY_HIDDEN_AXIS_TITLE, -}; + ], + ...DEFAULT_XY_FITTING_FUNCTION, + ...DEFAULT_XY_LEGEND, + ...DEFAULT_XY_HIDDEN_AXIS_TITLE, + }; -const diskThroughputReadWrite: LensConfigWithId = { - id: 'diskThroughputReadWrite', - chartType: 'xy', - title: DISK_THROUGHPUT_LABEL, - layers: [ - { - seriesType: 'area', - type: 'series', - xAxis: '@timestamp', - yAxis: [ - { - ...formulas.diskReadThroughput, - label: i18n.translate('xpack.metricsData.assetDetails.metricsCharts.metric.label.read', { - defaultMessage: 'Read', - }), - }, - { - ...formulas.diskWriteThroughput, - label: i18n.translate('xpack.metricsData.assetDetails.metricsCharts.metric.label.write', { - defaultMessage: 'Write', - }), - }, - ], - }, - ], - ...DEFAULT_XY_FITTING_FUNCTION, - ...DEFAULT_XY_LEGEND, - ...DEFAULT_XY_HIDDEN_AXIS_TITLE, -}; + const diskSpaceAvailable: LensConfigWithId = { + id: 'diskSpaceAvailable', + chartType: 'xy', + title: formulas.get('diskSpaceAvailable').label ?? '', + layers: [ + { + seriesType: 'line', + type: 'series', + xAxis: '@timestamp', + yAxis: [formulas.get('diskSpaceAvailable')], + }, + ], + ...DEFAULT_XY_FITTING_FUNCTION, + ...DEFAULT_XY_HIDDEN_LEGEND, + ...DEFAULT_XY_HIDDEN_AXIS_TITLE, + }; -const diskSpaceAvailable: LensConfigWithId = { - id: 'diskSpaceAvailable', - chartType: 'xy', - title: formulas.diskSpaceAvailable.label ?? '', - layers: [ - { - seriesType: 'line', - type: 'series', - xAxis: '@timestamp', - yAxis: [formulas.diskSpaceAvailable], - }, - ], - ...DEFAULT_XY_FITTING_FUNCTION, - ...DEFAULT_XY_HIDDEN_LEGEND, - ...DEFAULT_XY_HIDDEN_AXIS_TITLE, -}; + const diskIORead: LensConfigWithId = { + id: 'diskIORead', + chartType: 'xy', + title: formulas.get('diskIORead').label ?? '', + layers: [ + { + seriesType: 'line', + type: 'series', + xAxis: '@timestamp', + yAxis: [formulas.get('diskIORead')], + }, + ], + ...DEFAULT_XY_FITTING_FUNCTION, + ...DEFAULT_XY_HIDDEN_LEGEND, + ...DEFAULT_XY_HIDDEN_AXIS_TITLE, + }; -const diskIORead: LensConfigWithId = { - id: 'diskIORead', - chartType: 'xy', - title: formulas.diskIORead.label ?? '', - layers: [ - { - seriesType: 'line', - type: 'series', - xAxis: '@timestamp', - yAxis: [formulas.diskIORead], - }, - ], - ...DEFAULT_XY_FITTING_FUNCTION, - ...DEFAULT_XY_HIDDEN_LEGEND, - ...DEFAULT_XY_HIDDEN_AXIS_TITLE, -}; + const diskIOWrite: LensConfigWithId = { + id: 'diskIOWrite', + chartType: 'xy', + title: formulas.get('diskIOWrite').label ?? '', + layers: [ + { + seriesType: 'line', + type: 'series', + xAxis: '@timestamp', + yAxis: [formulas.get('diskIOWrite')], + }, + ], + ...DEFAULT_XY_FITTING_FUNCTION, + ...DEFAULT_XY_HIDDEN_LEGEND, + ...DEFAULT_XY_HIDDEN_AXIS_TITLE, + }; -const diskIOWrite: LensConfigWithId = { - id: 'diskIOWrite', - chartType: 'xy', - title: formulas.diskIOWrite.label ?? '', - layers: [ - { - seriesType: 'line', - type: 'series', - xAxis: '@timestamp', - yAxis: [formulas.diskIOWrite], - }, - ], - ...DEFAULT_XY_FITTING_FUNCTION, - ...DEFAULT_XY_HIDDEN_LEGEND, - ...DEFAULT_XY_HIDDEN_AXIS_TITLE, -}; + const diskReadThroughput: LensConfigWithId = { + id: 'diskReadThroughput', + chartType: 'xy', + title: formulas.get('diskReadThroughput').label ?? '', + layers: [ + { + seriesType: 'line', + type: 'series', + xAxis: '@timestamp', + yAxis: [formulas.get('diskReadThroughput')], + }, + ], + ...DEFAULT_XY_FITTING_FUNCTION, + ...DEFAULT_XY_HIDDEN_LEGEND, + ...DEFAULT_XY_HIDDEN_AXIS_TITLE, + }; -const diskReadThroughput: LensConfigWithId = { - id: 'diskReadThroughput', - chartType: 'xy', - title: formulas.diskReadThroughput.label ?? '', - layers: [ - { - seriesType: 'line', - type: 'series', - xAxis: '@timestamp', - yAxis: [formulas.diskReadThroughput], - }, - ], - ...DEFAULT_XY_FITTING_FUNCTION, - ...DEFAULT_XY_HIDDEN_LEGEND, - ...DEFAULT_XY_HIDDEN_AXIS_TITLE, -}; + const diskWriteThroughput: LensConfigWithId = { + id: 'diskWriteThroughput', + chartType: 'xy', + title: formulas.get('diskWriteThroughput').label ?? '', + layers: [ + { + seriesType: 'line', + type: 'series', + xAxis: '@timestamp', + yAxis: [formulas.get('diskWriteThroughput')], + }, + ], + ...DEFAULT_XY_FITTING_FUNCTION, + ...DEFAULT_XY_HIDDEN_LEGEND, + ...DEFAULT_XY_HIDDEN_AXIS_TITLE, + }; -const diskWriteThroughput: LensConfigWithId = { - id: 'diskWriteThroughput', - chartType: 'xy', - title: formulas.diskWriteThroughput.label ?? '', - layers: [ - { - seriesType: 'line', - type: 'series', - xAxis: '@timestamp', - yAxis: [formulas.diskWriteThroughput], - }, - ], - ...DEFAULT_XY_FITTING_FUNCTION, - ...DEFAULT_XY_HIDDEN_LEGEND, - ...DEFAULT_XY_HIDDEN_AXIS_TITLE, -}; + const diskUsageMetric: LensConfigWithId = { + id: 'diskUsage', + chartType: 'metric', + title: formulas.get('diskUsage').label ?? '', + trendLine: true, + ...formulas.get('diskUsage'), + }; -const diskUsageMetric: LensConfigWithId = { - id: 'diskUsage', - chartType: 'metric', - title: formulas.diskUsage.label ?? '', - trendLine: true, - ...formulas.diskUsage, + return { + xy: { + diskThroughputReadWrite, + diskUsageByMountPoint, + diskIOReadWrite, + diskSpaceAvailable, + diskIORead, + diskIOWrite, + diskReadThroughput, + diskWriteThroughput, + }, + metric: { + diskUsage: diskUsageMetric, + }, + }; }; - -export const disk = { - xy: { - diskThroughputReadWrite, - diskUsageByMountPoint, - diskIOReadWrite, - diskSpaceAvailable, - diskIORead, - diskIOWrite, - diskReadThroughput, - diskWriteThroughput, - }, - metric: { - diskUsage: diskUsageMetric, - }, -} as const; diff --git a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/charts/index.ts b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/charts/index.ts index a11ac434da5c1..8e5420e8ae638 100644 --- a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/charts/index.ts +++ b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/charts/index.ts @@ -5,21 +5,29 @@ * 2.0. */ -import { cpu } from './cpu'; -import { disk } from './disk'; -import { memory } from './memory'; -import { network } from './network'; +import { init as initCpuCharts } from './cpu'; +import { init as initDiskCharts } from './disk'; +import { init as initMemoryCharts } from './memory'; +import { init as initNetworkCharts } from './network'; import { logs } from './logs'; import { charts as kubernetesNodeCharts } from '../../../kubernetes/node/metrics'; -import type { LensMetricChartConfig } from '../../../shared/metrics/types'; +import { + DataSchemaFormat, + type ChartsConfigMap, + type FormulasCatalog, +} from '../../../shared/metrics/types'; +import type { HostFormulas } from '../formulas'; -export const charts = { - cpu, - disk, - memory, - network, - logs, - kibernetesNode: kubernetesNodeCharts.node, -} satisfies LensMetricChartConfig; - -export type HostCharts = typeof charts; +export const initCharts = (formulas: FormulasCatalog) => { + return { + cpu: initCpuCharts(formulas), + disk: initDiskCharts(formulas), + memory: initMemoryCharts(formulas), + network: initNetworkCharts(formulas), + logs, + ...(formulas.schema === DataSchemaFormat.ECS + ? { kubernetesNode: kubernetesNodeCharts.node } + : {}), + } satisfies ChartsConfigMap; +}; +export type HostCharts = ReturnType; diff --git a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/charts/memory.ts b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/charts/memory.ts index c93c0aad06b13..793f3f60daaae 100644 --- a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/charts/memory.ts +++ b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/charts/memory.ts @@ -7,7 +7,6 @@ import { i18n } from '@kbn/i18n'; import type { LensConfigWithId } from '../../../types'; -import { formulas } from '../formulas'; import { DEFAULT_XY_FITTING_FUNCTION, DEFAULT_XY_HIDDEN_AXIS_TITLE, @@ -16,93 +15,106 @@ import { DEFAULT_XY_YBOUNDS, MEMORY_USAGE_LABEL, } from '../../../shared/charts/constants'; +import type { FormulasCatalog } from '../../../shared/metrics/types'; +import type { HostFormulas } from '../formulas'; -const memoryUsageBreakdown: LensConfigWithId = { - id: 'memoryUsageBreakdown', - chartType: 'xy', - title: MEMORY_USAGE_LABEL, - layers: [ - { - seriesType: 'area', - type: 'series', - xAxis: '@timestamp', - yAxis: [ - { - ...formulas.memoryCache, - label: i18n.translate('xpack.metricsData.assetDetails.metricsCharts.metric.label.cache', { - defaultMessage: 'Cache', - }), - }, - { - ...formulas.memoryUsed, - label: i18n.translate('xpack.metricsData.assetDetails.metricsCharts.metric.label.used', { - defaultMessage: 'Used', - }), - }, - { - ...formulas.memoryFreeExcludingCache, - label: i18n.translate('xpack.metricsData.assetDetails.metricsCharts.metric.label.free', { - defaultMessage: 'Free', - }), - }, - ], - }, - ], - ...DEFAULT_XY_FITTING_FUNCTION, - ...DEFAULT_XY_LEGEND, - ...DEFAULT_XY_HIDDEN_AXIS_TITLE, -}; +export const init = (formulas: FormulasCatalog) => { + const memoryUsageBreakdown: LensConfigWithId = { + id: 'memoryUsageBreakdown', + chartType: 'xy', + title: MEMORY_USAGE_LABEL, + layers: [ + { + seriesType: 'area', + type: 'series', + xAxis: '@timestamp', + yAxis: [ + { + ...formulas.get('memoryCache'), + label: i18n.translate( + 'xpack.metricsData.assetDetails.metricsCharts.metric.label.cache', + { + defaultMessage: 'Cache', + } + ), + }, + { + ...formulas.get('memoryUsed'), + label: i18n.translate( + 'xpack.metricsData.assetDetails.metricsCharts.metric.label.used', + { + defaultMessage: 'Used', + } + ), + }, + { + ...formulas.get('memoryFreeExcludingCache'), + label: i18n.translate( + 'xpack.metricsData.assetDetails.metricsCharts.metric.label.free', + { + defaultMessage: 'Free', + } + ), + }, + ], + }, + ], + ...DEFAULT_XY_FITTING_FUNCTION, + ...DEFAULT_XY_LEGEND, + ...DEFAULT_XY_HIDDEN_AXIS_TITLE, + }; -const memoryUsageXY: LensConfigWithId = { - id: 'memoryUsage', - chartType: 'xy', - title: formulas.memoryUsage.label ?? '', - layers: [ - { - seriesType: 'line', - type: 'series', - xAxis: '@timestamp', - yAxis: [formulas.memoryUsage], - }, - ], - ...DEFAULT_XY_FITTING_FUNCTION, - ...DEFAULT_XY_HIDDEN_LEGEND, - ...DEFAULT_XY_YBOUNDS, - ...DEFAULT_XY_HIDDEN_AXIS_TITLE, -}; + const memoryUsageXY: LensConfigWithId = { + id: 'memoryUsage', + chartType: 'xy', + title: formulas.get('memoryUsage').label ?? '', + layers: [ + { + seriesType: 'line', + type: 'series', + xAxis: '@timestamp', + yAxis: [formulas.get('memoryUsage')], + }, + ], + ...DEFAULT_XY_FITTING_FUNCTION, + ...DEFAULT_XY_HIDDEN_LEGEND, + ...DEFAULT_XY_YBOUNDS, + ...DEFAULT_XY_HIDDEN_AXIS_TITLE, + }; -const memoryFree: LensConfigWithId = { - id: 'memoryFree', - chartType: 'xy', - title: formulas.memoryFree.label ?? '', - layers: [ - { - seriesType: 'line', - type: 'series', - xAxis: '@timestamp', - yAxis: [formulas.memoryFree], - }, - ], - ...DEFAULT_XY_FITTING_FUNCTION, - ...DEFAULT_XY_HIDDEN_LEGEND, - ...DEFAULT_XY_HIDDEN_AXIS_TITLE, -}; + const memoryFree: LensConfigWithId = { + id: 'memoryFree', + chartType: 'xy', + title: formulas.get('memoryFree').label ?? '', + layers: [ + { + seriesType: 'line', + type: 'series', + xAxis: '@timestamp', + yAxis: [formulas.get('memoryFree')], + }, + ], + ...DEFAULT_XY_FITTING_FUNCTION, + ...DEFAULT_XY_HIDDEN_LEGEND, + ...DEFAULT_XY_HIDDEN_AXIS_TITLE, + }; -const memoryUsageMetric: LensConfigWithId = { - id: 'memoryUsage', - chartType: 'metric', - title: formulas.memoryUsage.label ?? '', - trendLine: true, - ...formulas.memoryUsage, -}; + const memoryUsageMetric: LensConfigWithId = { + id: 'memoryUsage', + chartType: 'metric', + title: formulas.get('memoryUsage').label ?? '', + trendLine: true, + ...formulas.get('memoryUsage'), + }; -export const memory = { - xy: { - memoryUsageBreakdown, - memoryUsage: memoryUsageXY, - memoryFree, - }, - metric: { - memoryUsage: memoryUsageMetric, - }, + return { + xy: { + memoryUsageBreakdown, + memoryUsage: memoryUsageXY, + memoryFree, + }, + metric: { + memoryUsage: memoryUsageMetric, + }, + }; }; diff --git a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/charts/network.ts b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/charts/network.ts index d52ba12ae3109..5e0dff7872cf4 100644 --- a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/charts/network.ts +++ b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/charts/network.ts @@ -6,7 +6,6 @@ */ import type { LensConfigWithId } from '../../../types'; -import { formulas } from '../formulas'; import { DEFAULT_XY_FITTING_FUNCTION, DEFAULT_XY_HIDDEN_AXIS_TITLE, @@ -16,71 +15,75 @@ import { RX_LABEL, TX_LABEL, } from '../../../shared/charts/constants'; +import type { FormulasCatalog } from '../../../shared/metrics/types'; +import type { HostFormulas } from '../formulas'; -const rxTx: LensConfigWithId = { - id: 'rxTx', - chartType: 'xy', - title: NETWORK_LABEL, - layers: [ - { - seriesType: 'area', - type: 'series', - xAxis: '@timestamp', - yAxis: [ - { - ...formulas.rx, - label: RX_LABEL, - }, - { - ...formulas.tx, - label: TX_LABEL, - }, - ], - }, - ], - ...DEFAULT_XY_FITTING_FUNCTION, - ...DEFAULT_XY_LEGEND, - ...DEFAULT_XY_HIDDEN_AXIS_TITLE, -}; +export const init = (formulas: FormulasCatalog) => { + const rxTx: LensConfigWithId = { + id: 'rxTx', + chartType: 'xy', + title: NETWORK_LABEL, + layers: [ + { + seriesType: 'area', + type: 'series', + xAxis: '@timestamp', + yAxis: [ + { + ...formulas.get('rx'), + label: RX_LABEL, + }, + { + ...formulas.get('tx'), + label: TX_LABEL, + }, + ], + }, + ], + ...DEFAULT_XY_FITTING_FUNCTION, + ...DEFAULT_XY_LEGEND, + ...DEFAULT_XY_HIDDEN_AXIS_TITLE, + }; -const rx: LensConfigWithId = { - id: 'rx', - chartType: 'xy', - title: formulas.rx.label ?? '', - layers: [ - { - seriesType: 'line', - type: 'series', - xAxis: '@timestamp', - yAxis: [formulas.rx], - }, - ], - ...DEFAULT_XY_FITTING_FUNCTION, - ...DEFAULT_XY_HIDDEN_LEGEND, - ...DEFAULT_XY_HIDDEN_AXIS_TITLE, -}; + const rx: LensConfigWithId = { + id: 'rx', + chartType: 'xy', + title: formulas.get('rx').label ?? '', + layers: [ + { + seriesType: 'line', + type: 'series', + xAxis: '@timestamp', + yAxis: [formulas.get('rx')], + }, + ], + ...DEFAULT_XY_FITTING_FUNCTION, + ...DEFAULT_XY_HIDDEN_LEGEND, + ...DEFAULT_XY_HIDDEN_AXIS_TITLE, + }; + + const tx: LensConfigWithId = { + id: 'tx', + chartType: 'xy', + title: formulas.get('tx').label ?? '', + layers: [ + { + seriesType: 'line', + type: 'series', + xAxis: '@timestamp', + yAxis: [formulas.get('tx')], + }, + ], + ...DEFAULT_XY_FITTING_FUNCTION, + ...DEFAULT_XY_HIDDEN_LEGEND, + ...DEFAULT_XY_HIDDEN_AXIS_TITLE, + }; -const tx: LensConfigWithId = { - id: 'tx', - chartType: 'xy', - title: formulas.tx.label ?? '', - layers: [ - { - seriesType: 'line', - type: 'series', - xAxis: '@timestamp', - yAxis: [formulas.tx], + return { + xy: { + rxTx, + rx, + tx, }, - ], - ...DEFAULT_XY_FITTING_FUNCTION, - ...DEFAULT_XY_HIDDEN_LEGEND, - ...DEFAULT_XY_HIDDEN_AXIS_TITLE, + } as const; }; - -export const network = { - xy: { - rxTx, - rx, - tx, - }, -} as const; diff --git a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/formulas/cpu.ts b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/formulas/cpu.ts index 3ee08c028f8fb..27ac3bc271ffe 100644 --- a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/formulas/cpu.ts +++ b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/formulas/cpu.ts @@ -6,7 +6,6 @@ */ import { i18n } from '@kbn/i18n'; -import type { LensBaseLayer } from '@kbn/lens-embeddable-utils/config_builder'; import { CPU_USAGE_LABEL, LOAD_15M_LABEL, @@ -14,101 +13,146 @@ import { LOAD_5M_LABEL, NORMALIZED_LOAD_LABEL, } from '../../../shared/charts/constants'; +import type { SchemaBasedFormula } from '../../../shared/metrics/types'; -export const cpuUsageIowait: LensBaseLayer = { +export const cpuUsageIowait: SchemaBasedFormula = { label: i18n.translate('xpack.metricsData.assetDetails.formulas.cpuUsage.iowaitLabel', { defaultMessage: 'iowait', }), - value: 'average(system.cpu.iowait.pct) / max(system.cpu.cores)', + value: { + ecs: 'average(system.cpu.iowait.pct) / max(system.cpu.cores)', + semconv: + "average(metrics.system.cpu.utilization,kql='state: wait') / max(metrics.system.cpu.logical.count)", + }, format: 'percent', decimals: 1, }; -export const cpuUsageIrq: LensBaseLayer = { +export const cpuUsageIrq: SchemaBasedFormula = { label: i18n.translate('xpack.metricsData.assetDetails.formulas.cpuUsage.irqLabel', { defaultMessage: 'irq', }), - value: 'average(system.cpu.irq.pct) / max(system.cpu.cores)', + value: { + ecs: 'average(system.cpu.irq.pct) / max(system.cpu.cores)', + semconv: + "average(metrics.system.cpu.utilization,kql='state: interrupt') / max(metrics.system.cpu.logical.count)", + }, format: 'percent', decimals: 1, }; -export const cpuUsageNice: LensBaseLayer = { +export const cpuUsageNice: SchemaBasedFormula = { label: i18n.translate('xpack.metricsData.assetDetails.formulas.cpuUsage.niceLabel', { defaultMessage: 'nice', }), - value: 'average(system.cpu.nice.norm.pct) / max(system.cpu.cores)', + value: { + ecs: 'average(system.cpu.nice.norm.pct) / max(system.cpu.cores)', + semconv: + "average(metrics.system.cpu.utilization,kql='state: nice') / max(metrics.system.cpu.logical.count)", + }, format: 'percent', decimals: 1, }; -export const cpuUsageSoftirq: LensBaseLayer = { +export const cpuUsageSoftirq: SchemaBasedFormula = { label: i18n.translate('xpack.metricsData.assetDetails.formulas.cpuUsage.softirqLabel', { defaultMessage: 'softirq', }), - value: 'average(system.cpu.softirq.pct) / max(system.cpu.cores)', + value: { + ecs: 'average(system.cpu.softirq.pct) / max(system.cpu.cores)', + semconv: + "average(metrics.system.cpu.utilization,kql='state: softirq') / max(metrics.system.cpu.logical.count)", + }, format: 'percent', decimals: 1, }; -export const cpuUsageSteal: LensBaseLayer = { +export const cpuUsageSteal: SchemaBasedFormula = { label: i18n.translate('xpack.metricsData.assetDetails.formulas.cpuUsage.stealLabel', { defaultMessage: 'steal', }), - value: 'average(system.cpu.steal.pct) / max(system.cpu.cores)', + value: { + ecs: 'average(system.cpu.steal.pct) / max(system.cpu.cores)', + semconv: + "average(metrics.system.cpu.utilization,kql='state: steal') / max(metrics.system.cpu.logical.count)", + }, format: 'percent', decimals: 1, }; -export const cpuUsageSystem: LensBaseLayer = { +export const cpuUsageSystem: SchemaBasedFormula = { label: i18n.translate('xpack.metricsData.assetDetails.formulas.cpuUsage.systemLabel', { defaultMessage: 'system', }), - value: 'average(system.cpu.system.pct) / max(system.cpu.cores)', + value: { + ecs: 'average(system.cpu.system.pct) / max(system.cpu.cores)', + semconv: + "average(metrics.system.cpu.utilization,kql='state: system') / max(metrics.system.cpu.logical.count)", + }, format: 'percent', decimals: 1, }; -export const cpuUsageUser: LensBaseLayer = { +export const cpuUsageUser: SchemaBasedFormula = { label: i18n.translate('xpack.metricsData.assetDetails.formulas.cpuUsage.userLabel', { defaultMessage: 'user', }), - value: 'average(system.cpu.user.pct) / max(system.cpu.cores)', + value: { + ecs: 'average(system.cpu.user.pct) / max(system.cpu.cores)', + semconv: + "average(metrics.system.cpu.utilization,kql='state: user') / max(metrics.system.cpu.logical.count)", + }, format: 'percent', decimals: 1, }; -export const cpuUsage: LensBaseLayer = { +export const cpuUsage: SchemaBasedFormula = { label: CPU_USAGE_LABEL, - value: 'average(system.cpu.total.norm.pct)', + value: { + ecs: 'average(system.cpu.total.norm.pct)', + semconv: + "1-(average(metrics.system.cpu.utilization,kql='state: idle') + average(metrics.system.cpu.utilization,kql='state: wait'))", + }, format: 'percent', decimals: 0, }; -export const load1m: LensBaseLayer = { +export const load1m: SchemaBasedFormula = { label: LOAD_1M_LABEL, - value: 'average(system.load.1)', + value: { + ecs: 'average(system.load.1)', + semconv: 'average(metrics.system.cpu.load_average.1m)', + }, format: 'number', decimals: 1, }; -export const load5m: LensBaseLayer = { +export const load5m: SchemaBasedFormula = { label: LOAD_5M_LABEL, - value: 'average(system.load.5)', + value: { + ecs: 'average(system.load.5)', + semconv: 'average(metrics.system.cpu.load_average.5m)', + }, format: 'number', decimals: 1, }; -export const load15m: LensBaseLayer = { +export const load15m: SchemaBasedFormula = { label: LOAD_15M_LABEL, - value: 'average(system.load.15)', + value: { + ecs: 'average(system.load.15)', + semconv: 'average(metrics.system.cpu.load_average.15m)', + }, format: 'number', decimals: 1, }; -export const normalizedLoad1m: LensBaseLayer = { +export const normalizedLoad1m: SchemaBasedFormula = { label: NORMALIZED_LOAD_LABEL, - value: 'average(system.load.1) / max(system.load.cores)', + value: { + ecs: 'average(system.load.1) / max(system.load.cores)', + semconv: 'average(metrics.system.cpu.load_average.1m) / max(metrics.system.cpu.logical.count)', + }, format: 'percent', decimals: 0, }; diff --git a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/formulas/disk.ts b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/formulas/disk.ts index 9eae6986a6065..4c53097df67f3 100644 --- a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/formulas/disk.ts +++ b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/formulas/disk.ts @@ -5,73 +5,88 @@ * 2.0. */ -import type { LensBaseLayer } from '@kbn/lens-embeddable-utils/config_builder'; import { DISK_READ_IOPS_LABEL, DISK_READ_THROUGHPUT_LABEL, - DISK_SPACE_AVAILABILITY_LABEL, DISK_SPACE_AVAILABLE_LABEL, DISK_USAGE_AVERAGE_LABEL, DISK_USAGE_LABEL, DISK_WRITE_IOPS_LABEL, DISK_WRITE_THROUGHPUT_LABEL, } from '../../../shared/charts/constants'; +import type { SchemaBasedFormula } from '../../../shared/metrics/types'; -export const diskIORead: LensBaseLayer = { +export const diskIORead: SchemaBasedFormula = { label: DISK_READ_IOPS_LABEL, - value: "counter_rate(max(system.diskio.read.count), kql='system.diskio.read.count: *')", + value: { + ecs: "counter_rate(max(system.diskio.read.count), kql='system.diskio.read.count: *')", + semconv: "counter_rate(max(system.disk.operations, kql='attributes.direction: read'))", + }, format: 'number', decimals: 0, normalizeByUnit: 's', }; -export const diskReadThroughput: LensBaseLayer = { +export const diskReadThroughput: SchemaBasedFormula = { label: DISK_READ_THROUGHPUT_LABEL, - value: "counter_rate(max(system.diskio.read.bytes), kql='system.diskio.read.bytes: *')", + value: { + ecs: "counter_rate(max(system.diskio.read.bytes), kql='system.diskio.read.bytes: *')", + semconv: "counter_rate(max(system.disk.io, kql='attributes.direction: read'))", + }, format: 'bytes', decimals: 1, normalizeByUnit: 's', }; -export const diskSpaceAvailable: LensBaseLayer = { +export const diskSpaceAvailable: SchemaBasedFormula = { label: DISK_SPACE_AVAILABLE_LABEL, - value: 'average(system.filesystem.free)', + value: { + ecs: 'average(system.filesystem.free)', + semconv: "average(system.filesystem.usage, kql='state: free')", + }, format: 'bytes', decimals: 0, }; -export const diskSpaceAvailability: LensBaseLayer = { - label: DISK_SPACE_AVAILABILITY_LABEL, - value: '1 - average(system.filesystem.used.pct)', - format: 'percent', - decimals: 0, -}; - -export const diskUsage: LensBaseLayer = { +export const diskUsage: SchemaBasedFormula = { label: DISK_USAGE_LABEL, - value: 'max(system.filesystem.used.pct)', + value: { + ecs: 'max(system.filesystem.used.pct)', + semconv: + "1 - max(metrics.system.filesystem.usage, kql='state: free') / sum(metrics.system.filesystem.usage)", + }, format: 'percent', decimals: 0, }; -export const diskUsageAverage: LensBaseLayer = { +export const diskUsageAverage: SchemaBasedFormula = { label: DISK_USAGE_AVERAGE_LABEL, - value: 'average(system.filesystem.used.pct)', + value: { + ecs: 'average(system.filesystem.used.pct)', + semconv: + "1 - sum(metrics.system.filesystem.usage, kql='state: free') / sum(metrics.system.filesystem.usage)", + }, format: 'percent', decimals: 0, }; -export const diskIOWrite: LensBaseLayer = { +export const diskIOWrite: SchemaBasedFormula = { label: DISK_WRITE_IOPS_LABEL, - value: "counter_rate(max(system.diskio.write.count), kql='system.diskio.write.count: *')", + value: { + ecs: "counter_rate(max(system.diskio.write.count), kql='system.diskio.write.count: *')", + semconv: "counter_rate(max(system.disk.operations, kql='attributes.direction: write'))", + }, format: 'number', decimals: 0, normalizeByUnit: 's', }; -export const diskWriteThroughput: LensBaseLayer = { +export const diskWriteThroughput: SchemaBasedFormula = { label: DISK_WRITE_THROUGHPUT_LABEL, - value: "counter_rate(max(system.diskio.write.bytes), kql='system.diskio.write.bytes: *')", + value: { + ecs: "counter_rate(max(system.diskio.write.bytes), kql='system.diskio.write.bytes: *')", + semconv: "counter_rate(max(system.disk.io, kql='attributes.direction: write'))", + }, format: 'bytes', decimals: 1, normalizeByUnit: 's', diff --git a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/formulas/index.ts b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/formulas/index.ts index 4676dbbb7b137..4ac2513ddb138 100644 --- a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/formulas/index.ts +++ b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/formulas/index.ts @@ -26,7 +26,6 @@ import { diskIOWrite, diskReadThroughput, diskSpaceAvailable, - diskSpaceAvailability, diskUsage, diskUsageAverage, diskWriteThroughput, @@ -56,7 +55,6 @@ export const formulas = { diskIOWrite, diskReadThroughput, diskWriteThroughput, - diskSpaceAvailability, diskSpaceAvailable, diskUsage, diskUsageAverage, diff --git a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/formulas/memory.ts b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/formulas/memory.ts index 9c1d285d1b879..92c8d591391d5 100644 --- a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/formulas/memory.ts +++ b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/formulas/memory.ts @@ -6,47 +6,66 @@ */ import { i18n } from '@kbn/i18n'; -import type { LensBaseLayer } from '@kbn/lens-embeddable-utils/config_builder'; import { MEMORY_FREE_LABEL, MEMORY_USAGE_LABEL } from '../../../shared/charts/constants'; +import type { SchemaBasedFormula } from '../../../shared/metrics/types'; -export const memoryCache: LensBaseLayer = { +export const memoryCache: SchemaBasedFormula = { label: i18n.translate('xpack.metricsData.assetDetails.formulas.metric.label.cache', { defaultMessage: 'cache', }), - value: 'average(system.memory.used.bytes) - average(system.memory.actual.used.bytes)', + value: { + ecs: 'average(system.memory.used.bytes) - average(system.memory.actual.used.bytes)', + semconv: + "average(metrics.system.memory.usage, kql='state: cache') / average(metrics.system.memory.usage, kql='state: slab_reclaimable') + average(metrics.system.memory.usage, kql='state: slab_unreclaimable')", + }, format: 'bytes', decimals: 1, }; -export const memoryFree: LensBaseLayer = { +export const memoryFree: SchemaBasedFormula = { label: MEMORY_FREE_LABEL, - value: 'max(system.memory.total) - average(system.memory.actual.used.bytes)', + value: { + ecs: 'max(system.memory.total) - average(system.memory.actual.used.bytes)', + semconv: + "(max(metrics.system.memory.usage, kql='state: free') + max(metrics.system.memory.usage, kql='state: cached')) - (average(metrics.system.memory.usage, kql='state: slab_unreclaimable') + average(metrics.system.memory.usage, kql='state: slab_reclaimable'))", + }, format: 'bytes', decimals: 1, }; -export const memoryFreeExcludingCache: LensBaseLayer = { +export const memoryFreeExcludingCache: SchemaBasedFormula = { label: i18n.translate('xpack.metricsData.assetDetails.formulas.metric.label.free', { defaultMessage: 'free', }), - value: 'average(system.memory.free)', + value: { + ecs: 'average(system.memory.free)', + semconv: "average(metrics.system.memory.usage, kql='state: free')", + }, format: 'bytes', decimals: 1, }; -export const memoryUsage: LensBaseLayer = { +export const memoryUsage: SchemaBasedFormula = { label: MEMORY_USAGE_LABEL, - value: 'average(system.memory.actual.used.pct)', + value: { + ecs: 'average(system.memory.actual.used.pct)', + semconv: + "average(system.memory.utilization, kql='state: used') + average(system.memory.utilization, kql='state: buffered') + average(system.memory.utilization, kql='state: slab_reclaimable') + average(system.memory.utilization, kql='state: slab_unreclaimable')", + }, format: 'percent', decimals: 0, }; -export const memoryUsed: LensBaseLayer = { +export const memoryUsed: SchemaBasedFormula = { label: i18n.translate('xpack.metricsData.assetDetails.formulas.metric.label.used', { defaultMessage: 'used', }), - value: 'average(system.memory.actual.used.bytes)', + value: { + ecs: 'average(system.memory.actual.used.bytes)', + semconv: + "average(metrics.system.memory.usage, kql='state: used') + average(metrics.system.memory.usage, kql='state: buffered') + average(metrics.system.memory.usage, kql='state: slab_reclaimable') + average(metrics.system.memory.usage, kql='state: slab_unreclaimable')", + }, format: 'bytes', decimals: 1, }; diff --git a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/formulas/network.ts b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/formulas/network.ts index 9c45b276f3af9..75c17b80e9f39 100644 --- a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/formulas/network.ts +++ b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/formulas/network.ts @@ -6,22 +6,28 @@ */ import { i18n } from '@kbn/i18n'; -import type { LensBaseLayer } from '@kbn/lens-embeddable-utils/config_builder'; +import type { SchemaBasedFormula } from '../../../shared/metrics/types'; -export const rx: LensBaseLayer = { +export const rx: SchemaBasedFormula = { label: i18n.translate('xpack.metricsData.assetDetails.formulas.rx', { defaultMessage: 'Network Inbound (RX)', }), - value: 'sum(host.network.ingress.bytes) * 8', + value: { + ecs: '8 * counter_rate(max(system.network.in.bytes))', + semconv: "8 * counter_rate(max(metrics.system.network.io, kql='direction: receive'))", + }, format: 'bits', decimals: 1, }; -export const tx: LensBaseLayer = { +export const tx: SchemaBasedFormula = { label: i18n.translate('xpack.metricsData.assetDetails.formulas.tx', { defaultMessage: 'Network Outbound (TX)', }), - value: 'sum(host.network.egress.bytes) * 8', + value: { + ecs: '8 * counter_rate(max(system.network.out.bytes))', + semconv: "8 * counter_rate(max(metrics.system.network.io, kql='direction: transmit'))", + }, format: 'bits', decimals: 1, }; diff --git a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/index.ts b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/index.ts index 7e0a766e0647b..5f663865b0c72 100644 --- a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/index.ts +++ b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/index.ts @@ -12,6 +12,8 @@ import type { InventoryMetricsConfig } from '../../shared/metrics/types'; import { DataSchemaFormat } from '../../shared/metrics/types'; const legacyMetrics: Array = ['cpu', 'tx', 'rx']; +const loadFormulas = () => import('./formulas').then((m) => m.formulas); + export const metrics: InventoryMetricsConfig = { legacyMetrics, getAggregations: async (args) => { @@ -23,13 +25,16 @@ export const metrics: InventoryMetricsConfig { - const { formulas } = await import('./formulas'); + const formulas = await loadFormulas(); const catalog = new MetricsCatalog(formulas, args?.schema); return catalog; }, - getCharts: async () => { - const { charts } = await import('./charts'); - return charts; + getCharts: async (args) => { + const formulas = await loadFormulas(); + const { initCharts } = await import('./charts'); + const formulasCatalog = new MetricsCatalog(formulas, args?.schema); + + return initCharts(formulasCatalog); }, getWaffleMapTooltipMetrics: (args) => { if (args?.schema === DataSchemaFormat.SEMCONV) { diff --git a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/snapshot/cpu_v2.ts b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/snapshot/cpu_v2.ts index 0b07264c2aa1d..22591291dd4b8 100644 --- a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/snapshot/cpu_v2.ts +++ b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/snapshot/cpu_v2.ts @@ -19,7 +19,7 @@ export const cpuV2: SchemaBasedAggregations = { cpu_idle: { terms: { field: 'state', - include: ['idle'], + include: ['idle', 'wait'], }, aggs: { avg: { diff --git a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/snapshot/disk_space_usage.ts b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/snapshot/disk_space_usage.ts index a4e36621d4628..edc06f0827e9d 100644 --- a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/snapshot/disk_space_usage.ts +++ b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/host/metrics/snapshot/disk_space_usage.ts @@ -12,10 +12,10 @@ export const diskSpaceUsage: SchemaBasedAggregations = { diskSpaceUsage: { max: { field: 'system.filesystem.used.pct' } }, }, semconv: { - disk_space_usage_used_bytes: { + disk_space_usage_free_bytes: { terms: { field: 'state', - include: ['used'], + include: ['free'], }, aggs: { max: { @@ -25,36 +25,35 @@ export const diskSpaceUsage: SchemaBasedAggregations = { }, }, }, - disk_space_usage_available: { + disk_usage_space_available: { terms: { field: 'state', - include: ['free', 'used'], }, aggs: { - max: { - max: { + sum: { + sum: { field: 'system.filesystem.usage', }, }, }, }, - disk_space_usage_used_bytes_total: { + disk_space_usage_free_bytes_total: { max_bucket: { - buckets_path: 'disk_space_usage_used_bytes.max', + buckets_path: 'disk_space_usage_free_bytes.max', }, }, - disk_space_usage_available_total: { - max_bucket: { - buckets_path: 'disk_space_usage_available.max', + disk_usage_space_available_total: { + sum_bucket: { + buckets_path: 'disk_usage_space_available.sum', }, }, diskSpaceUsage: { bucket_script: { buckets_path: { - diskSpaceUsageUsedBytesTotal: 'disk_space_usage_used_bytes_total', - diskSpaceUsageAvailableTotal: 'disk_space_usage_available_total', + diskSpaceUsageFreeBytesTotal: 'disk_space_usage_free_bytes_total', + diskSpaceUsageAvailableTotal: 'disk_usage_space_available_total', }, - script: 'params.diskSpaceUsageUsedBytesTotal / params.diskSpaceUsageAvailableTotal', + script: '1 - params.diskSpaceUsageFreeBytesTotal / params.diskSpaceUsageAvailableTotal', gap_policy: 'skip', }, }, diff --git a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/kubernetes/node/metrics/charts/index.ts b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/kubernetes/node/metrics/charts/index.ts index cc97310b3370d..f689b76d9668b 100644 --- a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/kubernetes/node/metrics/charts/index.ts +++ b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/kubernetes/node/metrics/charts/index.ts @@ -5,9 +5,9 @@ * 2.0. */ -import type { LensMetricChartConfig } from '../../../../shared/metrics/types'; +import type { ChartsConfigMap } from '../../../../shared/metrics/types'; import { node } from './node'; export const charts = { node, -} satisfies LensMetricChartConfig; +} satisfies ChartsConfigMap; diff --git a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/kubernetes/node/metrics/charts/node.ts b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/kubernetes/node/metrics/charts/node.ts index 2bab80a399969..dcfa81a00709c 100644 --- a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/kubernetes/node/metrics/charts/node.ts +++ b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/kubernetes/node/metrics/charts/node.ts @@ -102,4 +102,4 @@ export const node = { nodeDiskCapacity, nodePodCapacity, }, -} as const; +}; diff --git a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/shared/charts/constants.ts b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/shared/charts/constants.ts index fb59022803331..21cfbf4773685 100644 --- a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/shared/charts/constants.ts +++ b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/shared/charts/constants.ts @@ -157,13 +157,6 @@ export const DISK_SPACE_AVAILABLE_LABEL = i18n.translate( } ); -export const DISK_SPACE_AVAILABILITY_LABEL = i18n.translate( - 'xpack.metricsData.assetDetails.metrics.label.diskSpaceAvailablity', - { - defaultMessage: 'Disk Space Availability', - } -); - export const NETWORK_LABEL = i18n.translate( 'xpack.metricsData.assetDetails.metrics.label.network', { diff --git a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/shared/create_inventory_model.ts b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/shared/create_inventory_model.ts index a66164dbb4268..00d44dcc9bb52 100644 --- a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/shared/create_inventory_model.ts +++ b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/shared/create_inventory_model.ts @@ -5,17 +5,13 @@ * 2.0. */ import type { InventoryItemType, InventoryModel } from '../types'; -import type { - AggregationConfigMap, - FormulasConfigMap, - LensMetricChartConfig, -} from './metrics/types'; +import type { AggregationConfigMap, FormulasConfigMap, ChartsConfigMap } from './metrics/types'; export function createInventoryModel< TType extends InventoryItemType, TAggsConfigMap extends AggregationConfigMap, TFormulasConfigMap extends FormulasConfigMap | undefined = undefined, - TCharts extends LensMetricChartConfig | undefined = undefined + TCharts extends ChartsConfigMap | undefined = undefined >( id: TType, config: Omit, 'id'> diff --git a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/shared/metrics/metrics_catalog.ts b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/shared/metrics/metrics_catalog.ts index 3565a110b06a6..079325281baa1 100644 --- a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/shared/metrics/metrics_catalog.ts +++ b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/shared/metrics/metrics_catalog.ts @@ -23,15 +23,17 @@ export class MetricsCatalog private readonly catalog: ResolvedMetricMap; private readonly includeLegacyMetrics: boolean; private readonly legacyMetrics: Set; + private readonly _schema: DataSchemaFormat; constructor( configCatalog: TConfig, - private readonly schema: DataSchemaFormat = DataSchemaFormat.ECS, + schema: DataSchemaFormat = DataSchemaFormat.ECS, options?: { includeLegacyMetrics?: boolean; legacyMetrics?: Array; } ) { + this._schema = schema; const { includeLegacyMetrics = true, legacyMetrics = [] } = options ?? {}; this.includeLegacyMetrics = includeLegacyMetrics; @@ -39,6 +41,11 @@ export class MetricsCatalog this.catalog = this.resolveSchemaMetrics(configCatalog); } + + public get schema(): DataSchemaFormat { + return this._schema; + } + get>(key: K): ResolvedMetricMap[K]; get(key: string): UnwrapRawConfig | undefined; get(key: string): UnwrapRawConfig | undefined { diff --git a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/shared/metrics/types.ts b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/shared/metrics/types.ts index aededb8a6e316..c07e82021a2ee 100644 --- a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/shared/metrics/types.ts +++ b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/shared/metrics/types.ts @@ -20,23 +20,29 @@ export enum DataSchemaFormat { SEMCONV = 'semconv', } -export type SchemaBasedFormulas = Omit & { +export type SchemaBasedFormula = Omit & { value: Record; }; export type SchemaBasedAggregations = Record; -export type FormulasConfig = LensBaseLayer | SchemaBasedFormulas; +export type ChartsConfig = { + [key in ChartType]?: Partial>; +}; +export type FormulasConfig = LensBaseLayer | SchemaBasedFormula; export type AggregationConfig = MetricsUIAggregation | SchemaBasedAggregations; export type RawConfig = FormulasConfig | AggregationConfig; + +/** config maps */ export type MetricConfigMap = Record>; export type AggregationConfigMap = MetricConfigMap; export type FormulasConfigMap = MetricConfigMap; +export type ChartsConfigMap = MetricConfigMap; /** helper types */ export type SchemaWrappedEntry = T extends AggregationConfig ? SchemaBasedAggregations : T extends LensBaseLayer - ? SchemaBasedFormulas + ? SchemaBasedFormula : never; export type MetricConfigEntry = @@ -44,7 +50,7 @@ export type MetricConfigEntry = | LensBaseLayer | SchemaWrappedEntry; -export type UnwrapMetricConfig = T extends SchemaBasedFormulas +export type UnwrapMetricConfig = T extends SchemaBasedFormula ? LensBaseLayer : T extends SchemaBasedAggregations ? MetricsUIAggregation @@ -60,6 +66,7 @@ export type UnwrapRawConfig = Unwr /** catalog types */ export interface BaseMetricsCatalog { + get schema(): DataSchemaFormat; get>( key: K ): UnwrapRawConfig; @@ -70,13 +77,6 @@ export type AggregationsCatalog = BaseMetricsCatalog; export type FormulasCatalog = BaseMetricsCatalog; -export type LensMetricChartConfig = Record< - string, - { - [key in ChartType]?: Partial>; - } ->; - /** inventory types */ export interface BaseInventoryMetricsConfig { defaultSnapshot: keyof TAggregations; @@ -95,16 +95,16 @@ export interface InventoryTsvbMetrics { } export interface InventoryMetricsConfigWithLens< TFormulas extends FormulasConfigMap, - TCharts extends LensMetricChartConfig + TCharts extends ChartsConfigMap > { getFormulas: (args?: { schema?: DataSchemaFormat }) => Promise>; - getCharts: () => Promise; + getCharts: (args?: { schema?: DataSchemaFormat }) => Promise; } export type InventoryMetricsConfig< TAggregations extends AggregationConfigMap = AggregationConfigMap, TFormulas extends FormulasConfigMap | undefined = undefined, - TCharts extends LensMetricChartConfig | undefined = undefined + TCharts extends ChartsConfigMap | undefined = undefined > = BaseInventoryMetricsConfig & (TFormulas extends undefined ? TCharts extends undefined diff --git a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/types.ts b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/types.ts index fdf5d9a3d2843..18e654cfb077a 100644 --- a/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/types.ts +++ b/x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/types.ts @@ -10,9 +10,9 @@ import type { estypes } from '@elastic/elasticsearch'; import type { LensConfig } from '@kbn/lens-embeddable-utils/config_builder'; import type { AggregationConfigMap, + ChartsConfigMap, FormulasConfigMap, InventoryMetricsConfig, - LensMetricChartConfig, } from './shared/metrics/types'; export { DataSchemaFormat } from './shared/metrics/types'; @@ -258,7 +258,7 @@ export interface InventoryModel< TEntityType extends InventoryItemType, TAggregations extends AggregationConfigMap, TFormulas extends FormulasConfigMap | undefined = undefined, - TCharts extends LensMetricChartConfig | undefined = undefined + TCharts extends ChartsConfigMap | undefined = undefined > { id: TEntityType; displayName: string;