mirror of
https://github.com/supabase/supabase.git
synced 2026-10-06 01:45:10 +03:00
76 lines
2.4 KiB
TypeScript
76 lines
2.4 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
|
|
import type { InfraMonitoringMultiResponse } from '@/data/analytics/infra-monitoring-query'
|
|
import {
|
|
COMPUTE_METRICS_ATTRIBUTES,
|
|
getComputeMetricAvailability,
|
|
} from '@/hooks/analytics/useComputeMetrics.utils'
|
|
|
|
function createMetricsResponse(): InfraMonitoringMultiResponse {
|
|
return {
|
|
data: [],
|
|
series: Object.fromEntries(
|
|
COMPUTE_METRICS_ATTRIBUTES.map((attribute) => [
|
|
attribute,
|
|
{ yAxisLimit: 100, format: '', total: 0, totalAverage: 0 },
|
|
])
|
|
),
|
|
}
|
|
}
|
|
|
|
const allAvailable = { cpu: true, memory: true, disk: true, connections: true }
|
|
|
|
describe('getComputeMetricAvailability', () => {
|
|
it('keeps successful zero values available', () => {
|
|
expect(getComputeMetricAvailability(createMetricsResponse())).toEqual(allAvailable)
|
|
})
|
|
|
|
it.each([
|
|
['avg_cpu_usage', 'cpu'],
|
|
['ram_usage', 'memory'],
|
|
['disk_fs_used_system', 'disk'],
|
|
['disk_fs_used_wal', 'disk'],
|
|
['pg_database_size', 'disk'],
|
|
['disk_fs_size', 'disk'],
|
|
['pg_stat_database_num_backends', 'connections'],
|
|
])(
|
|
'only marks the affected metric unavailable when %s fails or is missing',
|
|
(attribute, metric) => {
|
|
const response = createMetricsResponse()
|
|
response.errors = { [attribute]: { message: 'Failed to load attribute' } }
|
|
expect(getComputeMetricAvailability(response)).toEqual({ ...allAvailable, [metric]: false })
|
|
|
|
delete response.errors
|
|
delete response.series[attribute]
|
|
expect(getComputeMetricAvailability(response)).toEqual({ ...allAvailable, [metric]: false })
|
|
}
|
|
)
|
|
|
|
it('ignores errors for unrelated attributes', () => {
|
|
const response = createMetricsResponse()
|
|
response.errors = { disk_io_consumption: { message: 'Failed to load attribute' } }
|
|
expect(getComputeMetricAvailability(response)).toEqual(allAvailable)
|
|
})
|
|
|
|
it.each([undefined, { data: [], series: {} }])('handles absent metrics', (response) => {
|
|
expect(getComputeMetricAvailability(response)).toEqual({
|
|
cpu: false,
|
|
memory: false,
|
|
disk: false,
|
|
connections: false,
|
|
})
|
|
})
|
|
|
|
it('handles a response without multi-attribute series', () => {
|
|
expect(
|
|
getComputeMetricAvailability({
|
|
data: [],
|
|
yAxisLimit: 100,
|
|
format: '',
|
|
total: 0,
|
|
totalAverage: 0,
|
|
})
|
|
).toEqual({ cpu: false, memory: false, disk: false, connections: false })
|
|
})
|
|
})
|