diff --git a/public/app/percona/backup/Backup.service.ts b/public/app/percona/backup/Backup.service.ts
index 8dcf7859860a9..e0ece5ce7ea44 100644
--- a/public/app/percona/backup/Backup.service.ts
+++ b/public/app/percona/backup/Backup.service.ts
@@ -4,7 +4,7 @@ import { api } from 'app/percona/shared/helpers/api';
import { getCronStringFromValues } from '../shared/helpers/cron/cron';
-import { BackupMode, BackupType, DataModel, RetryMode } from './Backup.types';
+import { BackupMode, BackupType, Compression, DataModel, RetryMode } from './Backup.types';
import { AddBackupFormProps } from './components/AddBackupPage/AddBackupPage.types';
const BASE_URL = '/v1/backups';
@@ -32,6 +32,7 @@ export const BackupService = {
type,
dataModel,
folder,
+ compression,
} = values;
const strRetryInterval = `${retryInterval}s`;
const resultRetryTimes = retryMode === RetryMode.MANUAL ? 0 : retryTimes;
@@ -46,6 +47,7 @@ export const BackupService = {
resultRetryTimes!,
dataModel,
folder,
+ compression.value!,
token
);
} else {
@@ -66,7 +68,8 @@ export const BackupService = {
description ?? '',
strRetryInterval,
resultRetryTimes!,
- retention!
+ retention!,
+ compression.value!
);
} else {
return this.scheduleBackup(
@@ -81,7 +84,8 @@ export const BackupService = {
active!,
mode,
dataModel,
- folder
+ folder,
+ compression.value!
);
}
}
@@ -95,6 +99,7 @@ export const BackupService = {
retryTimes: number,
dataModel: DataModel,
folder: string,
+ compression: Compression,
token?: CancelToken
) {
return api.post(
@@ -108,6 +113,7 @@ export const BackupService = {
retries: retryTimes,
data_model: dataModel,
folder,
+ compression,
},
false,
token
@@ -125,7 +131,8 @@ export const BackupService = {
enabled: boolean,
mode: BackupMode,
dataModel: DataModel,
- folder: string
+ folder: string,
+ compression: Compression
) {
return api.post(`${BASE_URL}:schedule`, {
service_id: serviceId,
@@ -140,6 +147,7 @@ export const BackupService = {
mode,
data_model: dataModel,
folder,
+ compression,
});
},
async changeScheduleBackup(
@@ -150,7 +158,8 @@ export const BackupService = {
description: string,
retryInterval: string,
retryTimes: number,
- retention: number
+ retention: number,
+ compression: Compression
) {
return api.put(`${BASE_URL}:changeScheduled`, {
scheduled_backup_id: id,
@@ -161,6 +170,7 @@ export const BackupService = {
retry_interval: retryInterval,
retries: retryTimes,
retention,
+ compression,
});
},
};
diff --git a/public/app/percona/backup/Backup.types.ts b/public/app/percona/backup/Backup.types.ts
index b30b9d5943d7f..5c2db43e7d87a 100644
--- a/public/app/percona/backup/Backup.types.ts
+++ b/public/app/percona/backup/Backup.types.ts
@@ -40,6 +40,18 @@ export enum BackupType {
SCHEDULED = 'SCHEDULED',
}
+export enum Compression {
+ DEFAULT = 'BACKUP_COMPRESSION_DEFAULT',
+ NONE = 'BACKUP_COMPRESSION_NONE',
+ QUICKLZ = 'BACKUP_COMPRESSION_QUICKLZ',
+ ZSTD = 'BACKUP_COMPRESSION_ZSTD',
+ LZ4 = 'BACKUP_COMPRESSION_LZ4',
+ S2 = 'BACKUP_COMPRESSION_S2',
+ GZIP = 'BACKUP_COMPRESSION_GZIP',
+ SNAPPY = 'BACKUP_COMPRESSION_SNAPPY',
+ PGZIP = 'BACKUP_COMPRESSION_PGZIP',
+}
+
export interface RawBackupLog {
chunk_id: number;
data: string;
diff --git a/public/app/percona/backup/components/AddBackupPage/AddBackupPage.constants.ts b/public/app/percona/backup/components/AddBackupPage/AddBackupPage.constants.ts
index 57349465b45ff..089736ed93f3f 100644
--- a/public/app/percona/backup/components/AddBackupPage/AddBackupPage.constants.ts
+++ b/public/app/percona/backup/components/AddBackupPage/AddBackupPage.constants.ts
@@ -87,3 +87,4 @@ export const MIN_RETENTION = 0;
export const MAX_RETENTION = 99;
export const MAX_BACKUP_NAME = 100;
+
diff --git a/public/app/percona/backup/components/AddBackupPage/AddBackupPage.messages.ts b/public/app/percona/backup/components/AddBackupPage/AddBackupPage.messages.ts
index 9dfb45e2e45b1..13aa26cb5c2d5 100644
--- a/public/app/percona/backup/components/AddBackupPage/AddBackupPage.messages.ts
+++ b/public/app/percona/backup/components/AddBackupPage/AddBackupPage.messages.ts
@@ -13,6 +13,10 @@ export const Messages = {
folder: 'Folder',
location: 'Location',
retryMode: 'Retry mode',
+ compression: 'Compression',
+ compressionTooltip:
+ 'Choose the compression algorithm for the backup. Different algorithms offer different trade-offs between compression ratio and speed.',
+ selectCompression: 'Select compression type',
cancelAction: 'Cancel',
retryTimes: 'Retry, times',
retryInterval: 'Retry interval, seconds',
diff --git a/public/app/percona/backup/components/AddBackupPage/AddBackupPage.test.tsx b/public/app/percona/backup/components/AddBackupPage/AddBackupPage.test.tsx
index 4064a753296d2..6650529053e26 100644
--- a/public/app/percona/backup/components/AddBackupPage/AddBackupPage.test.tsx
+++ b/public/app/percona/backup/components/AddBackupPage/AddBackupPage.test.tsx
@@ -1,5 +1,5 @@
import { fireEvent, render, screen, waitFor } from '@testing-library/react';
-import { FC, PropsWithChildren } from 'react';
+import { act, FC, PropsWithChildren } from 'react';
import { Provider } from 'react-redux';
import { MemoryRouter } from 'react-router-dom-v5-compat';
@@ -154,4 +154,26 @@ describe('AddBackupPage', () => {
await fireEvent.click(button);
expect(screen.getByText('Create Backup on demand')).toBeInTheDocument();
});
+
+ it('should render compression field in advanced settings', async () => {
+ render(
+
+
+
+
+
+ );
+
+ await waitFor(() => expect(screen.getAllByText('Choose')).toHaveLength(2));
+
+ const advancedSettingsButton = screen.getByTestId('add-backup-advanced-settings');
+ act(() => {
+ fireEvent.click(advancedSettingsButton);
+ });
+
+ await waitFor(() => {
+ expect(screen.getByTestId('compression-select-input')).toBeInTheDocument();
+ expect(screen.getByText(Messages.compression)).toBeInTheDocument();
+ });
+ });
});
diff --git a/public/app/percona/backup/components/AddBackupPage/AddBackupPage.tsx b/public/app/percona/backup/components/AddBackupPage/AddBackupPage.tsx
index c61f88222e492..5228c0dec367a 100644
--- a/public/app/percona/backup/components/AddBackupPage/AddBackupPage.tsx
+++ b/public/app/percona/backup/components/AddBackupPage/AddBackupPage.tsx
@@ -32,7 +32,7 @@ import { PageSwitcherCard } from '../../../shared/components/Elements/PageSwitch
import { BACKUP_INVENTORY_URL, BACKUP_SCHEDULED_URL } from '../../Backup.constants';
import { Messages as MessagesBackup } from '../../Backup.messages';
import { BackupService } from '../../Backup.service';
-import { BackupMode, BackupType, DataModel } from '../../Backup.types';
+import { BackupMode, BackupType, Compression, DataModel } from '../../Backup.types';
import { BackupErrorSection } from '../BackupErrorSection/BackupErrorSection';
import { BACKUP_CANCEL_TOKEN, LIST_ARTIFACTS_CANCEL_TOKEN } from '../BackupInventory/BackupInventory.constants';
import { BackupInventoryService } from '../BackupInventory/BackupInventory.service';
@@ -49,6 +49,7 @@ import { getStyles } from './AddBackupPage.styles';
import { AddBackupFormProps, SelectableService } from './AddBackupPage.types';
import {
getBackupModeOptions,
+ getCompressionOptionFromValue,
getDataModelFromVendor,
getLabelForStorageOption,
isDataModelDisabled,
@@ -113,6 +114,14 @@ const AddBackupPage: FC = () => {
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
+ const loadCompressionOptions = useCallback(async (serviceId?: string) => {
+ if (!serviceId) {
+ return [getCompressionOptionFromValue(Compression.DEFAULT)];
+ }
+ const methods = await BackupInventoryService.listServiceCompressions(serviceId);
+ return methods.map((m) => getCompressionOptionFromValue(m));
+ }, []);
+
const handleBackup = async (values: AddBackupFormProps) => {
try {
await BackupService.backup(values, generateToken(BACKUP_CANCEL_TOKEN));
@@ -356,6 +365,23 @@ const AddBackupPage: FC = () => {
buttonDataTestId="add-backup-advanced-settings"
>
+
+
+ {({ input }) => (
+ loadCompressionOptions(values.service?.value?.id)}
+ className={styles.selectField}
+ data-testid="compression-select-input"
+ {...input}
+ />
+ )}
+
+
;
}
diff --git a/public/app/percona/backup/components/AddBackupPage/AddBackupPage.utils.ts b/public/app/percona/backup/components/AddBackupPage/AddBackupPage.utils.ts
index 9f7a3c7b175a0..578b8bd5b101f 100644
--- a/public/app/percona/backup/components/AddBackupPage/AddBackupPage.utils.ts
+++ b/public/app/percona/backup/components/AddBackupPage/AddBackupPage.utils.ts
@@ -1,6 +1,6 @@
/* eslint-disable @typescript-eslint/consistent-type-assertions */
import { SelectableValue } from '@grafana/data';
-import { BackupMode, BackupType, DataModel, RetryMode } from 'app/percona/backup/Backup.types';
+import { BackupMode, BackupType, DataModel, RetryMode, Compression } from 'app/percona/backup/Backup.types';
import { Databases } from 'app/percona/shared/core';
import { getPeriodFromCronparts, parseCronString } from 'app/percona/shared/helpers/cron/cron';
import { PeriodType } from 'app/percona/shared/helpers/cron/types';
@@ -54,6 +54,16 @@ const getBackupType = (backup: Backup | ScheduledBackup | null): BackupType => {
return BackupType.DEMAND;
};
+const compressionValueToKeyMap: Record = Object.fromEntries(
+ Object.entries(Compression).map(([key, val]) => [val, key])
+);
+
+export const getCompressionOptionFromValue = (value: Compression): SelectableValue => ({
+ value,
+ label: compressionValueToKeyMap[value] ?? value,
+});
+
+
export const toFormBackup = (backup: Backup | ScheduledBackup | null, scheduleMode?: boolean): AddBackupFormProps => {
if (!backup) {
return {
@@ -79,6 +89,7 @@ export const toFormBackup = (backup: Backup | ScheduledBackup | null, scheduleMo
mode: BackupMode.SNAPSHOT,
type: scheduleMode ? BackupType.SCHEDULED : getBackupType(backup),
folder: '',
+ compression: getCompressionOptionFromValue(Compression.DEFAULT),
};
}
@@ -130,6 +141,7 @@ export const toFormBackup = (backup: Backup | ScheduledBackup | null, scheduleMo
mode,
type: BackupType.SCHEDULED,
folder,
+ compression: getCompressionOptionFromValue(backup.compression),
};
} else {
return {
@@ -146,6 +158,7 @@ export const toFormBackup = (backup: Backup | ScheduledBackup | null, scheduleMo
retryInterval: 30,
type: BackupType.DEMAND,
folder,
+ compression: getCompressionOptionFromValue(backup.compression),
};
}
};
diff --git a/public/app/percona/backup/components/BackupInventory/BackupInventory.service.ts b/public/app/percona/backup/components/BackupInventory/BackupInventory.service.ts
index 29c4de04f9ad0..8520f30950b30 100644
--- a/public/app/percona/backup/components/BackupInventory/BackupInventory.service.ts
+++ b/public/app/percona/backup/components/BackupInventory/BackupInventory.service.ts
@@ -4,9 +4,9 @@ import { SelectableValue } from '@grafana/data';
import { DBServiceList, CompatibleServiceListPayload } from 'app/percona/inventory/Inventory.types';
import { api } from 'app/percona/shared/helpers/api';
-import { BackupLogResponse, BackupLogs, DataModel } from '../../Backup.types';
+import { BackupLogResponse, BackupLogs, Compression, DataModel } from '../../Backup.types';
-import { Backup, BackupResponse, Timeranges, TimerangesResponse } from './BackupInventory.types';
+import { Backup, BackupResponse, CompressionResponse, Timeranges, TimerangesResponse } from './BackupInventory.types';
import { formatDate } from './BackupInventory.utils';
const BASE_URL = '/v1/backups';
@@ -28,6 +28,7 @@ export const BackupInventoryService = {
vendor,
mode,
folder,
+ compression,
}): Backup => ({
id: artifact_id,
name,
@@ -41,6 +42,7 @@ export const BackupInventoryService = {
vendor,
mode,
folder,
+ compression,
})
);
},
@@ -122,4 +124,10 @@ export const BackupInventoryService = {
return result;
},
+ async listServiceCompressions(serviceId: string): Promise {
+ const { compression_methods = [] } = await api.get(
+ `${BASE_URL}/services/${serviceId}/compression`
+ );
+ return compression_methods;
+ },
};
diff --git a/public/app/percona/backup/components/BackupInventory/BackupInventory.tsx b/public/app/percona/backup/components/BackupInventory/BackupInventory.tsx
index 562a17cafd191..7c37035f0aa45 100644
--- a/public/app/percona/backup/components/BackupInventory/BackupInventory.tsx
+++ b/public/app/percona/backup/components/BackupInventory/BackupInventory.tsx
@@ -280,6 +280,7 @@ export const BackupInventory: FC = () => {
status={row.original.status}
dataModel={row.original.dataModel}
folder={row.original.folder}
+ compression={row.original.compression}
/>
),
[]
diff --git a/public/app/percona/backup/components/BackupInventory/BackupInventory.types.ts b/public/app/percona/backup/components/BackupInventory/BackupInventory.types.ts
index abe3ee75fb232..ee944d2aaed70 100644
--- a/public/app/percona/backup/components/BackupInventory/BackupInventory.types.ts
+++ b/public/app/percona/backup/components/BackupInventory/BackupInventory.types.ts
@@ -1,6 +1,6 @@
import { Databases } from 'app/percona/shared/core';
-import { DataModel, BackupStatus, BackupMode } from '../../Backup.types';
+import { DataModel, BackupStatus, BackupMode, Compression } from '../../Backup.types';
import { StorageLocation } from '../StorageLocations/StorageLocations.types';
export interface Backup {
@@ -17,6 +17,7 @@ export interface Backup {
mode: BackupMode;
folder: string;
type?: Databases | 'external';
+ compression: Compression;
}
export interface BackupRow extends Backup {
@@ -36,6 +37,7 @@ export interface RawBackup {
vendor: Databases;
mode: BackupMode;
folder: string;
+ compression: Compression;
}
export interface BackupResponse {
@@ -55,3 +57,7 @@ export interface Timeranges {
export interface TimerangesResponse {
timeranges: RawTimeranges[];
}
+
+export interface CompressionResponse {
+ compression_methods: Compression[];
+}
diff --git a/public/app/percona/backup/components/BackupInventory/BackupInventoryDetails/BackupInventoryDetails.messages.ts b/public/app/percona/backup/components/BackupInventory/BackupInventoryDetails/BackupInventoryDetails.messages.ts
index 0a40c7935e4a6..2576f17b67ada 100644
--- a/public/app/percona/backup/components/BackupInventory/BackupInventoryDetails/BackupInventoryDetails.messages.ts
+++ b/public/app/percona/backup/components/BackupInventory/BackupInventoryDetails/BackupInventoryDetails.messages.ts
@@ -3,4 +3,5 @@ export const Messages = {
testResuts: 'Test results',
dataModel: 'Data model',
folder: 'Folder',
+ compression: 'Compression',
};
diff --git a/public/app/percona/backup/components/BackupInventory/BackupInventoryDetails/BackupInventoryDetails.test.tsx b/public/app/percona/backup/components/BackupInventory/BackupInventoryDetails/BackupInventoryDetails.test.tsx
index 36e4549dc35f3..2531d560062ab 100644
--- a/public/app/percona/backup/components/BackupInventory/BackupInventoryDetails/BackupInventoryDetails.test.tsx
+++ b/public/app/percona/backup/components/BackupInventory/BackupInventoryDetails/BackupInventoryDetails.test.tsx
@@ -1,6 +1,6 @@
import { render, screen } from '@testing-library/react';
-import { DataModel, BackupStatus } from 'app/percona/backup/Backup.types';
+import { Compression, DataModel, BackupStatus } from 'app/percona/backup/Backup.types';
import { BackupInventoryDetails } from './BackupInventoryDetails';
@@ -12,10 +12,12 @@ describe('BackupInventoryDetails', () => {
status={BackupStatus.BACKUP_STATUS_PAUSED}
dataModel={DataModel.LOGICAL}
folder="folder1"
+ compression={Compression.NONE}
/>
);
expect(screen.getByTestId('backup-artifact-details-name')).toBeInTheDocument();
expect(screen.getByTestId('backup-artifact-details-data-model')).toBeInTheDocument();
expect(screen.getByTestId('backup-artifact-details-folder')).toBeInTheDocument();
+ expect(screen.getByTestId('backup-artifact-details-compression')).toBeInTheDocument();
});
});
diff --git a/public/app/percona/backup/components/BackupInventory/BackupInventoryDetails/BackupInventoryDetails.tsx b/public/app/percona/backup/components/BackupInventory/BackupInventoryDetails/BackupInventoryDetails.tsx
index a7cc6810f23e8..c3f9db24839b5 100644
--- a/public/app/percona/backup/components/BackupInventory/BackupInventoryDetails/BackupInventoryDetails.tsx
+++ b/public/app/percona/backup/components/BackupInventory/BackupInventoryDetails/BackupInventoryDetails.tsx
@@ -7,7 +7,7 @@ import { Messages } from './BackupInventoryDetails.messages';
import { getStyles } from './BackupInventoryDetails.styles';
import { BackupInventoryDetailsProps } from './BackupInventoryDetails.types';
-export const BackupInventoryDetails: FC = ({ name, folder, dataModel }) => {
+export const BackupInventoryDetails: FC = ({ name, folder, dataModel, compression }) => {
const styles = useStyles(getStyles);
const dataModelMsg = formatDataModel(dataModel);
@@ -24,6 +24,11 @@ export const BackupInventoryDetails: FC = ({ name,
{Messages.folder} {folder}
)}
+ {compression && (
+
+ {Messages.compression} {compression}
+
+ )}
);
};
diff --git a/public/app/percona/backup/components/BackupInventory/BackupInventoryDetails/BackupInventoryDetails.types.ts b/public/app/percona/backup/components/BackupInventory/BackupInventoryDetails/BackupInventoryDetails.types.ts
index 1e8f5b563ebc4..5d8a9f4503b2a 100644
--- a/public/app/percona/backup/components/BackupInventory/BackupInventoryDetails/BackupInventoryDetails.types.ts
+++ b/public/app/percona/backup/components/BackupInventory/BackupInventoryDetails/BackupInventoryDetails.types.ts
@@ -1,8 +1,9 @@
-import { BackupStatus, DataModel, RestoreStatus } from 'app/percona/backup/Backup.types';
+import { BackupStatus, Compression, DataModel, RestoreStatus } from 'app/percona/backup/Backup.types';
export interface BackupInventoryDetailsProps {
name: string;
status: BackupStatus | RestoreStatus;
dataModel: DataModel;
folder: string;
+ compression: Compression;
}
diff --git a/public/app/percona/backup/components/BackupInventory/RestoreBackupModal/RestoreBackupModal.test.tsx b/public/app/percona/backup/components/BackupInventory/RestoreBackupModal/RestoreBackupModal.test.tsx
index 42b812651f5b8..c472ea319a4d7 100644
--- a/public/app/percona/backup/components/BackupInventory/RestoreBackupModal/RestoreBackupModal.test.tsx
+++ b/public/app/percona/backup/components/BackupInventory/RestoreBackupModal/RestoreBackupModal.test.tsx
@@ -1,6 +1,6 @@
import { fireEvent, render, screen } from '@testing-library/react';
-import { BackupMode, BackupStatus, DataModel } from 'app/percona/backup/Backup.types';
+import { BackupMode, BackupStatus, DataModel, Compression } from 'app/percona/backup/Backup.types';
import { Databases } from 'app/percona/shared/core';
import { Backup } from '../BackupInventory.types';
@@ -21,6 +21,7 @@ describe('RestoreBackupModal', () => {
vendor: Databases.mongodb,
mode: BackupMode.SNAPSHOT,
folder: 'folder1',
+ compression: Compression.NONE,
};
it('should render', () => {
diff --git a/public/app/percona/backup/components/BackupInventory/__mocks__/BackupInventory.service.ts b/public/app/percona/backup/components/BackupInventory/__mocks__/BackupInventory.service.ts
index 1b2a954ffb9f4..1ca63836d94ba 100644
--- a/public/app/percona/backup/components/BackupInventory/__mocks__/BackupInventory.service.ts
+++ b/public/app/percona/backup/components/BackupInventory/__mocks__/BackupInventory.service.ts
@@ -1,4 +1,4 @@
-import { DataModel, BackupStatus, BackupMode } from 'app/percona/backup/Backup.types';
+import { DataModel, BackupStatus, BackupMode, Compression } from 'app/percona/backup/Backup.types';
import { Databases } from 'app/percona/shared/core';
import * as service from '../BackupInventory.service';
@@ -18,6 +18,7 @@ export const stubs: Backup[] = [
vendor: Databases.mysql,
mode: BackupMode.SNAPSHOT,
folder: 'folder1',
+ compression: Compression.NONE,
},
{
id: 'backup_2',
@@ -32,6 +33,7 @@ export const stubs: Backup[] = [
vendor: Databases.mysql,
mode: BackupMode.SNAPSHOT,
folder: 'folder1',
+ compression: Compression.NONE,
},
];
diff --git a/public/app/percona/backup/components/RestoreHistory/RestoreHistory.types.ts b/public/app/percona/backup/components/RestoreHistory/RestoreHistory.types.ts
index 9fbd123399f40..1ae6e361a8fff 100644
--- a/public/app/percona/backup/components/RestoreHistory/RestoreHistory.types.ts
+++ b/public/app/percona/backup/components/RestoreHistory/RestoreHistory.types.ts
@@ -13,7 +13,7 @@ export interface RestoreResponse {
items: RawRestore[];
}
-export interface Restore extends Omit {
+export interface Restore extends Omit {
id: string;
artifactId: string;
started: number;
diff --git a/public/app/percona/backup/components/ScheduledBackups/ScheduledBackups.service.ts b/public/app/percona/backup/components/ScheduledBackups/ScheduledBackups.service.ts
index 37c270f25781f..64e7e418314d0 100644
--- a/public/app/percona/backup/components/ScheduledBackups/ScheduledBackups.service.ts
+++ b/public/app/percona/backup/components/ScheduledBackups/ScheduledBackups.service.ts
@@ -34,6 +34,7 @@ export const ScheduledBackupsService = {
retention = 0,
mode,
folder,
+ compression,
}) => ({
id: scheduled_backup_id,
name,
@@ -53,6 +54,7 @@ export const ScheduledBackupsService = {
retryInterval: retry_interval,
enabled: !!enabled,
folder,
+ compression,
})
);
},
diff --git a/public/app/percona/backup/components/ScheduledBackups/ScheduledBackups.tsx b/public/app/percona/backup/components/ScheduledBackups/ScheduledBackups.tsx
index 78a6e40a797c9..5d661a822b53b 100644
--- a/public/app/percona/backup/components/ScheduledBackups/ScheduledBackups.tsx
+++ b/public/app/percona/backup/components/ScheduledBackups/ScheduledBackups.tsx
@@ -87,6 +87,7 @@ export const ScheduledBackups: FC = () => {
mode,
dataModel,
folder,
+ compression,
} = backup;
const newName = `${Messages.scheduledBackups.copyOf}${name}`;
setActionPending(true);
@@ -103,7 +104,8 @@ export const ScheduledBackups: FC = () => {
false,
mode,
dataModel,
- folder
+ folder,
+ compression
);
getData();
} catch (e) {
@@ -216,6 +218,7 @@ export const ScheduledBackups: FC = () => {
description={row.original.description}
cronExpression={row.original.cronExpression}
folder={row.original.folder}
+ compression={row.original.compression}
/>
),
[]
diff --git a/public/app/percona/backup/components/ScheduledBackups/ScheduledBackups.types.ts b/public/app/percona/backup/components/ScheduledBackups/ScheduledBackups.types.ts
index 035be76a5edb1..74a8e6c5bb992 100644
--- a/public/app/percona/backup/components/ScheduledBackups/ScheduledBackups.types.ts
+++ b/public/app/percona/backup/components/ScheduledBackups/ScheduledBackups.types.ts
@@ -1,6 +1,6 @@
import { Databases } from 'app/percona/shared/core';
-import { BackupMode, DataModel } from '../../Backup.types';
+import { BackupMode, Compression, DataModel } from '../../Backup.types';
export interface RawScheduledBackup {
scheduled_backup_id: string;
@@ -21,6 +21,7 @@ export interface RawScheduledBackup {
retention: number;
mode: BackupMode;
folder: string;
+ compression: Compression;
}
export interface ScheduledBackupResponse {
@@ -46,4 +47,5 @@ export interface ScheduledBackup {
mode: BackupMode;
enabled: boolean;
folder: string;
+ compression: Compression;
}
diff --git a/public/app/percona/backup/components/ScheduledBackups/ScheduledBackupsDetails/ScheduledBackupsDetails.messages.ts b/public/app/percona/backup/components/ScheduledBackups/ScheduledBackupsDetails/ScheduledBackupsDetails.messages.ts
index 2032ee15697ed..3a0b0b920a72d 100644
--- a/public/app/percona/backup/components/ScheduledBackups/ScheduledBackupsDetails/ScheduledBackupsDetails.messages.ts
+++ b/public/app/percona/backup/components/ScheduledBackups/ScheduledBackupsDetails/ScheduledBackupsDetails.messages.ts
@@ -4,4 +4,5 @@ export const Messages = {
dataModel: 'Data model',
cronExpression: 'Cron expression',
folder: 'Folder',
+ compression: 'Compression',
};
diff --git a/public/app/percona/backup/components/ScheduledBackups/ScheduledBackupsDetails/ScheduledBackupsDetails.test.tsx b/public/app/percona/backup/components/ScheduledBackups/ScheduledBackupsDetails/ScheduledBackupsDetails.test.tsx
index a30e632d7b8d4..c7905cb4817d6 100644
--- a/public/app/percona/backup/components/ScheduledBackups/ScheduledBackupsDetails/ScheduledBackupsDetails.test.tsx
+++ b/public/app/percona/backup/components/ScheduledBackups/ScheduledBackupsDetails/ScheduledBackupsDetails.test.tsx
@@ -1,6 +1,6 @@
import { render, screen } from '@testing-library/react';
-import { DataModel } from 'app/percona/backup/Backup.types';
+import { Compression, DataModel } from 'app/percona/backup/Backup.types';
import { ScheduledBackupDetails } from './ScheduledBackupsDetails';
@@ -13,6 +13,7 @@ describe('ScheduledBackupsDetails', () => {
dataModel={DataModel.PHYSICAL}
cronExpression=" * * * 1,3 0"
folder="folder1"
+ compression={Compression.NONE}
/>
);
expect(screen.getByTestId('scheduled-backup-details-wrapper')).toBeInTheDocument();
@@ -21,5 +22,6 @@ describe('ScheduledBackupsDetails', () => {
expect(screen.getByTestId('scheduled-backup-details-cron')).toBeInTheDocument();
expect(screen.getByTestId('scheduled-backup-details-data-model')).toBeInTheDocument();
expect(screen.getByTestId('scheduled-backup-details-folder')).toBeInTheDocument();
+ expect(screen.getByTestId('scheduled-backup-details-compression')).toBeInTheDocument();
});
});
diff --git a/public/app/percona/backup/components/ScheduledBackups/ScheduledBackupsDetails/ScheduledBackupsDetails.tsx b/public/app/percona/backup/components/ScheduledBackups/ScheduledBackupsDetails/ScheduledBackupsDetails.tsx
index 4af9cd9753081..b59d4cf06e541 100644
--- a/public/app/percona/backup/components/ScheduledBackups/ScheduledBackupsDetails/ScheduledBackupsDetails.tsx
+++ b/public/app/percona/backup/components/ScheduledBackups/ScheduledBackupsDetails/ScheduledBackupsDetails.tsx
@@ -15,6 +15,7 @@ export const ScheduledBackupDetails: FC = ({
dataModel,
cronExpression,
folder,
+ compression,
}) => {
const styles = useStyles(getStyles);
const dataModelMsg = formatDataModel(dataModel);
@@ -38,6 +39,11 @@ export const ScheduledBackupDetails: FC = ({
{Messages.folder} {folder}
)}
+ {compression && (
+
+ {Messages.compression} {compression}
+
+ )}
);
};
diff --git a/public/app/percona/backup/components/ScheduledBackups/ScheduledBackupsDetails/ScheduledBackupsDetails.types.ts b/public/app/percona/backup/components/ScheduledBackups/ScheduledBackupsDetails/ScheduledBackupsDetails.types.ts
index d92c5f53ffb96..d3f07ae35f784 100644
--- a/public/app/percona/backup/components/ScheduledBackups/ScheduledBackupsDetails/ScheduledBackupsDetails.types.ts
+++ b/public/app/percona/backup/components/ScheduledBackups/ScheduledBackupsDetails/ScheduledBackupsDetails.types.ts
@@ -1,4 +1,4 @@
-import { DataModel } from 'app/percona/backup/Backup.types';
+import { Compression, DataModel } from 'app/percona/backup/Backup.types';
export interface ScheduledBackupDetailsProps {
name: string;
@@ -6,4 +6,5 @@ export interface ScheduledBackupDetailsProps {
dataModel: DataModel;
cronExpression: string;
folder: string;
+ compression: Compression;
}
diff --git a/public/app/percona/backup/components/ScheduledBackups/__mocks__/ScheduledBackups.service.ts b/public/app/percona/backup/components/ScheduledBackups/__mocks__/ScheduledBackups.service.ts
index 29af28d3fd4d7..390d7101b4ac2 100644
--- a/public/app/percona/backup/components/ScheduledBackups/__mocks__/ScheduledBackups.service.ts
+++ b/public/app/percona/backup/components/ScheduledBackups/__mocks__/ScheduledBackups.service.ts
@@ -1,4 +1,4 @@
-import { BackupMode, DataModel } from 'app/percona/backup/Backup.types';
+import { BackupMode, DataModel, Compression } from 'app/percona/backup/Backup.types';
import { Databases } from 'app/percona/shared/core';
import * as service from '../ScheduledBackups.service';
@@ -24,6 +24,7 @@ export const stubs: ScheduledBackup[] = [
retryInterval: '10s',
retryTimes: 1,
folder: 'folder1',
+ compression: Compression.NONE,
},
{
id: 'backup_2',
@@ -44,6 +45,7 @@ export const stubs: ScheduledBackup[] = [
retryInterval: '0s',
retryTimes: 1,
folder: 'folder1',
+ compression: Compression.NONE,
},
];