[Infra UI] Cleanup host-specific Node Detail Page code (#166828)

closes: https://github.com/elastic/kibana/issues/166428

## Summary

This PR removes code that is no longer needed after replacing the Node
Details View for Host with the Asset Details.

### TSVB

The TSVB files were apparently only used to display charts in the Node
Details view. Due to the Asset Details using Lens to power the charts,
corresponding `host` TSVB formulas and configs are no longer needed.

Therefore, `host*`, `hostK8s*`, and `hostDocker*` (the latter appears to
have never been used) have been removed. Additionally, `aws*` from
`required_metrics` was also removed because it was host-specific.

### FE Components

The main change is in the `useMetadata` hook. I have changed the hook
signature, making `requiredMetrics` optional. This parameter is used to
process additional filtering and is only used in asset types that the
old Node Details page supports. Not passing it is not expected to break
other places that depend on this hook.

### Server

Removing TSVB files has a direct impact on the
`api/metrics/node_details` endpoint. This endpoint is only used to
provide data to the Node Details page. It returns a 400 error if an
invalid metric is passed - which will be the case for hosts

**Example Request:**
```json
POST kbn:api/metrics/node_details
{
  "metrics": [
    "hostK8sCpuCap",
    "hostSystemOverview"
  ],
  "nodeId": "gke-release-oblt-release-oblt-pool-c4163099-bcaj",
  "nodeType": "host",
  "timerange": {
    "from": 1695210522045,
    "to": 1695214122045,
    "interval": ">=1m"
  },
  "cloudId": "6106013995483209805",
  "sourceId": "default"
}
```

**Response:**
```json
{
  "statusCode": 400,
  "error": "Bad Request",
  "message": "Failed to validate: \n  in metrics/0: \"hostK8sCpuCap\" does not match expected type \"podOverview\" | \"podCpuUsage\" | \"podMemoryUsage\" | \"podLogUsage\" | \"podNetworkTraffic\" | \"containerOverview\" | \"containerCpuKernel\" | \"containerCpuUsage\" | \"containerDiskIOOps\" | \"containerDiskIOBytes\" | \"containerMemory\" | \"containerNetworkTraffic\" | \"containerK8sOverview\" | \"containerK8sCpuUsage\" | \"containerK8sMemoryUsage\" | \"nginxHits\" | \"nginxRequestRate\" | \"nginxActiveConnections\" | \"nginxRequestsPerConnection\" | \"awsEC2CpuUtilization\" | \"awsEC2NetworkTraffic\" | \"awsEC2DiskIOBytes\" | \"awsS3TotalRequests\" | \"awsS3NumberOfObjects\" | \"awsS3BucketSize\" | \"awsS3DownloadBytes\" | \"awsS3UploadBytes\" | \"awsRDSCpuTotal\" | \"awsRDSConnections\" | \"awsRDSQueriesExecuted\" | \"awsRDSActiveTransactions\" | \"awsRDSLatency\" | \"awsSQSMessagesVisible\" | \"awsSQSMessagesDelayed\" | \"awsSQSMessagesSent\" | \"awsSQSMessagesEmpty\" | \"awsSQSOldestMessage\" | \"custom\"\n  in metrics/1: \"hostSystemOverview\" does not match expected type \"podOverview\" | \"podCpuUsage\" | \"podMemoryUsage\" | \"podLogUsage\" | \"podNetworkTraffic\" | \"containerOverview\" | \"containerCpuKernel\" | \"containerCpuUsage\" | \"containerDiskIOOps\" | \"containerDiskIOBytes\" | \"containerMemory\" | \"containerNetworkTraffic\" | \"containerK8sOverview\" | \"containerK8sCpuUsage\" | \"containerK8sMemoryUsage\" | \"nginxHits\" | \"nginxRequestRate\" | \"nginxActiveConnections\" | \"nginxRequestsPerConnection\" | \"awsEC2CpuUtilization\" | \"awsEC2NetworkTraffic\" | \"awsEC2DiskIOBytes\" | \"awsS3TotalRequests\" | \"awsS3NumberOfObjects\" | \"awsS3BucketSize\" | \"awsS3DownloadBytes\" | \"awsS3UploadBytes\" | \"awsRDSCpuTotal\" | \"awsRDSConnections\" | \"awsRDSQueriesExecuted\" | \"awsRDSActiveTransactions\" | \"awsRDSLatency\" | \"awsSQSMessagesVisible\" | \"awsSQSMessagesDelayed\" | \"awsSQSMessagesSent\" | \"awsSQSMessagesEmpty\" | \"awsSQSOldestMessage\" | \"custom\""
}
```

### How to Test
- Start a local Kibana instance pointing to an oblt cluster.
- Navigate to `Infrastructure`.
- Try different asset types and navigate to the Node Details view.

---------

Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
This commit is contained in:
Carlos Crespo 2023-09-28 12:39:04 +02:00 committed by GitHub
parent 3be21c9e56
commit d79a38363a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
39 changed files with 105 additions and 2558 deletions

View file

@ -8,10 +8,6 @@
import { i18n } from '@kbn/i18n';
import { metrics } from './metrics';
import { InventoryModel } from '../types';
import {
aws as awsRequiredMetrics,
nginx as nginxRequireMetrics,
} from '../shared/metrics/required_metrics';
export { hostSnapshotMetricTypes } from './metrics';
@ -38,19 +34,5 @@ export const host: InventoryModel = {
cloudProvider: 'cloud.provider',
},
metrics,
requiredMetrics: [
'hostSystemOverview',
'hostCpuUsage',
'hostLoad',
'hostMemoryUsage',
'hostNetworkTraffic',
'hostK8sOverview',
'hostK8sCpuCap',
'hostK8sMemoryCap',
'hostK8sDiskCap',
'hostK8sPodCap',
...awsRequiredMetrics,
...nginxRequireMetrics,
],
tooltipMetrics: ['cpu', 'memory', 'tx', 'rx'],
};

View file

