mirror of https://github.com/portainer/portainer
113 lines
2.6 KiB
TypeScript
113 lines
2.6 KiB
TypeScript
import clsx from 'clsx';
|
|
|
|
import { notifySuccess } from '@/portainer/services/notifications';
|
|
import { EnvironmentId } from '@/react/portainer/environments/types';
|
|
|
|
import { Button } from '@@/buttons';
|
|
import { Icon } from '@@/Icon';
|
|
|
|
import { EdgeStack } from '../../types';
|
|
|
|
import { useCollectLogsMutation } from './useCollectLogsMutation';
|
|
import { useDeleteLogsMutation } from './useDeleteLogsMutation';
|
|
import { useDownloadLogsMutation } from './useDownloadLogsMutation';
|
|
import { useLogsStatus } from './useLogsStatus';
|
|
|
|
interface Props {
|
|
environmentId: EnvironmentId;
|
|
edgeStackId: EdgeStack['Id'];
|
|
}
|
|
|
|
export function LogsActions({ environmentId, edgeStackId }: Props) {
|
|
const logsStatusQuery = useLogsStatus(edgeStackId, environmentId);
|
|
const collectLogsMutation = useCollectLogsMutation();
|
|
const downloadLogsMutation = useDownloadLogsMutation();
|
|
const deleteLogsMutation = useDeleteLogsMutation();
|
|
|
|
if (!logsStatusQuery.isSuccess) {
|
|
return null;
|
|
}
|
|
|
|
const status = logsStatusQuery.data;
|
|
|
|
const collecting = collectLogsMutation.isLoading || status === 'pending';
|
|
|
|
return (
|
|
<>
|
|
<Button color="none" title="Retrieve logs" onClick={handleCollectLogs}>
|
|
<Icon
|
|
icon={clsx({
|
|
'file-text': !collecting,
|
|
loader: collecting,
|
|
})}
|
|
/>
|
|
</Button>
|
|
<Button
|
|
color="none"
|
|
title="Download logs"
|
|
disabled={status !== 'collected'}
|
|
onClick={handleDownloadLogs}
|
|
>
|
|
<Icon
|
|
icon={clsx({
|
|
'download-cloud': !downloadLogsMutation.isLoading,
|
|
loader: downloadLogsMutation.isLoading,
|
|
})}
|
|
/>
|
|
</Button>
|
|
<Button
|
|
color="none"
|
|
title="Delete logs"
|
|
disabled={status !== 'collected'}
|
|
onClick={handleDeleteLogs}
|
|
>
|
|
<Icon
|
|
icon={clsx({
|
|
delete: !deleteLogsMutation.isLoading,
|
|
loader: deleteLogsMutation.isLoading,
|
|
})}
|
|
/>
|
|
</Button>
|
|
</>
|
|
);
|
|
|
|
function handleCollectLogs() {
|
|
if (status === 'pending') {
|
|
return;
|
|
}
|
|
|
|
collectLogsMutation.mutate(
|
|
{
|
|
edgeStackId,
|
|
environmentId,
|
|
},
|
|
{
|
|
onSuccess() {
|
|
notifySuccess('Success', 'Logs Collection started');
|
|
},
|
|
}
|
|
);
|
|
}
|
|
|
|
function handleDownloadLogs() {
|
|
downloadLogsMutation.mutate({
|
|
edgeStackId,
|
|
environmentId,
|
|
});
|
|
}
|
|
|
|
function handleDeleteLogs() {
|
|
deleteLogsMutation.mutate(
|
|
{
|
|
edgeStackId,
|
|
environmentId,
|
|
},
|
|
{
|
|
onSuccess() {
|
|
notifySuccess('Success', 'Logs Deleted');
|
|
},
|
|
}
|
|
);
|
|
}
|
|
}
|