import React from 'react'; import { CollapsibleSection, InstanceLoadBalancerHealth, robotToHuman, Tooltip } from '@spinnaker/core'; import type { IAmazonHealth } from '../../domain'; export type MetricTypes = 'LoadBalancer' | 'TargetGroup'; export interface CustomHealthLink { type: string; href: string; text: string; } export interface IInstanceStatusProps { healthMetrics: IAmazonHealth[]; healthState: string; metricTypes: MetricTypes[]; customHealthUrl?: CustomHealthLink; privateIpAddress?: string; } export const InstanceStatus = ({ healthMetrics, healthState, metricTypes, customHealthUrl, privateIpAddress, }: IInstanceStatusProps) => { const hasLoadBalancer = metricTypes.includes('LoadBalancer'); const hasTargetGroup = metricTypes.includes('TargetGroup'); return ( {!healthMetrics.length && (

{healthState === 'Starting' ? 'Starting' : 'No health metrics found for this instance'}

)}
{healthMetrics .sort((a: IAmazonHealth, b: IAmazonHealth) => (a.type < b.type ? -1 : a.type > b.type ? 1 : 0)) .map((metric: IAmazonHealth) => (
{robotToHuman(metric.type)}
{!metricTypes.includes(metric.type as MetricTypes) && (
{robotToHuman(metric.state)} {metric.healthCheckUrl && ( Health Check )} {metric.healthCheckUrl && metric.statusPageUrl && | } {metric.statusPageUrl && ( Status )} {customHealthUrl && metric.type === customHealthUrl.type && ( {' '} |{' '} {customHealthUrl.text} )}
)} {hasLoadBalancer && metric.type === 'LoadBalancer' && (metric.loadBalancers || []).map((lb) => ( ))} {hasTargetGroup && metric.type === 'TargetGroup' && (metric.targetGroups || []).map((tg) => ( ))}
))}
); };