import { Button, Tabs, TabsProps } from 'antd'; import { MarkdownRenderer } from 'components/MarkdownRenderer/MarkdownRenderer'; import Spinner from 'components/Spinner'; import CloudServiceDashboards from 'container/CloudIntegrationPage/ServicesSection/CloudServiceDashboards'; import CloudServiceDataCollected from 'container/CloudIntegrationPage/ServicesSection/CloudServiceDataCollected'; import { IServiceStatus } from 'container/CloudIntegrationPage/ServicesSection/types'; import dayjs from 'dayjs'; import { useServiceDetails } from 'hooks/integrations/aws/useServiceDetails'; import useUrlQuery from 'hooks/useUrlQuery'; import { useMemo, useState } from 'react'; import ConfigureServiceModal from './ConfigureServiceModal'; const getStatus = ( logsLastReceivedTimestamp: number | undefined, metricsLastReceivedTimestamp: number | undefined, ): { text: string; className: string } => { if (!logsLastReceivedTimestamp && !metricsLastReceivedTimestamp) { return { text: 'No Data Yet', className: 'service-status--no-data' }; } const latestTimestamp = Math.max( logsLastReceivedTimestamp || 0, metricsLastReceivedTimestamp || 0, ); const isStale = dayjs().diff(dayjs(latestTimestamp), 'minute') > 30; if (isStale) { return { text: 'Stale Data', className: 'service-status--stale-data' }; } return { text: 'Connected', className: 'service-status--connected' }; }; function ServiceStatus({ serviceStatus, }: { serviceStatus: IServiceStatus | undefined; }): JSX.Element { const logsLastReceivedTimestamp = serviceStatus?.logs?.last_received_ts_ms; const metricsLastReceivedTimestamp = serviceStatus?.metrics?.last_received_ts_ms; const { text, className } = getStatus( logsLastReceivedTimestamp, metricsLastReceivedTimestamp, ); return