@ -18,24 +18,6 @@ import { normalizedLoad1m } from './snapshot/normalized_load_1m';
import { rx } from './snapshot/rx';
import { tx } from './snapshot/tx';
import { hostSystemOverview } from './tsvb/host_system_overview';
import { hostCpuUsage } from './tsvb/host_cpu_usage';
import { hostLoad } from './tsvb/host_load';
import { hostMemoryUsage } from './tsvb/host_memory_usage';
import { hostNetworkTraffic } from './tsvb/host_network_traffic';
import { hostFilesystem } from './tsvb/host_filesystem';
import { hostK8sOverview } from './tsvb/host_k8s_overview';
import { hostK8sCpuCap } from './tsvb/host_k8s_cpu_cap';
import { hostK8sPodCap } from './tsvb/host_k8s_pod_cap';
import { hostK8sDiskCap } from './tsvb/host_k8s_disk_cap';
import { hostK8sMemoryCap } from './tsvb/host_k8s_memory_cap';
import { hostDockerTop5ByMemory } from './tsvb/host_docker_top_5_by_memory';
import { hostDockerTop5ByCpu } from './tsvb/host_docker_top_5_by_cpu';
import { hostDockerOverview } from './tsvb/host_docker_overview';
import { hostDockerInfo } from './tsvb/host_docker_info';
import { InventoryMetrics } from '../../types';
const exposedHostSnapshotMetrics = {
@ -59,23 +41,6 @@ export const hostSnapshotMetricTypes = Object.keys(exposedHostSnapshotMetrics) a
>;
export const metrics: InventoryMetrics = {
tsvb: {
hostSystemOverview,
hostCpuUsage,
hostLoad,
hostMemoryUsage,
hostNetworkTraffic,
hostFilesystem,
hostK8sOverview,
hostK8sCpuCap,
hostK8sPodCap,
hostK8sDiskCap,
hostK8sMemoryCap,
hostDockerOverview,
hostDockerInfo,
hostDockerTop5ByMemory,
hostDockerTop5ByCpu,
},
snapshot: hostSnapshotMetrics,
defaultSnapshot: 'cpu',
defaultTimeRangeInSeconds: 3600, // 1 hour

View file

@ -1,254 +0,0 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { TSVBMetricModelCreator, TSVBMetricModel } from '../../../types';
export const hostCpuUsage: TSVBMetricModelCreator = (
timeField,
indexPattern,
interval
): TSVBMetricModel => ({
id: 'hostCpuUsage',
requires: ['system.cpu'],
index_pattern: indexPattern,
interval,
time_field: timeField,
type: 'timeseries',
series: [
{
id: 'user',
metrics: [
{
field: 'system.cpu.user.pct',
id: 'avg-cpu-user',
type: 'avg',
},
{
field: 'system.cpu.cores',
id: 'max-cpu-cores',
type: 'max',
},
{
id: 'calc-avg-cores',
script: 'params.avg / params.cores',
type: 'calculation',
variables: [
{
field: 'max-cpu-cores',
id: 'var-cores',
name: 'cores',
},
{
field: 'avg-cpu-user',
id: 'var-avg',
name: 'avg',
},
],
},
],
split_mode: 'everything',
},
{
id: 'system',
metrics: [
{
field: 'system.cpu.system.pct',
id: 'avg-cpu-system',
type: 'avg',
},
{
field: 'system.cpu.cores',
id: 'max-cpu-cores',
type: 'max',
},
{
id: 'calc-avg-cores',
script: 'params.avg / params.cores',
type: 'calculation',
variables: [
{
field: 'max-cpu-cores',
id: 'var-cores',
name: 'cores',
},
{
field: 'avg-cpu-system',
id: 'var-avg',
name: 'avg',
},
],
},
],
split_mode: 'everything',
},
{
id: 'steal',
metrics: [
{
field: 'system.cpu.steal.pct',
id: 'avg-cpu-steal',
type: 'avg',
},
{
field: 'system.cpu.cores',
id: 'max-cpu-cores',
type: 'max',
},
{
id: 'calc-avg-cores',
script: 'params.avg / params.cores',
type: 'calculation',
variables: [
{
field: 'avg-cpu-steal',
id: 'var-avg',
name: 'avg',
},
{
field: 'max-cpu-cores',
id: 'var-cores',
name: 'cores',
},
],
},
],
split_mode: 'everything',
},
{
id: 'irq',
metrics: [
{
field: 'system.cpu.irq.pct',
id: 'avg-cpu-irq',
type: 'avg',
},
{
field: 'system.cpu.cores',
id: 'max-cpu-cores',
type: 'max',
},
{
id: 'calc-avg-cores',
script: 'params.avg / params.cores',
type: 'calculation',
variables: [
{
field: 'max-cpu-cores',
id: 'var-cores',
name: 'cores',
},
{
field: 'avg-cpu-irq',
id: 'var-avg',
name: 'avg',
},
],
},
],
split_mode: 'everything',
},
{
id: 'softirq',
metrics: [
{
field: 'system.cpu.softirq.pct',
id: 'avg-cpu-softirq',
type: 'avg',
},
{
field: 'system.cpu.cores',
id: 'max-cpu-cores',
type: 'max',
},
{
id: 'calc-avg-cores',
script: 'params.avg / params.cores',
type: 'calculation',
variables: [
{
field: 'max-cpu-cores',
id: 'var-cores',
name: 'cores',
},
{
field: 'avg-cpu-softirq',
id: 'var-avg',
name: 'avg',
},
],
},
],
split_mode: 'everything',
},
{
id: 'iowait',
metrics: [
{
field: 'system.cpu.iowait.pct',
id: 'avg-cpu-iowait',
type: 'avg',
},
{
field: 'system.cpu.cores',
id: 'max-cpu-cores',
type: 'max',
},
{
id: 'calc-avg-cores',
script: 'params.avg / params.cores',
type: 'calculation',
variables: [
{
field: 'max-cpu-cores',
id: 'var-cores',
name: 'cores',
},
{
field: 'avg-cpu-iowait',
id: 'var-avg',
name: 'avg',
},
],
},
],
split_mode: 'everything',
},
{
id: 'nice',
metrics: [
{
field: 'system.cpu.nice.pct',
id: 'avg-cpu-nice',
type: 'avg',
},
{
field: 'system.cpu.cores',
id: 'max-cpu-cores',
type: 'max',
},
{
id: 'calc-avg-cores',
script: 'params.avg / params.cores',
type: 'calculation',
variables: [
{
field: 'max-cpu-cores',
id: 'var-cores',
name: 'cores',
},
{
field: 'avg-cpu-nice',
id: 'var-avg',
name: 'avg',
},
],
},
],
split_mode: 'everything',
},
],
});

View file

@ -1,56 +0,0 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { TSVBMetricModelCreator, TSVBMetricModel } from '../../../types';
export const hostDockerInfo: TSVBMetricModelCreator = (
timeField,
indexPattern,
interval
): TSVBMetricModel => ({
id: 'hostDockerInfo',
requires: ['docker.info'],
index_pattern: indexPattern,
interval,
time_field: timeField,
type: 'timeseries',
series: [
{
id: 'running',
metrics: [
{
field: 'docker.info.containers.running',
id: 'max-running',
type: 'max',
},
],
split_mode: 'everything',
},
{
id: 'paused',
metrics: [
{
field: 'docker.info.containers.paused',
id: 'max-paused',
type: 'max',
},
],
split_mode: 'everything',
},
{
id: 'stopped',
metrics: [
{
field: 'docker.info.containers.stopped',
id: 'max-stopped',
type: 'max',
},
],
split_mode: 'everything',
},
],
});

View file

@ -1,67 +0,0 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { TSVBMetricModelCreator, TSVBMetricModel } from '../../../types';
export const hostDockerOverview: TSVBMetricModelCreator = (
timeField,
indexPattern,
interval
): TSVBMetricModel => ({
id: 'hostDockerOverview',
requires: ['docker.info'],
index_pattern: indexPattern,
interval,
time_field: timeField,
type: 'top_n',
series: [
{
id: 'total',
metrics: [
{
field: 'docker.info.containers.total',
id: 'max-total',
type: 'max',
},
],
split_mode: 'everything',
},
{
id: 'running',
metrics: [
{
field: 'docker.info.containers.running',
id: 'max-running',
type: 'max',
},
],
split_mode: 'everything',
},
{
id: 'paused',
metrics: [
{
field: 'docker.info.containers.paused',
id: 'max-paused',
type: 'max',
},
],
split_mode: 'everything',
},
{
id: 'stopped',
metrics: [
{
field: 'docker.info.containers.stopped',
id: 'max-stopped',
type: 'max',
},
],
split_mode: 'everything',
},
],
});

View file

@ -1,37 +0,0 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { TSVBMetricModelCreator, TSVBMetricModel } from '../../../types';
export const hostDockerTop5ByCpu: TSVBMetricModelCreator = (
timeField,
indexPattern,
interval
): TSVBMetricModel => ({
id: 'hostDockerTop5ByCpu',
requires: ['docker.cpu'],
index_pattern: indexPattern,
interval,
time_field: timeField,
type: 'timeseries',
series: [
{
id: 'avg-cpu',
metrics: [
{
field: 'docker.cpu.total.pct',
id: 'avg-cpu-metric',
type: 'avg',
},
],
split_mode: 'terms',
terms_field: 'container.name',
terms_order_by: 'avg-cpu',
terms_size: 5,
},
],
});

View file

@ -1,37 +0,0 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { TSVBMetricModelCreator, TSVBMetricModel } from '../../../types';
export const hostDockerTop5ByMemory: TSVBMetricModelCreator = (
timeField,
indexPattern,
interval
): TSVBMetricModel => ({
id: 'hostDockerTop5ByMemory',
requires: ['docker.memory'],
index_pattern: indexPattern,
interval,
time_field: timeField,
type: 'timeseries',
series: [
{
id: 'avg-memory',
metrics: [
{
field: 'docker.memory.usage.pct',
id: 'avg-memory-metric',
type: 'avg',
},
],
split_mode: 'terms',
terms_field: 'container.name',
terms_order_by: 'avg-memory',
terms_size: 5,
},
],
});

View file

@ -1,38 +0,0 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { TSVBMetricModelCreator, TSVBMetricModel } from '../../../types';
export const hostFilesystem: TSVBMetricModelCreator = (
timeField,
indexPattern,
interval
): TSVBMetricModel => ({
id: 'hostFilesystem',
requires: ['system.filesystem'],
filter: 'system.filesystem.device_name:\\/*',
index_pattern: indexPattern,
time_field: timeField,
interval,
type: 'timeseries',
series: [
{
id: 'used',
metrics: [
{
field: 'system.filesystem.used.pct',
id: 'avg-filesystem-used',
type: 'avg',
},
],
split_mode: 'terms',
terms_field: 'system.filesystem.device_name',
terms_order_by: 'used',
terms_size: 5,
},
],
});

View file

@ -1,58 +0,0 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { TSVBMetricModelCreator, TSVBMetricModel } from '../../../types';
export const hostK8sCpuCap: TSVBMetricModelCreator = (
timeField,
indexPattern,
interval
): TSVBMetricModel => ({
id: 'hostK8sCpuCap',
map_field_to: 'kubernetes.node.name',
requires: ['kubernetes.node'],
index_pattern: indexPattern,
interval,
time_field: timeField,
type: 'timeseries',
series: [
{
id: 'capacity',
metrics: [
{
field: 'kubernetes.node.cpu.allocatable.cores',
id: 'max-cpu-cap',
type: 'max',
},
{
id: 'calc-nanocores',
type: 'calculation',
variables: [
{
id: 'var-cores',
field: 'max-cpu-cap',
name: 'cores',
},
],
script: 'params.cores * 1000000000',
},
],
split_mode: 'everything',
},
{
id: 'used',
metrics: [
{
field: 'kubernetes.node.cpu.usage.nanocores',
id: 'avg-cpu-usage',
type: 'avg',
},
],
split_mode: 'everything',
},
],
});

View file

@ -1,45 +0,0 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { TSVBMetricModelCreator, TSVBMetricModel } from '../../../types';
export const hostK8sDiskCap: TSVBMetricModelCreator = (
timeField,
indexPattern,
interval
): TSVBMetricModel => ({
id: 'hostK8sDiskCap',
map_field_to: 'kubernetes.node.name',
requires: ['kubernetes.node'],
index_pattern: indexPattern,
interval,
time_field: timeField,
type: 'timeseries',
series: [
{
id: 'capacity',
metrics: [
{
field: 'kubernetes.node.fs.capacity.bytes',
id: 'max-fs-cap',
type: 'max',
},
],
split_mode: 'everything',
},
{
id: 'used',
metrics: [
{
field: 'kubernetes.node.fs.used.bytes',
id: 'avg-fs-used',
type: 'avg',
},
],
split_mode: 'everything',
},
],
});

View file

@ -1,46 +0,0 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { TSVBMetricModelCreator, TSVBMetricModel } from '../../../types';
export const hostK8sMemoryCap: TSVBMetricModelCreator = (
timeField,
indexPattern,
interval
): TSVBMetricModel => ({
id: 'hostK8sMemoryCap',
map_field_to: 'kubernetes.node.name',
requires: ['kubernetes.node'],
index_pattern: indexPattern,
interval,
time_field: timeField,
type: 'timeseries',
series: [
{
id: 'capacity',
metrics: [
{
field: 'kubernetes.node.memory.allocatable.bytes',
id: 'max-memory-cap',
type: 'max',
},
],
split_mode: 'everything',
},
{
id: 'used',
metrics: [
{
field: 'kubernetes.node.memory.usage.bytes',
id: 'avg-memory-usage',
type: 'avg',
},
],
split_mode: 'everything',
},
],
});

View file

@ -1,155 +0,0 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { TSVBMetricModelCreator, TSVBMetricModel } from '../../../types';
export const hostK8sOverview: TSVBMetricModelCreator = (
timeField,
indexPattern,
interval
): TSVBMetricModel => ({
id: 'hostK8sOverview',
requires: ['kubernetes'],
index_pattern: indexPattern,
interval,
time_field: timeField,
type: 'top_n',
series: [
{
id: 'cpucap',
split_mode: 'everything',
metrics: [
{
field: 'kubernetes.node.cpu.allocatable.cores',
id: 'max-cpu-cap',
type: 'max',
},
{
field: 'kubernetes.node.cpu.usage.nanocores',
id: 'avg-cpu-usage',
type: 'avg',
},
{
id: 'calc-used-cap',
script: 'params.used / (params.cap * 1000000000)',
type: 'calculation',
variables: [
{
field: 'max-cpu-cap',
id: 'var-cap',
name: 'cap',
},
{
field: 'avg-cpu-usage',
id: 'var-used',
name: 'used',
},
],
},
],
},
{
id: 'diskcap',
metrics: [
{
field: 'kubernetes.node.fs.capacity.bytes',
id: 'max-fs-cap',
type: 'max',
},
{
field: 'kubernetes.node.fs.used.bytes',
id: 'avg-fs-used',
type: 'avg',
},
{
id: 'calc-used-cap',
script: 'params.used / params.cap',
type: 'calculation',
variables: [
{
field: 'max-fs-cap',
id: 'var-cap',
name: 'cap',
},
{
field: 'avg-fs-used',
id: 'var-used',
name: 'used',
},
],
},
],
split_mode: 'everything',
},
{
id: 'memorycap',
metrics: [
{
field: 'kubernetes.node.memory.allocatable.bytes',
id: 'max-memory-cap',
type: 'max',
},
{
field: 'kubernetes.node.memory.usage.bytes',
id: 'avg-memory-usage',
type: 'avg',
},
{
id: 'calc-used-cap',
script: 'params.used / params.cap',
type: 'calculation',
variables: [
{
field: 'max-memory-cap',
id: 'var-cap',
name: 'cap',
},
{
field: 'avg-memory-usage',
id: 'var-used',
name: 'used',
},
],
},
],
split_mode: 'everything',
},
{
id: 'podcap',
metrics: [
{
field: 'kubernetes.node.pod.capacity.total',
id: 'max-pod-cap',
type: 'max',
},
{
field: 'kubernetes.pod.uid',
id: 'card-pod-name',
type: 'cardinality',
},
{
id: 'calc-used-cap',
script: 'params.used / params.cap',
type: 'calculation',
variables: [
{
field: 'max-pod-cap',
id: 'var-cap',
name: 'cap',
},
{
field: 'card-pod-name',
id: 'var-used',
name: 'used',
},
],
},
],
split_mode: 'everything',
},
],
});

View file

@ -1,47 +0,0 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { TSVBMetricModelCreator, TSVBMetricModel } from '../../../types';
export const hostK8sPodCap: TSVBMetricModelCreator = (
timeField,
indexPattern,
interval
): TSVBMetricModel => ({
id: 'hostK8sPodCap',
requires: ['kubernetes.node'],
map_field_to: 'kubernetes.node.name',
index_pattern: indexPattern,
interval,
time_field: timeField,
type: 'timeseries',
series: [
{
id: 'capacity',
metrics: [
{
field: 'kubernetes.node.pod.allocatable.total',
id: 'max-pod-cap',
type: 'max',
},
],
split_mode: 'everything',
},
{
id: 'used',
metrics: [
{
field: 'kubernetes.pod.uid',
id: 'avg-pod',
type: 'cardinality',
},
],
split_mode: 'everything',
},
],
});

View file

@ -1,56 +0,0 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { TSVBMetricModelCreator, TSVBMetricModel } from '../../../types';
export const hostLoad: TSVBMetricModelCreator = (
timeField,
indexPattern,
interval
): TSVBMetricModel => ({
id: 'hostLoad',
requires: ['system.cpu'],
index_pattern: indexPattern,
interval,
time_field: timeField,
type: 'timeseries',
series: [
{
id: 'load_1m',
metrics: [
{
field: 'system.load.1',
id: 'avg-load-1m',
type: 'avg',
},
],
split_mode: 'everything',
},
{
id: 'load_5m',
metrics: [
{
field: 'system.load.5',
id: 'avg-load-5m',
type: 'avg',
},
],
split_mode: 'everything',
},
{
id: 'load_15m',
metrics: [
{
field: 'system.load.15',
id: 'avg-load-15m',
type: 'avg',
},
],
split_mode: 'everything',
},
],
});

View file

@ -1,78 +0,0 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { TSVBMetricModelCreator, TSVBMetricModel } from '../../../types';
export const hostMemoryUsage: TSVBMetricModelCreator = (
timeField,
indexPattern,
interval
): TSVBMetricModel => ({
id: 'hostMemoryUsage',
requires: ['system.memory'],
index_pattern: indexPattern,
interval,
time_field: timeField,
type: 'timeseries',
series: [
{
id: 'free',
metrics: [
{
field: 'system.memory.free',
id: 'avg-memory-free',
type: 'avg',
},
],
split_mode: 'everything',
},
{
id: 'used',
metrics: [
{
field: 'system.memory.actual.used.bytes',
id: 'avg-memory-used',
type: 'avg',
},
],
split_mode: 'everything',
},
{
id: 'cache',
metrics: [
{
field: 'system.memory.actual.used.bytes',
id: 'avg-memory-actual-used',
type: 'avg',
},
{
field: 'system.memory.used.bytes',
id: 'avg-memory-used',
type: 'avg',
},
{
id: 'calc-used-actual',
script: 'params.used - params.actual',
type: 'calculation',
variables: [
{
field: 'avg-memory-actual-used',
id: 'var-actual',
name: 'actual',
},
{
field: 'avg-memory-used',
id: 'var-used',
name: 'used',
},
],
},
],
split_mode: 'everything',
},
],
});

View file

@ -1,109 +0,0 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { TSVBMetricModelCreator, TSVBMetricModel } from '../../../types';
export const hostNetworkTraffic: TSVBMetricModelCreator = (
timeField,
indexPattern,
interval
): TSVBMetricModel => ({
id: 'hostNetworkTraffic',
requires: ['system.network'],
index_pattern: indexPattern,
interval,
time_field: timeField,
type: 'timeseries',
series: [
{
id: 'tx',
metrics: [
{
field: 'host.network.egress.bytes',
id: 'avg-net-out',
type: 'avg',
},
{
id: 'max-period',
type: 'max',
field: 'metricset.period',
},
{
id: '3216b170-f192-11ec-a8e3-dd984b7213e2',
type: 'calculation',
variables: [
{
id: '34e64c30-f192-11ec-a8e3-dd984b7213e2',
name: 'value',
field: 'avg-net-out',
},
{
id: '3886cb80-f192-11ec-a8e3-dd984b7213e2',
name: 'period',
field: 'max-period',
},
],
script: 'params.value / (params.period / 1000)',
},
],
filter: {
language: 'kuery',
query: 'host.network.egress.bytes : * ',
},
split_mode: 'everything',
},
{
id: 'rx',
metrics: [
{
field: 'host.network.ingress.bytes',
id: 'avg-net-in',
type: 'avg',
},
{
id: 'calc-invert-rate',
script: 'params.rate * -1',
type: 'calculation',
variables: [
{
field: 'avg-net-in',
id: 'var-rate',
name: 'rate',
},
],
},
{
id: 'max-period',
type: 'max',
field: 'metricset.period',
},
{
id: '3216b170-f192-11ec-a8e3-dd984b7213e2',
type: 'calculation',
variables: [
{
id: '34e64c30-f192-11ec-a8e3-dd984b7213e2',
name: 'value',
field: 'calc-invert-rate',
},
{
id: '3886cb80-f192-11ec-a8e3-dd984b7213e2',
name: 'period',
field: 'max-period',
},
],
script: 'params.value / (params.period / 1000)',
},
],
filter: {
language: 'kuery',
query: 'host.network.ingress.bytes : * ',
},
split_mode: 'everything',
},
],
});

View file

@ -1,130 +0,0 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { TSVBMetricModelCreator, TSVBMetricModel } from '../../../types';
export const hostSystemOverview: TSVBMetricModelCreator = (
timeField,
indexPattern,
interval
): TSVBMetricModel => ({
id: 'hostSystemOverview',
requires: ['system.cpu', 'system.memory', 'system.load', 'system.network'],
index_pattern: indexPattern,
interval,
time_field: timeField,
type: 'top_n',
series: [
{
id: 'cpu',
split_mode: 'everything',
metrics: [
{
field: 'system.cpu.total.norm.pct',
id: 'avg-cpu-total',
type: 'avg',
},
],
},
{
id: 'load',
split_mode: 'everything',
metrics: [
{
field: 'system.load.5',
id: 'avg-load-5m',
type: 'avg',
},
],
},
{
id: 'memory',
split_mode: 'everything',
metrics: [
{
field: 'system.memory.actual.used.pct',
id: 'avg-memory-actual-used',
type: 'avg',
},
],
},
{
id: 'rx',
metrics: [
{
field: 'host.network.ingress.bytes',
id: 'avg-net-in',
type: 'avg',
},
{
id: 'max-period',
type: 'max',
field: 'metricset.period',
},
{
id: '3216b170-f192-11ec-a8e3-dd984b7213e2',
type: 'calculation',
variables: [
{
id: '34e64c30-f192-11ec-a8e3-dd984b7213e2',
name: 'value',
field: 'avg-net-in',
},
{
id: '3886cb80-f192-11ec-a8e3-dd984b7213e2',
name: 'period',
field: 'max-period',
},
],
script: 'params.value / (params.period / 1000)',
},
],
filter: {
language: 'kuery',
query: 'host.network.ingress.bytes : * ',
},
split_mode: 'everything',
},
{
id: 'tx',
metrics: [
{
field: 'host.network.egress.bytes',
id: 'avg-net-out',
type: 'avg',
},
{
id: 'max-period',
type: 'max',
field: 'metricset.period',
},
{
id: '3216b170-f192-11ec-a8e3-dd984b7213e2',
type: 'calculation',
variables: [
{
id: '34e64c30-f192-11ec-a8e3-dd984b7213e2',
name: 'value',
field: 'avg-net-out',
},
{
id: '3886cb80-f192-11ec-a8e3-dd984b7213e2',
name: 'period',
field: 'max-period',
},
],
script: 'params.value / (params.period / 1000)',
},
],
filter: {
language: 'kuery',
query: 'host.network.egress.bytes : * ',
},
split_mode: 'everything',
},
],
});

View file

@ -10,12 +10,6 @@ import { nginxActiveConnections } from './tsvb/nginx_active_connections';
import { nginxHits } from './tsvb/nginx_hits';
import { nginxRequestsPerConnection } from './tsvb/nginx_requests_per_connection';
import { awsCpuUtilization } from './tsvb/aws_cpu_utilization';
import { awsDiskioBytes } from './tsvb/aws_diskio_bytes';
import { awsDiskioOps } from './tsvb/aws_diskio_ops';
import { awsNetworkBytes } from './tsvb/aws_network_bytes';
import { awsNetworkPackets } from './tsvb/aws_network_packets';
import { awsOverview } from './tsvb/aws_overview';
import { InventoryMetrics } from '../../types';
import { count } from './snapshot/count';
@ -25,12 +19,6 @@ export const metrics: InventoryMetrics = {
nginxHits,
nginxRequestRate,
nginxRequestsPerConnection,
awsCpuUtilization,
awsDiskioBytes,
awsDiskioOps,
awsNetworkBytes,
awsNetworkPackets,
awsOverview,
},
snapshot: {
count,

View file

@ -13,12 +13,3 @@ export const nginx: InventoryMetric[] = [
'nginxActiveConnections',
'nginxRequestsPerConnection',
];
export const aws: InventoryMetric[] = [
'awsOverview',
'awsCpuUtilization',
'awsNetworkBytes',
'awsNetworkPackets',
'awsDiskioOps',
'awsDiskioBytes',
];

View file

@ -1,35 +0,0 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { TSVBMetricModelCreator, TSVBMetricModel } from '../../../types';
export const awsCpuUtilization: TSVBMetricModelCreator = (
timeField,
indexPattern
): TSVBMetricModel => ({
id: 'awsCpuUtilization',
requires: ['aws.ec2'],
map_field_to: 'cloud.instance.id',
id_type: 'cloud',
index_pattern: indexPattern,
interval: '>=5m',
time_field: timeField,
type: 'timeseries',
series: [
{
id: 'cpu-util',
metrics: [
{
field: 'aws.ec2.cpu.total.pct',
id: 'avg-cpu-util',
type: 'avg',
},
],
split_mode: 'everything',
},
],
});

View file

@ -1,84 +0,0 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { TSVBMetricModelCreator, TSVBMetricModel } from '../../../types';
export const awsDiskioBytes: TSVBMetricModelCreator = (
timeField,
indexPattern
): TSVBMetricModel => ({
id: 'awsDiskioBytes',
requires: ['aws.ec2'],
index_pattern: indexPattern,
map_field_to: 'cloud.instance.id',
id_type: 'cloud',
interval: '>=5m',
time_field: timeField,
type: 'timeseries',
series: [
{
id: 'writes',
metrics: [
{
field: 'aws.ec2.diskio.write.bytes',
id: 'sum-diskio-out',
type: 'sum',
},
{
id: 'csum-sum-diskio-out',
field: 'sum-diskio-out',
type: 'cumulative_sum',
},
{
id: 'deriv-csum-sum-diskio-out',
unit: '1s',
type: 'derivative',
field: 'csum-sum-diskio-out',
},
{
id: 'posonly-deriv-csum-sum-diskio-out',
field: 'deriv-csum-sum-diskio-out',
type: 'positive_only',
},
],
split_mode: 'everything',
},
{
id: 'reads',
metrics: [
{
field: 'aws.ec2.diskio.read.bytes',
id: 'sum-diskio-in',
type: 'sum',
},
{
id: 'csum-sum-diskio-in',
field: 'sum-diskio-in',
type: 'cumulative_sum',
},
{
id: 'deriv-csum-sum-diskio-in',
unit: '1s',
type: 'derivative',
field: 'csum-sum-diskio-in',
},
{
id: 'posonly-deriv-csum-sum-diskio-in',
field: 'deriv-csum-sum-diskio-in',
type: 'positive_only',
},
{
id: 'inverted-posonly-deriv-csum-sum-diskio-in',
type: 'calculation',
variables: [{ id: 'var-rate', name: 'rate', field: 'posonly-deriv-csum-sum-diskio-in' }],
script: 'params.rate * -1',
},
],
split_mode: 'everything',
},
],
});

View file

@ -1,83 +0,0 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { TSVBMetricModelCreator, TSVBMetricModel } from '../../../types';
export const awsDiskioOps: TSVBMetricModelCreator = (timeField, indexPattern): TSVBMetricModel => ({
id: 'awsDiskioOps',
requires: ['aws.ec2'],
index_pattern: indexPattern,
map_field_to: 'cloud.instance.id',
id_type: 'cloud',
interval: '>=5m',
time_field: timeField,
type: 'timeseries',
series: [
{
id: 'writes',
metrics: [
{
field: 'aws.ec2.diskio.write.count',
id: 'sum-diskio-writes',
type: 'sum',
},
{
id: 'csum-sum-diskio-writes',
field: 'sum-diskio-writes',
type: 'cumulative_sum',
},
{
id: 'deriv-csum-sum-diskio-writes',
unit: '1s',
type: 'derivative',
field: 'csum-sum-diskio-writes',
},
{
id: 'posonly-deriv-csum-sum-diskio-writes',
field: 'deriv-csum-sum-diskio-writes',
type: 'positive_only',
},
],
split_mode: 'everything',
},
{
id: 'reads',
metrics: [
{
field: 'aws.ec2.diskio.read.count',
id: 'sum-diskio-reads',
type: 'sum',
},
{
id: 'csum-sum-diskio-reads',
field: 'sum-diskio-reads',
type: 'cumulative_sum',
},
{
id: 'deriv-csum-sum-diskio-reads',
unit: '1s',
type: 'derivative',
field: 'csum-sum-diskio-reads',
},
{
id: 'posonly-deriv-csum-sum-diskio-reads',
field: 'deriv-csum-sum-diskio-reads',
type: 'positive_only',
},
{
id: 'inverted-posonly-deriv-csum-sum-diskio-reads',
type: 'calculation',
variables: [
{ id: 'var-rate', name: 'rate', field: 'posonly-deriv-csum-sum-diskio-reads' },
],
script: 'params.rate * -1',
},
],
split_mode: 'everything',
},
],
});

View file

@ -1,86 +0,0 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { TSVBMetricModelCreator, TSVBMetricModel } from '../../../types';
// see discussion in: https://github.com/elastic/kibana/issues/42687
export const awsNetworkBytes: TSVBMetricModelCreator = (
timeField,
indexPattern
): TSVBMetricModel => ({
id: 'awsNetworkBytes',
requires: ['aws.ec2'],
index_pattern: indexPattern,
map_field_to: 'cloud.instance.id',
id_type: 'cloud',
interval: '>=5m',
time_field: timeField,
type: 'timeseries',
series: [
{
id: 'tx',
metrics: [
{
field: 'aws.ec2.network.out.bytes',
id: 'sum-net-out',
type: 'sum',
},
{
id: 'csum-sum-net-out',
field: 'sum-net-out',
type: 'cumulative_sum',
},
{
id: 'deriv-csum-sum-net-out',
unit: '1s',
type: 'derivative',
field: 'csum-sum-net-out',
},
{
id: 'posonly-deriv-csum-sum-net-out',
field: 'deriv-csum-sum-net-out',
type: 'positive_only',
},
],
split_mode: 'everything',
},
{
id: 'rx',
metrics: [
{
field: 'aws.ec2.network.in.bytes',
id: 'sum-net-in',
type: 'sum',
},
{
id: 'csum-sum-net-in',
field: 'sum-net-in',
type: 'cumulative_sum',
},
{
id: 'deriv-csum-sum-net-in',
unit: '1s',
type: 'derivative',
field: 'csum-sum-net-in',
},
{
id: 'posonly-deriv-csum-sum-net-in',
field: 'deriv-csum-sum-net-in',
type: 'positive_only',
},
{
id: 'inverted-posonly-deriv-csum-sum-net-in',
type: 'calculation',
variables: [{ id: 'var-rate', name: 'rate', field: 'posonly-deriv-csum-sum-net-in' }],
script: 'params.rate * -1',
},
],
split_mode: 'everything',
},
],
});

View file

@ -1,52 +0,0 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { TSVBMetricModelCreator, TSVBMetricModel } from '../../../types';
export const awsNetworkPackets: TSVBMetricModelCreator = (
timeField,
indexPattern
): TSVBMetricModel => ({
id: 'awsNetworkPackets',
requires: ['aws.ec2'],
index_pattern: indexPattern,
map_field_to: 'cloud.instance.id',
id_type: 'cloud',
interval: '>=5m',
time_field: timeField,
type: 'timeseries',
series: [
{
id: 'packets-out',
metrics: [
{
field: 'aws.ec2.network.out.packets',
id: 'avg-net-out',
type: 'avg',
},
],
split_mode: 'everything',
},
{
id: 'packets-in',
metrics: [
{
field: 'aws.ec2.network.in.packets',
id: 'avg-net-in',
type: 'avg',
},
{
id: 'inverted-avg-net-in',
type: 'calculation',
variables: [{ id: 'var-avg', name: 'avg', field: 'avg-net-in' }],
script: 'params.avg * -1',
},
],
split_mode: 'everything',
},
],
});

View file

@ -1,65 +0,0 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { TSVBMetricModelCreator, TSVBMetricModel } from '../../../types';
export const awsOverview: TSVBMetricModelCreator = (timeField, indexPattern): TSVBMetricModel => ({
id: 'awsOverview',
requires: ['aws.ec2'],
index_pattern: indexPattern,
map_field_to: 'cloud.instance.id',
id_type: 'cloud',
interval: '>=5m',
time_field: timeField,
type: 'top_n',
series: [
{
id: 'cpu-util',
split_mode: 'everything',
metrics: [
{
field: 'aws.ec2.cpu.total.pct',
id: 'cpu-total-pct',
type: 'max',
},
],
},
{
id: 'status-check-failed',
split_mode: 'everything',
metrics: [
{
field: 'aws.ec2.status.check_failed',
id: 'status-check-failed',
type: 'max',
},
],
},
{
id: 'packets-out',
split_mode: 'everything',
metrics: [
{
field: 'aws.ec2.network.out.packets',
id: 'network-out-packets',
type: 'avg',
},
],
},
{
id: 'packets-in',
split_mode: 'everything',
metrics: [
{
field: 'aws.ec2.network.in.packets',
id: 'network-in-packets',
type: 'avg',
},
],
},
],
});

View file

@ -37,21 +37,6 @@ export type InventoryFormatterType = rt.TypeOf<typeof InventoryFormatterTypeRT>;
export type InventoryItemType = rt.TypeOf<typeof ItemTypeRT>;
export const InventoryMetricRT = rt.keyof({
hostSystemOverview: null,
hostCpuUsage: null,
hostFilesystem: null,
hostK8sOverview: null,
hostK8sCpuCap: null,
hostK8sDiskCap: null,
hostK8sMemoryCap: null,
hostK8sPodCap: null,
hostLoad: null,
hostMemoryUsage: null,
hostNetworkTraffic: null,
hostDockerOverview: null,
hostDockerInfo: null,
hostDockerTop5ByCpu: null,
hostDockerTop5ByMemory: null,
podOverview: null,
podCpuUsage: null,
podMemoryUsage: null,
@ -71,12 +56,6 @@ export const InventoryMetricRT = rt.keyof({
nginxRequestRate: null,
nginxActiveConnections: null,
nginxRequestsPerConnection: null,
awsOverview: null,
awsCpuUtilization: null,
awsNetworkBytes: null,
awsNetworkPackets: null,
awsDiskioBytes: null,
awsDiskioOps: null,
awsEC2CpuUtilization: null,
awsEC2NetworkTraffic: null,
awsEC2DiskIOBytes: null,
@ -377,7 +356,7 @@ export const SnapshotMetricTypeRT = rt.keyof(SnapshotMetricTypeKeys);
export type SnapshotMetricType = rt.TypeOf<typeof SnapshotMetricTypeRT>;
export interface InventoryMetrics {
tsvb: { [name: string]: TSVBMetricModelCreator };
tsvb?: { [name: string]: TSVBMetricModelCreator };
snapshot: { [name: string]: MetricsUIAggregation | undefined };
defaultSnapshot: SnapshotMetricType;
/** This is used by the inventory view to calculate the appropriate amount of time for the metrics detail page. Some metris like awsS3 require multiple days where others like host only need an hour.*/
@ -403,7 +382,7 @@ export interface InventoryModel {
uptime: boolean;
};
metrics: InventoryMetrics;
requiredMetrics: InventoryMetric[];
requiredMetrics?: InventoryMetric[];
tooltipMetrics: SnapshotMetricType[];
nodeFilter?: object[];
}

View file

@ -15,16 +15,23 @@ import { throwErrors, createPlainError } from '../../../../common/runtime_types'
import { getFilteredMetrics } from '../../../pages/metrics/metric_detail/lib/get_filtered_metrics';
import type { InventoryItemType, InventoryMetric } from '../../../../common/inventory_models/types';
export function useMetadata(
nodeId: string,
nodeType: InventoryItemType,
requiredMetrics: InventoryMetric[],
sourceId: string,
interface UseMetadataProps {
assetId: string;
assetType: InventoryItemType;
requiredMetrics?: InventoryMetric[];
sourceId: string;
timeRange: {
from: number;
to: number;
}
) {
};
}
export function useMetadata({
assetId,
assetType,
sourceId,
timeRange,
requiredMetrics = [],
}: UseMetadataProps) {
const decodeResponse = (response: any) => {
return pipe(InfraMetadataRT.decode(response), fold(throwErrors(createPlainError), identity));
};
@ -32,8 +39,8 @@ export function useMetadata(
'/api/infra/metadata',
'POST',
JSON.stringify({
nodeId,
nodeType,
nodeId: assetId,
nodeType: assetType,
sourceId,
timeRange,
}),
@ -49,17 +56,13 @@ export function useMetadata(
return {
name: (response && response.name) || '',
filteredRequiredMetrics:
(response && getFilteredMetrics(requiredMetrics, response.features)) || [],
response && requiredMetrics.length > 0
? getFilteredMetrics(requiredMetrics, response.features)
: [],
error: (error && error.message) || null,
loading,
metadata: response,
cloudId:
(response &&
response.info &&
response.info.cloud &&
response.info.cloud.instance &&
response.info.cloud.instance.id) ||
'',
cloudId: response?.info?.cloud?.instance?.id || '',
reload: makeRequest,
};
}

View file

@ -7,7 +7,6 @@
import { useEffect, useCallback } from 'react';
import createContainer from 'constate';
import { findInventoryModel } from '../../../../common/inventory_models';
import { useSourceContext } from '../../../containers/metrics_source';
import { useMetadata } from './use_metadata';
import { AssetDetailsProps } from '../types';
@ -19,16 +18,14 @@ export type UseMetadataProviderProps = Pick<AssetDetailsProps, 'asset' | 'assetT
export function useMetadataProvider({ asset, assetType }: UseMetadataProviderProps) {
const [, setUrlState] = useAssetDetailsUrlState();
const { getDateRangeInTimestamp } = useDateRangeProviderContext();
const inventoryModel = findInventoryModel(assetType);
const { sourceId } = useSourceContext();
const { loading, error, metadata, reload } = useMetadata(
asset.id,
const { loading, error, metadata, reload } = useMetadata({
assetId: asset.id,
assetType,
inventoryModel.requiredMetrics,
sourceId,
getDateRangeInTimestamp()
);
timeRange: getDateRangeInTimestamp(),
});
const refresh = useCallback(() => {
reload();

View file

@ -11,7 +11,6 @@ import React, { useMemo } from 'react';
import { useKibanaContextForPlugin } from '../../../../../../../hooks/use_kibana';
import { TabContent, TabProps } from '../shared';
import { useSourceContext } from '../../../../../../../containers/metrics_source';
import { findInventoryModel } from '../../../../../../../../common/inventory_models';
import { InventoryItemType } from '../../../../../../../../common/inventory_models/types';
import { useMetadata } from '../../../../../../../components/asset_details/hooks/use_metadata';
import { useWaffleTimeContext } from '../../../../hooks/use_waffle_time';
@ -19,16 +18,14 @@ import { useWaffleTimeContext } from '../../../../hooks/use_waffle_time';
const TabComponent = (props: TabProps) => {
const nodeId = props.node.id;
const nodeType = props.nodeType as InventoryItemType;
const inventoryModel = findInventoryModel(nodeType);
const { sourceId } = useSourceContext();
const { currentTimeRange } = useWaffleTimeContext();
const { loading, metadata } = useMetadata(
nodeId,
nodeType,
inventoryModel.requiredMetrics,
const { loading, metadata } = useMetadata({
assetId: nodeId,
assetType: nodeType,
sourceId,
currentTimeRange
);
timeRange: currentTimeRange,
});
const {
services: { osquery },
} = useKibanaContextForPlugin();

View file

@ -11,7 +11,6 @@ import { EuiLoadingChart } from '@elastic/eui';
import { euiStyled } from '@kbn/kibana-react-plugin/common';
import { TabContent, TabProps } from '../shared';
import { useSourceContext } from '../../../../../../../containers/metrics_source';
import { findInventoryModel } from '../../../../../../../../common/inventory_models';
import { InventoryItemType } from '../../../../../../../../common/inventory_models/types';
import { useMetadata } from '../../../../../../../components/asset_details/hooks/use_metadata';
import { getFields } from './build_fields';
@ -22,17 +21,15 @@ import { useWaffleFiltersContext } from '../../../../hooks/use_waffle_filters';
const TabComponent = (props: TabProps) => {
const nodeId = props.node.id;
const nodeType = props.nodeType as InventoryItemType;
const inventoryModel = findInventoryModel(nodeType);
const { sourceId } = useSourceContext();
const { currentTimeRange } = useWaffleTimeContext();
const { applyFilterQuery } = useWaffleFiltersContext();
const { loading: metadataLoading, metadata } = useMetadata(
nodeId,
nodeType,
inventoryModel.requiredMetrics,
const { loading: metadataLoading, metadata } = useMetadata({
assetId: nodeId,
assetType: nodeType,
sourceId,
currentTimeRange
);
timeRange: currentTimeRange,
});
const hostFields = useMemo(() => {
if (!metadata) return null;

View file

@ -13,7 +13,6 @@ import { AwsRDSLayout } from './layouts/aws_rds_layout';
import { AwsS3Layout } from './layouts/aws_s3_layout';
import { AwsSQSLayout } from './layouts/aws_sqs_layout';
import { ContainerLayout } from './layouts/container_layout';
import { HostLayout } from './layouts/host_layout';
import { PodLayout } from './layouts/pod_layout';
export const Layout = ({
@ -31,9 +30,9 @@ export const Layout = ({
return <AwsSQSLayout {...layoutProps} />;
case 'container':
return <ContainerLayout {...layoutProps} />;
case 'host':
return <HostLayout {...layoutProps} />;
case 'pod':
return <PodLayout {...layoutProps} />;
default:
throw new Error(`${inventoryItemType} is not supported.`);
}
};

View file

@ -1,242 +0,0 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { i18n } from '@kbn/i18n';
import { withTheme } from '@kbn/kibana-react-plugin/common';
import React from 'react';
import type { LayoutPropsWithTheme } from '../../types';
import { ChartSectionVis } from '../chart_section_vis';
import { GaugesSectionVis } from '../gauges_section_vis';
import { Section } from '../section';
import { SubSection } from '../sub_section';
export const AwsLayoutSection = withTheme(
({ metrics, onChangeRangeTime, theme }: LayoutPropsWithTheme) => (
<React.Fragment>
<Section
navLabel="AWS"
sectionLabel={i18n.translate(
'xpack.infra.metricDetailPage.awsMetricsLayout.overviewSection.sectionLabel',
{
defaultMessage: 'AWS Overview',
}
)}
metrics={metrics}
onChangeRangeTime={onChangeRangeTime}
>
<SubSection id="awsOverview">
<GaugesSectionVis
seriesOverrides={{
'cpu-util': {
name: i18n.translate(
'xpack.infra.metricDetailPage.awsMetricsLayout.overviewSection.cpuUtilizationSeriesLabel',
{
defaultMessage: 'CPU Utilization',
}
),
color: theme.eui.euiColorFullShade,
formatter: 'percent',
gaugeMax: 1,
},
'status-check-failed': {
name: i18n.translate(
'xpack.infra.metricDetailPage.awsMetricsLayout.overviewSection.statusCheckFailedLabel',
{
defaultMessage: 'Status check failed',
}
),
color: theme.eui.euiColorFullShade,
},
'packets-in': {
name: i18n.translate(
'xpack.infra.metricDetailPage.awsMetricsLayout.overviewSection.networkPacketsInLabel',
{
defaultMessage: 'Packets (in)',
}
),
color: theme.eui.euiColorFullShade,
formatter: 'number',
},
'packets-out': {
name: i18n.translate(
'xpack.infra.metricDetailPage.awsMetricsLayout.overviewSection.networkPacketsOutLabel',
{
defaultMessage: 'Packets (out)',
}
),
color: theme.eui.euiColorFullShade,
formatter: 'number',
},
}}
/>
</SubSection>
<SubSection
id="awsCpuUtilization"
label={i18n.translate(
'xpack.infra.metricDetailPage.awsMetricsLayout.cpuUtilSection.sectionLabel',
{
defaultMessage: 'CPU Utilization',
}
)}
>
<ChartSectionVis
type="area"
formatter="number"
seriesOverrides={{
'cpu-util': {
color: theme.eui.euiColorVis1,
name: i18n.translate(
'xpack.infra.metricDetailPage.awsMetricsLayout.cpuUtilSection.percentSeriesLabel',
{
defaultMessage: 'percent',
}
),
},
}}
/>
</SubSection>
<SubSection
id="awsNetworkBytes"
label={i18n.translate(
'xpack.infra.metricDetailPage.awsMetricsLayout.networkBytesSection.sectionLabel',
{
defaultMessage: 'Network Traffic',
}
)}
>
<ChartSectionVis
type="area"
formatter="bits"
formatterTemplate="{{value}}/s"
seriesOverrides={{
tx: {
color: theme.eui.euiColorVis1,
name: i18n.translate(
'xpack.infra.metricDetailPage.awsMetricsLayout.networkBytesSection.txSeriesLabel',
{
defaultMessage: 'out',
}
),
},
rx: {
color: theme.eui.euiColorVis2,
name: i18n.translate(
'xpack.infra.metricDetailPage.awsMetricsLayout.networkBytesSection.rxSeriesLabel',
{
defaultMessage: 'in',
}
),
},
}}
/>
</SubSection>
<SubSection
id="awsNetworkPackets"
label={i18n.translate(
'xpack.infra.metricDetailPage.awsMetricsLayout.networkPacketsSection.sectionLabel',
{
defaultMessage: 'Network Packets (Average)',
}
)}
>
<ChartSectionVis
type="area"
formatter="number"
seriesOverrides={{
'packets-out': {
color: theme.eui.euiColorVis1,
name: i18n.translate(
'xpack.infra.metricDetailPage.awsMetricsLayout.networkPacketsSection.packetsOutSeriesLabel',
{
defaultMessage: 'out',
}
),
},
'packets-in': {
color: theme.eui.euiColorVis2,
name: i18n.translate(
'xpack.infra.metricDetailPage.awsMetricsLayout.networkPacketsSection.packetsInSeriesLabel',
{
defaultMessage: 'in',
}
),
},
}}
/>
</SubSection>
<SubSection
id="awsDiskioOps"
label={i18n.translate(
'xpack.infra.metricDetailPage.awsMetricsLayout.diskioOperationsSection.sectionLabel',
{
defaultMessage: 'Disk I/O Operations',
}
)}
>
<ChartSectionVis
type="area"
formatter="number"
seriesOverrides={{
writes: {
color: theme.eui.euiColorVis1,
name: i18n.translate(
'xpack.infra.metricDetailPage.awsMetricsLayout.diskioOperationsSection.writesSeriesLabel',
{
defaultMessage: 'writes',
}
),
},
reads: {
color: theme.eui.euiColorVis2,
name: i18n.translate(
'xpack.infra.metricDetailPage.awsMetricsLayout.diskioOperationsSection.readsSeriesLabel',
{
defaultMessage: 'reads',
}
),
},
}}
/>
</SubSection>
<SubSection
id="awsDiskioBytes"
label={i18n.translate(
'xpack.infra.metricDetailPage.awsMetricsLayout.diskioBytesSection.sectionLabel',
{
defaultMessage: 'Disk I/O Bytes',
}
)}
>
<ChartSectionVis
type="area"
formatter="number"
seriesOverrides={{
writes: {
color: theme.eui.euiColorVis1,
name: i18n.translate(
'xpack.infra.metricDetailPage.awsMetricsLayout.diskioBytesSection.writesSeriesLabel',
{
defaultMessage: 'writes',
}
),
},
reads: {
color: theme.eui.euiColorVis2,
name: i18n.translate(
'xpack.infra.metricDetailPage.awsMetricsLayout.diskioBytesSection.readsSeriesLabel',
{
defaultMessage: 'reads',
}
),
},
}}
/>
</SubSection>
</Section>
</React.Fragment>
)
);

View file

@ -1,376 +0,0 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { EuiPanel } from '@elastic/eui';
import { i18n } from '@kbn/i18n';
import { withTheme } from '@kbn/kibana-react-plugin/common';
import React from 'react';
import type { LayoutPropsWithTheme } from '../../types';
import { ChartSectionVis } from '../chart_section_vis';
import { GaugesSectionVis } from '../gauges_section_vis';
import { MetadataDetails } from '../metadata_details';
import { Section } from '../section';
import { SubSection } from '../sub_section';
import { AwsLayoutSection } from './aws_layout_sections';
import { NginxLayoutSection } from './nginx_layout_sections';
export const HostLayout = withTheme(
({ metrics, onChangeRangeTime, theme }: LayoutPropsWithTheme) => (
<React.Fragment>
<MetadataDetails
fields={[
'host.hostname',
'host.os.name',
'host.os.kernel',
'host.containerized',
'cloud.provider',
'cloud.availability_zone',
'cloud.machine.type',
'cloud.project.id',
'cloud.instance.id',
'cloud.instance.name',
]}
/>
<EuiPanel>
<Section
navLabel={i18n.translate('xpack.infra.metricDetailPage.hostMetricsLayout.layoutLabel', {
defaultMessage: 'Host',
})}
sectionLabel={i18n.translate(
'xpack.infra.metricDetailPage.hostMetricsLayout.overviewSection.sectionLabel',
{
defaultMessage: 'Host Overview',
}
)}
metrics={metrics}
onChangeRangeTime={onChangeRangeTime}
>
<SubSection id="hostSystemOverview">
<GaugesSectionVis
seriesOverrides={{
cpu: {
name: i18n.translate(
'xpack.infra.metricDetailPage.hostMetricsLayout.overviewSection.cpuUsageSeriesLabel',
{
defaultMessage: 'CPU Usage',
}
),
color: theme.eui.euiColorFullShade,
formatter: 'percent',
gaugeMax: 1,
},
load: {
name: i18n.translate(
'xpack.infra.metricDetailPage.hostMetricsLayout.overviewSection.loadSeriesLabel',
{
defaultMessage: 'Load (5m)',
}
),
color: theme.eui.euiColorFullShade,
},
memory: {
name: i18n.translate(
'xpack.infra.metricDetailPage.hostMetricsLayout.overviewSection.memoryCapacitySeriesLabel',
{
defaultMessage: 'Memory Usage',
}
),
color: theme.eui.euiColorFullShade,
formatter: 'percent',
gaugeMax: 1,
},
rx: {
name: i18n.translate(
'xpack.infra.metricDetailPage.hostMetricsLayout.overviewSection.inboundRXSeriesLabel',
{
defaultMessage: 'Inbound (RX)',
}
),
color: theme.eui.euiColorFullShade,
formatter: 'bits',
formatterTemplate: '{{value}}/s',
},
tx: {
name: i18n.translate(
'xpack.infra.metricDetailPage.hostMetricsLayout.overviewSection.outboundTXSeriesLabel',
{
defaultMessage: 'Outbound (TX)',
}
),
color: theme.eui.euiColorFullShade,
formatter: 'bits',
formatterTemplate: '{{value}}/s',
},
}}
/>
</SubSection>
<SubSection
id="hostCpuUsage"
label={i18n.translate(
'xpack.infra.metricDetailPage.hostMetricsLayout.cpuUsageSection.sectionLabel',
{
defaultMessage: 'CPU Usage',
}
)}
>
<ChartSectionVis
stacked={true}
type="area"
formatter="percent"
seriesOverrides={{
user: { color: theme.eui.euiColorVis0 },
system: { color: theme.eui.euiColorVis2 },
steal: { color: theme.eui.euiColorVis9 },
irq: { color: theme.eui.euiColorVis4 },
softirq: { color: theme.eui.euiColorVis6 },
iowait: { color: theme.eui.euiColorVis7 },
nice: { color: theme.eui.euiColorVis5 },
}}
/>
</SubSection>
<SubSection
id="hostLoad"
label={i18n.translate(
'xpack.infra.metricDetailPage.hostMetricsLayout.loadSection.sectionLabel',
{
defaultMessage: 'Load',
}
)}
>
<ChartSectionVis
seriesOverrides={{
load_1m: {
color: theme.eui.euiColorVis0,
name: i18n.translate(
'xpack.infra.metricDetailPage.hostMetricsLayout.loadSection.oneMinuteSeriesLabel',
{
defaultMessage: '1m',
}
),
},
load_5m: {
color: theme.eui.euiColorVis1,
name: i18n.translate(
'xpack.infra.metricDetailPage.hostMetricsLayout.loadSection.fiveMinuteSeriesLabel',
{
defaultMessage: '5m',
}
),
},
load_15m: {
color: theme.eui.euiColorVis3,
name: i18n.translate(
'xpack.infra.metricDetailPage.hostMetricsLayout.loadSection.fifteenMinuteSeriesLabel',
{
defaultMessage: '15m',
}
),
},
}}
/>
</SubSection>
<SubSection
id="hostMemoryUsage"
label={i18n.translate(
'xpack.infra.metricDetailPage.hostMetricsLayout.memoryUsageSection.sectionLabel',
{
defaultMessage: 'Memory Usage',
}
)}
>
<ChartSectionVis
stacked={true}
formatter="bytes"
type="area"
seriesOverrides={{
used: { color: theme.eui.euiColorVis2 },
free: { color: theme.eui.euiColorVis0 },
cache: { color: theme.eui.euiColorVis1 },
}}
/>
</SubSection>
<SubSection
id="hostNetworkTraffic"
label={i18n.translate(
'xpack.infra.metricDetailPage.hostMetricsLayout.networkTrafficSection.sectionLabel',
{
defaultMessage: 'Network Traffic',
}
)}
>
<ChartSectionVis
formatter="bits"
formatterTemplate="{{value}}/s"
type="area"
seriesOverrides={{
rx: {
color: theme.eui.euiColorVis1,
name: i18n.translate(
'xpack.infra.metricDetailPage.hostMetricsLayout.networkTrafficSection.networkRxRateSeriesLabel',
{
defaultMessage: 'in',
}
),
},
tx: {
color: theme.eui.euiColorVis2,
name: i18n.translate(
'xpack.infra.metricDetailPage.hostMetricsLayout.networkTrafficSection.networkTxRateSeriesLabel',
{
defaultMessage: 'out',
}
),
},
}}
/>
</SubSection>
</Section>
<Section
navLabel="Kubernetes"
sectionLabel={i18n.translate(
'xpack.infra.metricDetailPage.kubernetesMetricsLayout.overviewSection.sectionLabel',
{
defaultMessage: 'Kubernetes Overview',
}
)}
metrics={metrics}
onChangeRangeTime={onChangeRangeTime}
>
<SubSection id="hostK8sOverview">
<GaugesSectionVis
seriesOverrides={{
cpucap: {
name: i18n.translate(
'xpack.infra.metricDetailPage.kubernetesMetricsLayout.overviewSection.cpuUsageSeriesLabel',
{
defaultMessage: 'CPU Capacity',
}
),
color: 'success',
formatter: 'percent',
gaugeMax: 1,
},
load: {
name: i18n.translate(
'xpack.infra.metricDetailPage.kubernetesMetricsLayout.overviewSection.loadSeriesLabel',
{
defaultMessage: 'Load (5m)',
}
),
color: 'success',
},
memorycap: {
name: i18n.translate(
'xpack.infra.metricDetailPage.kubernetesMetricsLayout.overviewSection.memoryUsageSeriesLabel',
{
defaultMessage: 'Memory Capacity',
}
),
color: 'success',
formatter: 'percent',
gaugeMax: 1,
},
podcap: {
name: i18n.translate(
'xpack.infra.metricDetailPage.kubernetesMetricsLayout.overviewSection.podCapacitySeriesLabel',
{
defaultMessage: 'Pod Capacity',
}
),
color: 'success',
formatter: 'percent',
gaugeMax: 1,
},
diskcap: {
name: i18n.translate(
'xpack.infra.metricDetailPage.kubernetesMetricsLayout.overviewSection.diskCapacitySeriesLabel',
{
defaultMessage: 'Disk Capacity',
}
),
color: 'success',
formatter: 'percent',
gaugeMax: 1,
},
}}
/>
</SubSection>
<SubSection
id="hostK8sCpuCap"
label={i18n.translate(
'xpack.infra.metricDetailPage.kubernetesMetricsLayout.nodeCpuCapacitySection.sectionLabel',
{
defaultMessage: 'Node CPU Capacity',
}
)}
>
<ChartSectionVis
formatter="abbreviatedNumber"
seriesOverrides={{
capacity: { color: theme.eui.euiColorVis2 },
used: { color: theme.eui.euiColorVis1, type: 'area' },
}}
/>
</SubSection>
<SubSection
id="hostK8sMemoryCap"
label={i18n.translate(
'xpack.infra.metricDetailPage.kubernetesMetricsLayout.nodeMemoryCapacitySection.sectionLabel',
{
defaultMessage: 'Node Memory Capacity',
}
)}
>
<ChartSectionVis
formatter="bytes"
seriesOverrides={{
capacity: { color: theme.eui.euiColorVis2 },
used: { color: theme.eui.euiColorVis1, type: 'area' },
}}
/>
</SubSection>
<SubSection
id="hostK8sDiskCap"
label={i18n.translate(
'xpack.infra.metricDetailPage.kubernetesMetricsLayout.nodeDiskCapacitySection.sectionLabel',
{
defaultMessage: 'Node Disk Capacity',
}
)}
>
<ChartSectionVis
formatter="bytes"
seriesOverrides={{
capacity: { color: theme.eui.euiColorVis2 },
used: { color: theme.eui.euiColorVis1, type: 'area' },
}}
/>
</SubSection>
<SubSection
id="hostK8sPodCap"
label={i18n.translate(
'xpack.infra.metricDetailPage.kubernetesMetricsLayout.nodePodCapacitySection.sectionLabel',
{
defaultMessage: 'Node Pod Capacity',
}
)}
>
<ChartSectionVis
formatter="number"
seriesOverrides={{
capacity: { color: theme.eui.euiColorVis2 },
used: { color: theme.eui.euiColorVis1, type: 'area' },
}}
/>
</SubSection>
</Section>
<AwsLayoutSection metrics={metrics} onChangeRangeTime={onChangeRangeTime} />
<NginxLayoutSection metrics={metrics} onChangeRangeTime={onChangeRangeTime} />
</EuiPanel>
</React.Fragment>
)
);

View file

@ -42,7 +42,13 @@ export const MetricDetailPage = () => {
loading: metadataLoading,
cloudId,
metadata,
} = useMetadata(nodeId, nodeType, inventoryModel.requiredMetrics, sourceId, parsedTimeRange);
} = useMetadata({
assetId: nodeId,
assetType: nodeType,
requiredMetrics: inventoryModel.requiredMetrics,
sourceId,
timeRange: parsedTimeRange,
});
const [sideNav, setSideNav] = useState<NavItem[]>([]);

View file

@ -34,30 +34,46 @@ export const initNodeDetailsRoute = (libs: InfraBackendLibs) => {
},
},
async (requestContext, request, response) => {
const { nodeId, cloudId, nodeType, metrics, timerange, sourceId } = pipe(
NodeDetailsRequestRT.decode(request.body),
fold(throwErrors(Boom.badRequest), identity)
);
const soClient = (await requestContext.core).savedObjects.client;
const source = await libs.sources.getSourceConfiguration(soClient, sourceId);
try {
const { nodeId, cloudId, nodeType, metrics, timerange, sourceId } = pipe(
NodeDetailsRequestRT.decode(request.body),
fold(throwErrors(Boom.badRequest), identity)
);
const soClient = (await requestContext.core).savedObjects.client;
const source = await libs.sources.getSourceConfiguration(soClient, sourceId);
UsageCollector.countNode(nodeType);
UsageCollector.countNode(nodeType);
const options: InfraMetricsRequestOptions = {
nodeIds: {
nodeId,
cloudId,
},
nodeType,
sourceConfiguration: source.configuration,
metrics,
timerange,
};
return response.ok({
body: NodeDetailsMetricDataResponseRT.encode({
metrics: await libs.metrics.getMetrics(requestContext, options, request),
}),
});
const options: InfraMetricsRequestOptions = {
nodeIds: {
nodeId,
cloudId,
},
nodeType,
sourceConfiguration: source.configuration,
metrics,
timerange,
};
return response.ok({
body: NodeDetailsMetricDataResponseRT.encode({
metrics: await libs.metrics.getMetrics(requestContext, options, request),
}),
});
} catch (err) {
if (Boom.isBoom(err)) {
return response.customError({
statusCode: err.output.statusCode,
body: { message: err.output.payload.message },
});
}
return response.customError({
statusCode: err.statusCode ?? 500,
body: {
message: err.message ?? 'An unexpected error occurred',
},
});
}
}
);
};

View file

@ -18996,25 +18996,6 @@
"xpack.infra.metadataEmbeddable.setFilterByValueTooltip": "Filtrer par valeur",
"xpack.infra.metadataEmbeddable.setRemoveFilterTooltip": "Supprimer le filtre",
"xpack.infra.metadataEmbeddable.value": "Valeur",
"xpack.infra.metricDetailPage.awsMetricsLayout.cpuUtilSection.percentSeriesLabel": "pour cent",
"xpack.infra.metricDetailPage.awsMetricsLayout.cpuUtilSection.sectionLabel": "Utilisation CPU",
"xpack.infra.metricDetailPage.awsMetricsLayout.diskioBytesSection.readsSeriesLabel": "lit",
"xpack.infra.metricDetailPage.awsMetricsLayout.diskioBytesSection.sectionLabel": "Octets d'E/S sur le disque",
"xpack.infra.metricDetailPage.awsMetricsLayout.diskioBytesSection.writesSeriesLabel": "écrit",
"xpack.infra.metricDetailPage.awsMetricsLayout.diskioOperationsSection.readsSeriesLabel": "lit",
"xpack.infra.metricDetailPage.awsMetricsLayout.diskioOperationsSection.sectionLabel": "Opérations d'E/S sur le disque",
"xpack.infra.metricDetailPage.awsMetricsLayout.diskioOperationsSection.writesSeriesLabel": "écrit",
"xpack.infra.metricDetailPage.awsMetricsLayout.networkBytesSection.rxSeriesLabel": "entrée",
"xpack.infra.metricDetailPage.awsMetricsLayout.networkBytesSection.sectionLabel": "Trafic réseau",
"xpack.infra.metricDetailPage.awsMetricsLayout.networkBytesSection.txSeriesLabel": "sortie",
"xpack.infra.metricDetailPage.awsMetricsLayout.networkPacketsSection.packetsInSeriesLabel": "entrée",
"xpack.infra.metricDetailPage.awsMetricsLayout.networkPacketsSection.packetsOutSeriesLabel": "sortie",
"xpack.infra.metricDetailPage.awsMetricsLayout.networkPacketsSection.sectionLabel": "Paquets réseau (moyenne)",
"xpack.infra.metricDetailPage.awsMetricsLayout.overviewSection.cpuUtilizationSeriesLabel": "Utilisation CPU",
"xpack.infra.metricDetailPage.awsMetricsLayout.overviewSection.networkPacketsInLabel": "Paquets (entrée)",
"xpack.infra.metricDetailPage.awsMetricsLayout.overviewSection.networkPacketsOutLabel": "Paquets (sortie)",
"xpack.infra.metricDetailPage.awsMetricsLayout.overviewSection.sectionLabel": "Aperçu AWS",
"xpack.infra.metricDetailPage.awsMetricsLayout.overviewSection.statusCheckFailedLabel": "La vérification du statut a échoué",
"xpack.infra.metricDetailPage.containerMetricsLayout.cpuUsageSection.sectionLabel": "Utilisation CPU",
"xpack.infra.metricDetailPage.containerMetricsLayout.diskIoBytesSection.readRateSeriesLabel": "lit",
"xpack.infra.metricDetailPage.containerMetricsLayout.diskIoBytesSection.sectionLabel": "ES sur le disque (octets)",
@ -19039,32 +19020,6 @@
"xpack.infra.metricDetailPage.ec2MetricsLayout.diskIOBytesSection.writeLabel": "écrit",
"xpack.infra.metricDetailPage.ec2MetricsLayout.networkTrafficSection.sectionLabel": "Trafic réseau",
"xpack.infra.metricDetailPage.ec2MetricsLayout.overviewSection.sectionLabel": "Aperçu EC2 AWS",
"xpack.infra.metricDetailPage.hostMetricsLayout.cpuUsageSection.sectionLabel": "Utilisation CPU",
"xpack.infra.metricDetailPage.hostMetricsLayout.layoutLabel": "Hôte",
"xpack.infra.metricDetailPage.hostMetricsLayout.loadSection.fifteenMinuteSeriesLabel": "15 min",
"xpack.infra.metricDetailPage.hostMetricsLayout.loadSection.fiveMinuteSeriesLabel": "5 min",
"xpack.infra.metricDetailPage.hostMetricsLayout.loadSection.oneMinuteSeriesLabel": "1 min",
"xpack.infra.metricDetailPage.hostMetricsLayout.loadSection.sectionLabel": "Charge",
"xpack.infra.metricDetailPage.hostMetricsLayout.memoryUsageSection.sectionLabel": "Utilisation mémoire",
"xpack.infra.metricDetailPage.hostMetricsLayout.networkTrafficSection.networkRxRateSeriesLabel": "entrée",
"xpack.infra.metricDetailPage.hostMetricsLayout.networkTrafficSection.networkTxRateSeriesLabel": "sortie",
"xpack.infra.metricDetailPage.hostMetricsLayout.networkTrafficSection.sectionLabel": "Trafic réseau",
"xpack.infra.metricDetailPage.hostMetricsLayout.overviewSection.cpuUsageSeriesLabel": "Utilisation CPU",
"xpack.infra.metricDetailPage.hostMetricsLayout.overviewSection.inboundRXSeriesLabel": "Entrant (RX)",
"xpack.infra.metricDetailPage.hostMetricsLayout.overviewSection.loadSeriesLabel": "Charge (5 min)",
"xpack.infra.metricDetailPage.hostMetricsLayout.overviewSection.memoryCapacitySeriesLabel": "Utilisation mémoire",
"xpack.infra.metricDetailPage.hostMetricsLayout.overviewSection.outboundTXSeriesLabel": "Sortant (TX)",
"xpack.infra.metricDetailPage.hostMetricsLayout.overviewSection.sectionLabel": "Aperçu de l'hôte",
"xpack.infra.metricDetailPage.kubernetesMetricsLayout.nodeCpuCapacitySection.sectionLabel": "Capacité CPU du nœud",
"xpack.infra.metricDetailPage.kubernetesMetricsLayout.nodeDiskCapacitySection.sectionLabel": "Capacité du disque du nœud",
"xpack.infra.metricDetailPage.kubernetesMetricsLayout.nodeMemoryCapacitySection.sectionLabel": "Capacité de mémoire du nœud",
"xpack.infra.metricDetailPage.kubernetesMetricsLayout.nodePodCapacitySection.sectionLabel": "Capacité de pod du nœud",
"xpack.infra.metricDetailPage.kubernetesMetricsLayout.overviewSection.cpuUsageSeriesLabel": "Capacité CPU",
"xpack.infra.metricDetailPage.kubernetesMetricsLayout.overviewSection.diskCapacitySeriesLabel": "Capacité du disque",
"xpack.infra.metricDetailPage.kubernetesMetricsLayout.overviewSection.loadSeriesLabel": "Charge (5 min)",
"xpack.infra.metricDetailPage.kubernetesMetricsLayout.overviewSection.memoryUsageSeriesLabel": "Capacité de mémoire",
"xpack.infra.metricDetailPage.kubernetesMetricsLayout.overviewSection.podCapacitySeriesLabel": "Capacité de pod",
"xpack.infra.metricDetailPage.kubernetesMetricsLayout.overviewSection.sectionLabel": "Aperçu Kubernetes",
"xpack.infra.metricDetailPage.nginxMetricsLayout.activeConnectionsSection.sectionLabel": "Connexions actives",
"xpack.infra.metricDetailPage.nginxMetricsLayout.hitsSection.sectionLabel": "Résultats",
"xpack.infra.metricDetailPage.nginxMetricsLayout.requestRateSection.sectionLabel": "Taux de requêtes",
@ -39848,4 +39803,4 @@
"xpack.painlessLab.walkthroughButtonLabel": "Présentation",
"xpack.serverlessObservability.nav.getStarted": "Démarrer"
}
}
}

View file

@ -19010,25 +19010,6 @@
"xpack.infra.metadataEmbeddable.setFilterByValueTooltip": "値でフィルタリング",
"xpack.infra.metadataEmbeddable.setRemoveFilterTooltip": "フィルターを削除",
"xpack.infra.metadataEmbeddable.value": "値",
"xpack.infra.metricDetailPage.awsMetricsLayout.cpuUtilSection.percentSeriesLabel": "パーセント",
"xpack.infra.metricDetailPage.awsMetricsLayout.cpuUtilSection.sectionLabel": "CPU 使用状況",
"xpack.infra.metricDetailPage.awsMetricsLayout.diskioBytesSection.readsSeriesLabel": "読み取り",
"xpack.infra.metricDetailPage.awsMetricsLayout.diskioBytesSection.sectionLabel": "ディスク I/O バイト",
"xpack.infra.metricDetailPage.awsMetricsLayout.diskioBytesSection.writesSeriesLabel": "書き込み",
"xpack.infra.metricDetailPage.awsMetricsLayout.diskioOperationsSection.readsSeriesLabel": "読み取り",
"xpack.infra.metricDetailPage.awsMetricsLayout.diskioOperationsSection.sectionLabel": "ディスク I/O オペレーション",
"xpack.infra.metricDetailPage.awsMetricsLayout.diskioOperationsSection.writesSeriesLabel": "書き込み",
"xpack.infra.metricDetailPage.awsMetricsLayout.networkBytesSection.rxSeriesLabel": "in",
"xpack.infra.metricDetailPage.awsMetricsLayout.networkBytesSection.sectionLabel": "ネットワークトラフィック",
"xpack.infra.metricDetailPage.awsMetricsLayout.networkBytesSection.txSeriesLabel": "出",
"xpack.infra.metricDetailPage.awsMetricsLayout.networkPacketsSection.packetsInSeriesLabel": "in",
"xpack.infra.metricDetailPage.awsMetricsLayout.networkPacketsSection.packetsOutSeriesLabel": "出",
"xpack.infra.metricDetailPage.awsMetricsLayout.networkPacketsSection.sectionLabel": "ネットワークパケット(平均)",
"xpack.infra.metricDetailPage.awsMetricsLayout.overviewSection.cpuUtilizationSeriesLabel": "CPU 使用状況",
"xpack.infra.metricDetailPage.awsMetricsLayout.overviewSection.networkPacketsInLabel": "パケット(受信)",
"xpack.infra.metricDetailPage.awsMetricsLayout.overviewSection.networkPacketsOutLabel": "パケット(送信)",
"xpack.infra.metricDetailPage.awsMetricsLayout.overviewSection.sectionLabel": "AWS概要",
"xpack.infra.metricDetailPage.awsMetricsLayout.overviewSection.statusCheckFailedLabel": "ステータス確認失敗",
"xpack.infra.metricDetailPage.containerMetricsLayout.cpuUsageSection.sectionLabel": "CPU使用状況",
"xpack.infra.metricDetailPage.containerMetricsLayout.diskIoBytesSection.readRateSeriesLabel": "読み取り",
"xpack.infra.metricDetailPage.containerMetricsLayout.diskIoBytesSection.sectionLabel": "ディスク IOバイト",
@ -19053,32 +19034,6 @@
"xpack.infra.metricDetailPage.ec2MetricsLayout.diskIOBytesSection.writeLabel": "書き込み",
"xpack.infra.metricDetailPage.ec2MetricsLayout.networkTrafficSection.sectionLabel": "ネットワークトラフィック",
"xpack.infra.metricDetailPage.ec2MetricsLayout.overviewSection.sectionLabel": "Aws EC2概要",
"xpack.infra.metricDetailPage.hostMetricsLayout.cpuUsageSection.sectionLabel": "CPU使用状況",
"xpack.infra.metricDetailPage.hostMetricsLayout.layoutLabel": "ホスト",
"xpack.infra.metricDetailPage.hostMetricsLayout.loadSection.fifteenMinuteSeriesLabel": "15m",
"xpack.infra.metricDetailPage.hostMetricsLayout.loadSection.fiveMinuteSeriesLabel": "5m",
"xpack.infra.metricDetailPage.hostMetricsLayout.loadSection.oneMinuteSeriesLabel": "1m",
"xpack.infra.metricDetailPage.hostMetricsLayout.loadSection.sectionLabel": "読み込み",
"xpack.infra.metricDetailPage.hostMetricsLayout.memoryUsageSection.sectionLabel": "メモリー使用状況",
"xpack.infra.metricDetailPage.hostMetricsLayout.networkTrafficSection.networkRxRateSeriesLabel": "in",
"xpack.infra.metricDetailPage.hostMetricsLayout.networkTrafficSection.networkTxRateSeriesLabel": "出",
"xpack.infra.metricDetailPage.hostMetricsLayout.networkTrafficSection.sectionLabel": "ネットワークトラフィック",
"xpack.infra.metricDetailPage.hostMetricsLayout.overviewSection.cpuUsageSeriesLabel": "CPU使用状況",
"xpack.infra.metricDetailPage.hostMetricsLayout.overviewSection.inboundRXSeriesLabel": "受信RX",
"xpack.infra.metricDetailPage.hostMetricsLayout.overviewSection.loadSeriesLabel": "読み込み5m",
"xpack.infra.metricDetailPage.hostMetricsLayout.overviewSection.memoryCapacitySeriesLabel": "メモリー使用状況",
"xpack.infra.metricDetailPage.hostMetricsLayout.overviewSection.outboundTXSeriesLabel": "送信TX",
"xpack.infra.metricDetailPage.hostMetricsLayout.overviewSection.sectionLabel": "ホスト概要",
"xpack.infra.metricDetailPage.kubernetesMetricsLayout.nodeCpuCapacitySection.sectionLabel": "ノード CPU 処理能力",
"xpack.infra.metricDetailPage.kubernetesMetricsLayout.nodeDiskCapacitySection.sectionLabel": "ノードディスク容量",
"xpack.infra.metricDetailPage.kubernetesMetricsLayout.nodeMemoryCapacitySection.sectionLabel": "ノードメモリー容量",
"xpack.infra.metricDetailPage.kubernetesMetricsLayout.nodePodCapacitySection.sectionLabel": "ノードポッド容量",
"xpack.infra.metricDetailPage.kubernetesMetricsLayout.overviewSection.cpuUsageSeriesLabel": "CPU 処理能力",
"xpack.infra.metricDetailPage.kubernetesMetricsLayout.overviewSection.diskCapacitySeriesLabel": "ディスク容量",
"xpack.infra.metricDetailPage.kubernetesMetricsLayout.overviewSection.loadSeriesLabel": "読み込み5m",
"xpack.infra.metricDetailPage.kubernetesMetricsLayout.overviewSection.memoryUsageSeriesLabel": "メモリー容量",
"xpack.infra.metricDetailPage.kubernetesMetricsLayout.overviewSection.podCapacitySeriesLabel": "ポッド容量",
"xpack.infra.metricDetailPage.kubernetesMetricsLayout.overviewSection.sectionLabel": "Kubernetes概要",
"xpack.infra.metricDetailPage.nginxMetricsLayout.activeConnectionsSection.sectionLabel": "アクティブな接続",
"xpack.infra.metricDetailPage.nginxMetricsLayout.hitsSection.sectionLabel": "ヒット数",
"xpack.infra.metricDetailPage.nginxMetricsLayout.requestRateSection.sectionLabel": "リクエストレート",
@ -39839,4 +39794,4 @@
"xpack.painlessLab.walkthroughButtonLabel": "実地検証",
"xpack.serverlessObservability.nav.getStarted": "使ってみる"
}
}
}

View file

@ -19010,25 +19010,6 @@
"xpack.infra.metadataEmbeddable.setFilterByValueTooltip": "按值筛选",
"xpack.infra.metadataEmbeddable.setRemoveFilterTooltip": "移除筛选",
"xpack.infra.metadataEmbeddable.value": "值",
"xpack.infra.metricDetailPage.awsMetricsLayout.cpuUtilSection.percentSeriesLabel": "百分比",
"xpack.infra.metricDetailPage.awsMetricsLayout.cpuUtilSection.sectionLabel": "CPU 使用率",
"xpack.infra.metricDetailPage.awsMetricsLayout.diskioBytesSection.readsSeriesLabel": "读取数",
"xpack.infra.metricDetailPage.awsMetricsLayout.diskioBytesSection.sectionLabel": "磁盘 I/O 字节数",
"xpack.infra.metricDetailPage.awsMetricsLayout.diskioBytesSection.writesSeriesLabel": "写入数",
"xpack.infra.metricDetailPage.awsMetricsLayout.diskioOperationsSection.readsSeriesLabel": "读取数",
"xpack.infra.metricDetailPage.awsMetricsLayout.diskioOperationsSection.sectionLabel": "磁盘 I/O 操作数",
"xpack.infra.metricDetailPage.awsMetricsLayout.diskioOperationsSection.writesSeriesLabel": "写入数",
"xpack.infra.metricDetailPage.awsMetricsLayout.networkBytesSection.rxSeriesLabel": "于",
"xpack.infra.metricDetailPage.awsMetricsLayout.networkBytesSection.sectionLabel": "网络流量",
"xpack.infra.metricDetailPage.awsMetricsLayout.networkBytesSection.txSeriesLabel": "传出",
"xpack.infra.metricDetailPage.awsMetricsLayout.networkPacketsSection.packetsInSeriesLabel": "于",
"xpack.infra.metricDetailPage.awsMetricsLayout.networkPacketsSection.packetsOutSeriesLabel": "传出",
"xpack.infra.metricDetailPage.awsMetricsLayout.networkPacketsSection.sectionLabel": "网络数据包(平均值)",
"xpack.infra.metricDetailPage.awsMetricsLayout.overviewSection.cpuUtilizationSeriesLabel": "CPU 使用率",
"xpack.infra.metricDetailPage.awsMetricsLayout.overviewSection.networkPacketsInLabel": "数据包(传入)",
"xpack.infra.metricDetailPage.awsMetricsLayout.overviewSection.networkPacketsOutLabel": "数据包(传出)",
"xpack.infra.metricDetailPage.awsMetricsLayout.overviewSection.sectionLabel": "AWS 概览",
"xpack.infra.metricDetailPage.awsMetricsLayout.overviewSection.statusCheckFailedLabel": "状态检查失败",
"xpack.infra.metricDetailPage.containerMetricsLayout.cpuUsageSection.sectionLabel": "CPU 使用率",
"xpack.infra.metricDetailPage.containerMetricsLayout.diskIoBytesSection.readRateSeriesLabel": "读取数",
"xpack.infra.metricDetailPage.containerMetricsLayout.diskIoBytesSection.sectionLabel": "磁盘 IO字节",
@ -19053,32 +19034,6 @@
"xpack.infra.metricDetailPage.ec2MetricsLayout.diskIOBytesSection.writeLabel": "写入数",
"xpack.infra.metricDetailPage.ec2MetricsLayout.networkTrafficSection.sectionLabel": "网络流量",
"xpack.infra.metricDetailPage.ec2MetricsLayout.overviewSection.sectionLabel": "Aws EC2 概览",
"xpack.infra.metricDetailPage.hostMetricsLayout.cpuUsageSection.sectionLabel": "CPU 使用率",
"xpack.infra.metricDetailPage.hostMetricsLayout.layoutLabel": "主机",
"xpack.infra.metricDetailPage.hostMetricsLayout.loadSection.fifteenMinuteSeriesLabel": "15 分钟",
"xpack.infra.metricDetailPage.hostMetricsLayout.loadSection.fiveMinuteSeriesLabel": "5 分钟",
"xpack.infra.metricDetailPage.hostMetricsLayout.loadSection.oneMinuteSeriesLabel": "1 分钟",
"xpack.infra.metricDetailPage.hostMetricsLayout.loadSection.sectionLabel": "加载",
"xpack.infra.metricDetailPage.hostMetricsLayout.memoryUsageSection.sectionLabel": "内存利用率",
"xpack.infra.metricDetailPage.hostMetricsLayout.networkTrafficSection.networkRxRateSeriesLabel": "于",
"xpack.infra.metricDetailPage.hostMetricsLayout.networkTrafficSection.networkTxRateSeriesLabel": "传出",
"xpack.infra.metricDetailPage.hostMetricsLayout.networkTrafficSection.sectionLabel": "网络流量",
"xpack.infra.metricDetailPage.hostMetricsLayout.overviewSection.cpuUsageSeriesLabel": "CPU 使用率",
"xpack.infra.metricDetailPage.hostMetricsLayout.overviewSection.inboundRXSeriesLabel": "入站 (RX)",
"xpack.infra.metricDetailPage.hostMetricsLayout.overviewSection.loadSeriesLabel": "负载5 分钟)",
"xpack.infra.metricDetailPage.hostMetricsLayout.overviewSection.memoryCapacitySeriesLabel": "内存利用率",
"xpack.infra.metricDetailPage.hostMetricsLayout.overviewSection.outboundTXSeriesLabel": "出站 (TX)",
"xpack.infra.metricDetailPage.hostMetricsLayout.overviewSection.sectionLabel": "主机概览",
"xpack.infra.metricDetailPage.kubernetesMetricsLayout.nodeCpuCapacitySection.sectionLabel": "节点 CPU 容量",
"xpack.infra.metricDetailPage.kubernetesMetricsLayout.nodeDiskCapacitySection.sectionLabel": "节点磁盘容量",
"xpack.infra.metricDetailPage.kubernetesMetricsLayout.nodeMemoryCapacitySection.sectionLabel": "节点内存容量",
"xpack.infra.metricDetailPage.kubernetesMetricsLayout.nodePodCapacitySection.sectionLabel": "节点 Pod 容量",
"xpack.infra.metricDetailPage.kubernetesMetricsLayout.overviewSection.cpuUsageSeriesLabel": "CPU 容量",
"xpack.infra.metricDetailPage.kubernetesMetricsLayout.overviewSection.diskCapacitySeriesLabel": "磁盘容量",
"xpack.infra.metricDetailPage.kubernetesMetricsLayout.overviewSection.loadSeriesLabel": "负载5 分钟)",
"xpack.infra.metricDetailPage.kubernetesMetricsLayout.overviewSection.memoryUsageSeriesLabel": "内存容量",
"xpack.infra.metricDetailPage.kubernetesMetricsLayout.overviewSection.podCapacitySeriesLabel": "Pod 容量",
"xpack.infra.metricDetailPage.kubernetesMetricsLayout.overviewSection.sectionLabel": "Kubernetes 概览",
"xpack.infra.metricDetailPage.nginxMetricsLayout.activeConnectionsSection.sectionLabel": "活动连接",
"xpack.infra.metricDetailPage.nginxMetricsLayout.hitsSection.sectionLabel": "命中数",
"xpack.infra.metricDetailPage.nginxMetricsLayout.requestRateSection.sectionLabel": "请求速率",
@ -39833,4 +39788,4 @@
"xpack.painlessLab.walkthroughButtonLabel": "指导",
"xpack.serverlessObservability.nav.getStarted": "开始使用"
}
}
}

View file

@ -15,7 +15,7 @@ import { FtrProviderContext } from '../../ftr_provider_context';
import { DATES } from './constants';
const { min, max } = DATES['7.0.0'].hosts;
const { min, max } = DATES['8.0.0'].pods_only;
interface NodeDetailsRequest {
metrics: InventoryMetric[];
@ -31,8 +31,8 @@ export default function ({ getService }: FtrProviderContext) {
const supertest = getService('supertest');
describe('metrics', () => {
before(() => esArchiver.load('x-pack/test/functional/es_archives/infra/7.0.0/hosts'));
after(() => esArchiver.unload('x-pack/test/functional/es_archives/infra/7.0.0/hosts'));
before(() => esArchiver.load('x-pack/test/functional/es_archives/infra/8.0.0/pods_only'));
after(() => esArchiver.unload('x-pack/test/functional/es_archives/infra/8.0.0/pods_only'));
const fetchNodeDetails = async (
body: NodeDetailsRequest
@ -48,14 +48,14 @@ export default function ({ getService }: FtrProviderContext) {
it('should basically work', async () => {
const data = fetchNodeDetails({
sourceId: 'default',
metrics: ['hostCpuUsage'],
metrics: ['podCpuUsage'],
timerange: {
to: max,
from: min,
interval: '>=1m',
},
nodeId: 'demo-stack-mysql-01',
nodeType: 'host',
nodeId: '7d6d7955-f853-42b1-8613-11f52d0d2725',
nodeType: 'pod',
});
return data.then((resp) => {
if (!resp) {
@ -63,28 +63,28 @@ export default function ({ getService }: FtrProviderContext) {
}
expect(resp.metrics.length).to.equal(1);
const metric = first(resp.metrics) as any;
expect(metric).to.have.property('id', 'hostCpuUsage');
expect(metric).to.have.property('id', 'podCpuUsage');
expect(metric).to.have.property('series');
const series = first(metric.series) as any;
expect(series).to.have.property('id', 'user');
expect(series).to.have.property('id', 'cpu');
expect(series).to.have.property('data');
const datapoint = last(series.data) as any;
expect(datapoint).to.have.property('timestamp', 1547571780000);
expect(datapoint).to.have.property('value', 0.0015);
expect(datapoint).to.have.property('timestamp', 1642698890000);
expect(datapoint).to.have.property('value', 0.544);
});
});
it('should support multiple metrics', async () => {
const data = fetchNodeDetails({
sourceId: 'default',
metrics: ['hostCpuUsage', 'hostLoad'],
metrics: ['podCpuUsage', 'podMemoryUsage'],
timerange: {
to: max,
from: min,
interval: '>=1m',
},
nodeId: 'demo-stack-mysql-01',
nodeType: 'host',
nodeId: '7d6d7955-f853-42b1-8613-11f52d0d2725',
nodeType: 'pod',
});
return data.then((resp) => {
if (!resp) {
@ -95,28 +95,26 @@ export default function ({ getService }: FtrProviderContext) {
});
});
it('should return multiple values for hostSystemOverview metric', () => {
it('should return multiple values for podOverview metric', () => {
const data = fetchNodeDetails({
sourceId: 'default',
metrics: ['hostSystemOverview'],
metrics: ['podOverview'],
timerange: {
to: max,
from: min,
interval: '>=1m',
},
nodeId: 'demo-stack-mysql-01',
nodeType: 'host',
nodeId: '7d6d7955-f853-42b1-8613-11f52d0d2725',
nodeType: 'pod',
});
return data.then((resp) => {
if (!resp) {
return;
}
const hostSystemOverviewMetric = resp.metrics.find(
(metric) => metric.id === 'hostSystemOverview'
);
const podOverviewMetric = resp.metrics.find((metric) => metric.id === 'podOverview');
expect(hostSystemOverviewMetric?.series.length).to.be.greaterThan(1);
expect(podOverviewMetric?.series.length).to.be.greaterThan(1);
});
});
});