Skip to content

Commit

Permalink
Merge branch 'main' into v3
Browse files Browse the repository at this point in the history
  • Loading branch information
YashSartanpara1 committed Jan 23, 2024
1 parent 9389120 commit 6653256
Show file tree
Hide file tree
Showing 70 changed files with 2,754 additions and 134 deletions.
496 changes: 492 additions & 4 deletions .betterer.results

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions packages/grafana-data/src/types/icon.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ export const availableIconsIndex = {
'google-hangouts-alt': true,
pagerduty: true,
line: true,
brain: true,
anchor: true,
'adjust-circle': true,
'angle-double-down': true,
Expand Down
7 changes: 7 additions & 0 deletions public/app/core/components/Footer/Footer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,13 @@ export interface FooterLink {
export let getFooterLinks = (): FooterLink[] => {
// @PERCONA
return [
{
id: 'pmm-dump',
text: 'PMM Dump',
icon: 'brain',
url: '/graph/pmm-dump',
target: '_self',
},
{
id: 'pmm-logs',
text: 'PMM Logs',
Expand Down
1 change: 1 addition & 0 deletions public/app/core/icons/cached.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
"unicons/book",
"unicons/book-open",
"unicons/brackets-curly",
"unicons/brain",
"unicons/bug",
"unicons/building",
"unicons/calculator-alt",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ export interface PostgreSQLPayload extends RemoteCommonPayload, TLSCommon {
tls_key: string;
agent_password: string;
max_query_length: number;
auto_discovery_limit: number;
}

export interface MySQLPayload extends RemoteCommonPayload, TLSCommon {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Messages } from './AdditionalOptions.messages';
import { TablestatOptionsInterface } from './AdditionalOptions.types';
import { AutoDiscoveryOptionsInterface, TablestatOptionsInterface } from './AdditionalOptions.types';

export const tablestatOptions = [
{
Expand All @@ -15,3 +15,18 @@ export const tablestatOptions = [
label: Messages.form.tablestatOptions.custom,
},
];

export const autoDiscoveryOptions = [
{
value: AutoDiscoveryOptionsInterface.enabled,
label: Messages.form.autoDiscoveryOptions.enabled,
},
{
value: AutoDiscoveryOptionsInterface.disabled,
label: Messages.form.autoDiscoveryOptions.disabled,
},
{
value: AutoDiscoveryOptionsInterface.custom,
label: Messages.form.autoDiscoveryOptions.custom,
},
];
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,10 @@ export const Messages = {
default: 'Default',
custom: 'Custom',
},
autoDiscoveryOptions: {
enabled: 'Enabled',
disabled: 'Disabled',
custom: 'Custom',
},
},
};
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ import { Messages } from '../FormParts.messages';
import { getStyles } from '../FormParts.styles';
import { AdditionalOptionsFormPartProps, PostgreSQLAdditionalOptionsProps } from '../FormParts.types';

import { tablestatOptions } from './AdditionalOptions.constants';
import { TablestatOptionsInterface } from './AdditionalOptions.types';
import { autoDiscoveryOptions, tablestatOptions } from './AdditionalOptions.constants';
import { AutoDiscoveryOptionsInterface, TablestatOptionsInterface } from './AdditionalOptions.types';
import { MongodbTLSCertificate } from './MongodbTLSCertificate';
import { MysqlTLSCertificate } from './MysqlTLSCertificate';
import { PostgreTLSCertificate } from './PostgreTLSCertificate';
Expand All @@ -41,16 +41,55 @@ export const AdditionalOptionsFormPart: FC<AdditionalOptionsFormPartProps> = ({
);
};

export const PostgreSQLAdditionalOptions: FC<PostgreSQLAdditionalOptionsProps> = ({ isRDS, isAzure }) => (
<>
<h4>{Messages.form.labels.trackingOptions}</h4>
<RadioButtonGroupField
name="tracking"
data-testid="tracking-options-radio-button-group"
options={isRDS || isAzure ? rdsTrackingOptions : trackingOptions}
/>
</>
);
export const PostgreSQLAdditionalOptions: FC<PostgreSQLAdditionalOptionsProps> = ({ form, isRDS, isAzure }) => {
const selectedOption = form.getState()?.values?.autoDiscoveryOptions;
const [selectedValue, setSelectedValue] = useState<string>(selectedOption || AutoDiscoveryOptionsInterface.enabled);
const styles = useStyles2(getStyles);
const validators = [platformCoreValidators.containsNumber, ...platformCoreValidators.int32];

const getAutoDiscoveryLimitValue = (type: AutoDiscoveryOptionsInterface) =>
type === AutoDiscoveryOptionsInterface.disabled ? -1 : 10;

useEffect(() => {
setSelectedValue(selectedOption);
form.change('autoDiscoveryLimit', getAutoDiscoveryLimitValue(selectedOption));
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [selectedOption]);

return (
<>
<h4>{Messages.form.labels.trackingOptions}</h4>
<RadioButtonGroupField
name="tracking"
data-testid="tracking-options-radio-button-group"
options={isRDS || isAzure ? rdsTrackingOptions : trackingOptions}
className={styles.radioField}
fullWidth
/>
<h4>{Messages.form.labels.postgresqlDetails.autoDiscovery}</h4>
<div className={styles.group}>
<RadioButtonGroupField
name="autoDiscoveryOptions"
data-testid="auto-discovery-options-radio-button-group"
defaultValue={selectedValue}
options={autoDiscoveryOptions}
className={styles.radioField}
label={Messages.form.labels.postgresqlDetails.autoDiscoveryLimitOptions}
fullWidth
/>
<NumberInputField
key="autoDiscoveryLimit"
name="autoDiscoveryLimit"
defaultValue={0}
disabled={selectedValue !== AutoDiscoveryOptionsInterface.custom}
validators={validators}
label={Messages.form.labels.postgresqlDetails.autoDiscoveryLimit}
tooltipText={Messages.form.tooltips.postgresqlDetails.autoDiscoveryLimit}
/>
</div>
</>
);
};

const getTablestatValues = (type: TablestatOptionsInterface) => {
switch (type) {
Expand All @@ -69,7 +108,8 @@ const MySQLOptions = ({ form }: { form: FormApi }) => {
useEffect(() => {
setSelectedValue(selectedOption);
form.change('tablestats_group_table_limit', getTablestatValues(selectedOption));
}, [selectedOption, form]);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [selectedOption]);

return (
<>
Expand Down Expand Up @@ -115,6 +155,7 @@ export const getAdditionalOptions = (
/>
</>
<PostgreSQLAdditionalOptions
form={form}
isRDS={remoteInstanceCredentials.isRDS}
isAzure={remoteInstanceCredentials.isAzure}
/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,9 @@ export enum TablestatOptionsInterface {
default = 'default',
custom = 'custom',
}

export enum AutoDiscoveryOptionsInterface {
enabled = 'enabled',
disabled = 'disabled',
custom = 'custom',
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ export const Messages = {
postgresqlDetails: {
database: 'Database',
maxQueryLength: 'Max query length',
autoDiscovery: 'Auto-discovery',
autoDiscoveryLimit: 'Auto-discovery limit',
autoDiscoveryLimitOptions: 'State',
},
mysqlDetails: {
maxQueryLength: 'Max query length',
Expand Down Expand Up @@ -87,6 +90,7 @@ export const Messages = {
postgresqlDetails: {
database: 'Database (default: postgres)',
maxQueryLength: 'Max query length',
autoDiscoveryLimit: 'Auto-discovery limit',
},
mysqlDetails: {
maxQueryLength: 'Max query length',
Expand Down Expand Up @@ -126,6 +130,7 @@ export const Messages = {
postgresqlDetails: {
database: 'Database name',
maxQueryLength: 'Full Example (Fingerprint) storage is not allowed by default to have the best performance',
autoDiscoveryLimit: 'Turn off auto-discovery when the total count of databases exceeds the limit.',
},
mysqlDetails: {
maxQueryLength: 'Full Example (Fingerprint) storage is not allowed by default to have the best performance',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ describe('getAdditionalOptions ::', () => {
const fields = container.querySelectorAll('input');
const trakingFields = screen.getAllByTestId('tracking-radio-button');
expect(trakingFields.length).toBe(trackingOptions.length);
expect(fields.length).toBe(7);
expect(fields.length).toBe(12);
});
it('should render correct for RDS PostgreSQL', async () => {
const type = Databases.postgresql;
Expand All @@ -198,6 +198,6 @@ describe('getAdditionalOptions ::', () => {
const fields = container.querySelectorAll('input');
const trakingFields = screen.getAllByTestId('tracking-radio-button');
expect(trakingFields.length).toBe(rdsTrackingOptions.length);
expect(fields.length).toBe(8);
expect(fields.length).toBe(13);
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ export interface AdditionalOptionsFormPartProps {
export interface PostgreSQLAdditionalOptionsProps {
isRDS?: boolean;
isAzure?: boolean;
form: FormApi;
}

export enum Schema {
Expand Down
15 changes: 14 additions & 1 deletion public/app/percona/backup/Backup.messages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,20 @@ export const Messages = {
created: 'Created',
location: 'Location',
vendor: 'DB Technology',
status: 'Status',
status: {
name: 'Status',
options: {
success: 'Success',
error: 'Error',
pending: 'Pending',
paused: 'Paused',
invalid: 'Invalid',
inProgress: 'In Progress',
failedToDelete: 'Failed To Delete',
failedNotSupportedByAgent: 'Failed Not Supported By Agent',
deleting: 'Deleting',
},
},
actions: 'Actions',
type: 'Type',
},
Expand Down
16 changes: 8 additions & 8 deletions public/app/percona/backup/Backup.utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,15 +34,15 @@ export const formatDataModel = (model: DataModel): string => {
return map[model] ?? '';
};

export const formatBackupMode = (mode: BackupMode): string => {
const map: Record<BackupMode, string> = {
[BackupMode.SNAPSHOT]: backupModeMsg.full,
[BackupMode.INCREMENTAL]: backupModeMsg.incremental,
[BackupMode.PITR]: backupModeMsg.pitr,
[BackupMode.INVALID]: backupModeMsg.invalid,
};
export const BackupModeMap: Record<BackupMode, string> = {
[BackupMode.SNAPSHOT]: backupModeMsg.full,
[BackupMode.INCREMENTAL]: backupModeMsg.incremental,
[BackupMode.PITR]: backupModeMsg.pitr,
[BackupMode.INVALID]: backupModeMsg.invalid,
};

return map[mode] || map[BackupMode.INVALID];
export const formatBackupMode = (mode: BackupMode): string => {
return BackupModeMap[mode] || BackupModeMap[BackupMode.INVALID];
};

export const formatLocationsToMap = (locations: StorageLocation[]) =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ export const AddBackupPageService = {
if (supportedServices.includes(serviceName)) {
result.push(
...newServices
.filter((service) => service.name.toLowerCase().includes(query))
.filter((service) => service.name.toLowerCase().includes(query.toLowerCase()))
.map(
({ id, name, cluster }): SelectableValue<SelectableService> => ({
label: name,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,12 @@ import { BackupInventory } from './BackupInventory';
jest.mock('./BackupInventory.service');
jest.mock('app/percona/backup/components/StorageLocations/StorageLocations.service');
jest.mock('../../hooks/recurringCall.hook');
jest.mock('react-router-dom', () => ({
...jest.requireActual('react-router-dom'),
useLocation: () => ({
pathname: '/',
}),
}));

describe('BackupInventory', () => {
it('should send correct data to Table', async () => {
Expand Down
Loading

0 comments on commit 6653256

Please sign in to comment.