Skip to content

Commit

Permalink
chore: some cleanups in plumbing for integration connection status
Browse files Browse the repository at this point in the history
  • Loading branch information
raj-k-singh committed Mar 18, 2024
1 parent 43f9830 commit 03d773d
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 37 deletions.
5 changes: 2 additions & 3 deletions frontend/src/hooks/Integrations/useGetIntegrationStatus.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,12 @@ import {

export const useGetIntegrationStatus = ({
integrationId,
enabled,
}: GetIntegrationPayloadProps): UseQueryResult<
AxiosResponse<GetIntegrationStatusProps>,
AxiosError
> =>
useQuery<AxiosResponse<GetIntegrationStatusProps>, AxiosError>({
queryKey: ['Integration', integrationId, Date.now()],
queryKey: ['integration-connection-status', integrationId],
queryFn: () => getIntegrationStatus({ integrationId }),
enabled,
refetchInterval: 5000,
});
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import { useNotifications } from 'hooks/useNotifications';
import { ArrowLeftRight, Check } from 'lucide-react';
import { useState } from 'react';
import { useMutation } from 'react-query';
import { IntegrationStatusProps } from 'types/api/integrations/types';
import { IntegrationConnectionStatus } from 'types/api/integrations/types';

import TestConnection, { ConnectionStates } from './TestConnection';

Expand All @@ -20,7 +20,7 @@ interface IntegrationDetailHeaderProps {
icon: string;
refetchIntegrationDetails: () => void;
connectionState: ConnectionStates;
connectionData: IntegrationStatusProps['connection_status'];
connectionData: IntegrationConnectionStatus;
}
function IntegrationDetailHeader(
props: IntegrationDetailHeaderProps,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import { useGetIntegration } from 'hooks/Integrations/useGetIntegration';
import { useGetIntegrationStatus } from 'hooks/Integrations/useGetIntegrationStatus';
import { defaultTo } from 'lodash-es';
import { ArrowLeft, MoveUpRight, RotateCw } from 'lucide-react';
import { useEffect } from 'react';
import { isCloudUser } from 'utils/app';

import { handleContactSupport } from '../utils';
Expand Down Expand Up @@ -41,11 +40,9 @@ function IntegrationDetailPage(props: IntegrationDetailPageProps): JSX.Element {

const {
data: integrationStatus,
refetch: refetchStatus,
isLoading: isStatusLoading,
} = useGetIntegrationStatus({
integrationId: selectedIntegration,
enabled: false,
});

const loading = isLoading || isFetching || isRefetching || isStatusLoading;
Expand All @@ -54,23 +51,11 @@ function IntegrationDetailPage(props: IntegrationDetailPageProps): JSX.Element {
const connectionStatus = getConnectionStatesFromConnectionStatus(
integrationData?.installation,
defaultTo(
integrationStatus?.data.data.connection_status,
integrationStatus?.data.data,
defaultTo(integrationData?.connection_status, { logs: null, metrics: null }),
),
);

useEffect(() => {
// we should once get data on load and then keep polling every 5 seconds
refetchStatus();
const timer = setInterval(() => {
refetchStatus();
}, 5000);

return (): void => {
clearInterval(timer);
};
}, [refetchStatus]);

return (
<div className="integration-detail-content">
<Button
Expand Down Expand Up @@ -128,10 +113,10 @@ function IntegrationDetailPage(props: IntegrationDetailPageProps): JSX.Element {
description={defaultTo(integrationData?.description, '')}
icon={defaultTo(integrationData?.icon, '')}
connectionState={connectionStatus}
connectionData={defaultTo(
integrationStatus?.data.data.connection_status,
{ logs: null, metrics: null },
)}
connectionData={defaultTo(integrationStatus?.data.data, {
logs: null,
metrics: null,
})}
refetchIntegrationDetails={refetch}
/>
<IntegrationDetailContent
Expand Down
22 changes: 10 additions & 12 deletions frontend/src/types/api/integrations/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,21 +65,19 @@ export interface GetIntegrationProps {
data: IntegrationDetailedProps;
}

export interface IntegrationStatusProps {
connection_status: {
logs: {
last_received_ts_ms: number;
last_received_from: string;
} | null;
metrics: {
last_received_ts_ms: number;
last_received_from: string;
} | null;
};
export interface IntegrationConnectionStatus {
logs: {
last_received_ts_ms: number;
last_received_from: string;
} | null;
metrics: {
last_received_ts_ms: number;
last_received_from: string;
} | null;
}

export interface GetIntegrationStatusProps {
data: IntegrationStatusProps;
data: IntegrationConnectionStatus;
}

export interface GetIntegrationPayloadProps {
Expand Down

0 comments on commit 03d773d

Please sign in to comment.