mirror of https://github.com/portainer/portainer
76 lines
1.8 KiB
TypeScript
76 lines
1.8 KiB
TypeScript
import { useQuery } from 'react-query';
|
|
|
|
import { EnvironmentId } from '@/react/portainer/environments/types';
|
|
import axios from '@/portainer/services/axios';
|
|
import { ServiceId } from '@/react/docker/services/types';
|
|
import { ContainerId } from '@/react/docker/containers/types';
|
|
|
|
import { ImageStatus, ResourceID, ResourceType } from './types';
|
|
|
|
export function useImageNotification(
|
|
environmentId: number,
|
|
resourceId: ResourceID,
|
|
resourceType: ResourceType,
|
|
nodeName: string,
|
|
enabled = false
|
|
) {
|
|
return useQuery(
|
|
[
|
|
'environments',
|
|
environmentId,
|
|
'docker',
|
|
'images',
|
|
resourceType,
|
|
resourceId,
|
|
'status',
|
|
],
|
|
() =>
|
|
resourceType === ResourceType.SERVICE
|
|
? getServiceImagesStatus(environmentId, resourceId)
|
|
: getContainerImagesStatus(environmentId, resourceId, nodeName),
|
|
{
|
|
enabled,
|
|
}
|
|
);
|
|
}
|
|
|
|
async function getContainerImagesStatus(
|
|
environmentId: EnvironmentId,
|
|
containerID: ContainerId,
|
|
nodeName: string
|
|
) {
|
|
try {
|
|
let headers = {};
|
|
if (nodeName !== '') {
|
|
headers = { 'X-PortainerAgent-Target': nodeName };
|
|
}
|
|
const { data } = await axios.get<ImageStatus>(
|
|
`/docker/${environmentId}/containers/${containerID}/image_status`,
|
|
{ headers }
|
|
);
|
|
return data;
|
|
} catch (e) {
|
|
return {
|
|
Status: 'unknown',
|
|
Message: `Unable to retrieve image status for container: ${containerID}`,
|
|
};
|
|
}
|
|
}
|
|
|
|
async function getServiceImagesStatus(
|
|
environmentId: EnvironmentId,
|
|
serviceID: ServiceId
|
|
) {
|
|
try {
|
|
const { data } = await axios.get<ImageStatus>(
|
|
`/docker/${environmentId}/services/${serviceID}/image_status`
|
|
);
|
|
return data;
|
|
} catch (e) {
|
|
return {
|
|
Status: 'unknown',
|
|
Message: `Unable to retrieve image status for service: ${serviceID}`,
|
|
};
|
|
}
|
|
}
|