Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat:db provider adapted to 0.8.1 #4508

Merged
merged 2 commits into from Jan 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 4 additions & 1 deletion frontend/providers/dbprovider/public/locales/en/common.json
Expand Up @@ -259,5 +259,8 @@
"Failed to turn off automatic backup": "Failed to turn off automatic backup",
"Automatic backup is turned off": "Automatic backup is turned off",
"Are you sure you want to turn off automatic backup": "Are you sure you want to turn off automatic backup?",
"db instances tip": "The number of {{db}} instances is recommended to be an odd number"
"db instances tip": "The number of {{db}} instances is recommended to be an odd number",
"Deleting": "Deleting",
"Backup Running": "Backup Running",
"Backup Deleting": "Backup Deleting"
}
5 changes: 4 additions & 1 deletion frontend/providers/dbprovider/public/locales/zh/common.json
Expand Up @@ -261,5 +261,8 @@
"Failed to turn off automatic backup": "关闭自动备份失败",
"Automatic backup is turned off": "已关闭自动备份",
"Are you sure you want to turn off automatic backup": "确定关闭自动备份吗",
"db instances tip": "{{db}} 实例数量建议为奇数"
"db instances tip": "{{db}} 实例数量建议为奇数",
"Deleting": "删除中",
"Backup Running": "备份中",
"Backup Deleting": "删除中"
}
16 changes: 14 additions & 2 deletions frontend/providers/dbprovider/src/constants/backup.ts
Expand Up @@ -3,8 +3,10 @@ import { BackupStatusMapType } from '@/types/db';
export enum BackupStatusEnum {
Completed = 'Completed',
InProgress = 'InProgress',
'Failed' = 'Failed',
'UnKnow' = 'UnKnow'
Failed = 'Failed',
UnKnow = 'UnKnow',
Running = 'Running',
Deleting = 'Deleting'
}

export const backupStatusMap: Record<`${BackupStatusEnum}`, BackupStatusMapType> = {
Expand All @@ -23,6 +25,16 @@ export const backupStatusMap: Record<`${BackupStatusEnum}`, BackupStatusMapType>
value: BackupStatusEnum.Failed,
color: '#FF5B6E'
},
[BackupStatusEnum.Running]: {
label: 'Backup Running',
value: BackupStatusEnum.Running,
color: '#13B2A9'
},
[BackupStatusEnum.Deleting]: {
label: 'Backup Deleting',
value: BackupStatusEnum.Deleting,
color: '#FF5B6E'
},
[BackupStatusEnum.UnKnow]: {
label: 'UnKnow',
value: BackupStatusEnum.UnKnow,
Expand Down
39 changes: 34 additions & 5 deletions frontend/providers/dbprovider/src/constants/db.ts
Expand Up @@ -4,6 +4,7 @@ import { CpuSlideMarkList, MemorySlideMarkList } from './editApp';
export const crLabelKey = 'sealos-db-provider-cr';
export const CloudMigraionLabel = 'sealos-db-provider-cr-migrate';
export const KBMigrationTaskLabel = 'datamigration.apecloud.io/migrationtask';
export const KBBackupNameLabel = 'dataprotection.kubeblocks.io/backup-name';
export const SealosMigrationTaskLabel = 'datamigration.sealos.io/file-migration-task';
export const MigrationRemark = 'migration-remark';

Expand All @@ -15,7 +16,8 @@ export enum DBTypeEnum {
kafka = 'kafka',
qdrant = 'qdrant',
nebula = 'nebula',
weaviate = 'weaviate'
weaviate = 'weaviate',
milvus = 'milvus'
}

export enum DBStatusEnum {
Expand All @@ -31,7 +33,8 @@ export enum DBStatusEnum {
VerticalScaling = 'VerticalScaling',
VolumeExpanding = 'VolumeExpanding',
Failed = 'Failed',
UnKnow = 'UnKnow'
UnKnow = 'UnKnow',
Deleting = 'Deleting'
}
export const dbStatusMap = {
[DBStatusEnum.Creating]: {
Expand Down Expand Up @@ -124,6 +127,13 @@ export const dbStatusMap = {
color: '#787A90',
backgroundColor: '#F5F5F8',
dotColor: '#787A90'
},
[DBStatusEnum.Deleting]: {
label: 'Deleting',
value: DBStatusEnum.Deleting,
color: '#DC6803',
backgroundColor: '#FFFAEB',
dotColor: '#DC6803'
}
};

Expand Down Expand Up @@ -160,7 +170,8 @@ export const DBTypeList = [
{ id: DBTypeEnum.mongodb, label: 'mongo' },
{ id: DBTypeEnum.mysql, label: 'mysql' },
{ id: DBTypeEnum.redis, label: 'redis' },
{ id: DBTypeEnum.kafka, label: 'kafka' }
{ id: DBTypeEnum.kafka, label: 'kafka' },
{ id: DBTypeEnum.milvus, label: 'milvus' }
// { id: DBTypeEnum.qdrant, label: 'qdrant' },
// { id: DBTypeEnum.nebula, label: 'nebula' },
// { id: DBTypeEnum.weaviate, label: 'weaviate' }
Expand All @@ -174,7 +185,8 @@ export const DBComponentNameMap = {
[DBTypeEnum.kafka]: 'kafka',
[DBTypeEnum.qdrant]: 'qdrant',
[DBTypeEnum.nebula]: 'nebula',
[DBTypeEnum.weaviate]: 'weaviate'
[DBTypeEnum.weaviate]: 'weaviate',
[DBTypeEnum.milvus]: 'milvus'
};

export const DBBackupPolicyNameMap = {
Expand All @@ -185,7 +197,21 @@ export const DBBackupPolicyNameMap = {
[DBTypeEnum.kafka]: 'kafka',
[DBTypeEnum.qdrant]: 'qdrant',
[DBTypeEnum.nebula]: 'nebula',
[DBTypeEnum.weaviate]: 'weaviate'
[DBTypeEnum.weaviate]: 'weaviate',
[DBTypeEnum.milvus]: 'milvus'
};

export const DBBackupMethodNameMap = {
[DBTypeEnum.postgresql]: 'pg-basebackup',
[DBTypeEnum.mongodb]: 'dump',
[DBTypeEnum.mysql]: 'xtrabackup',
[DBTypeEnum.redis]: 'datafile',
// not support
[DBTypeEnum.kafka]: 'kafka',
[DBTypeEnum.qdrant]: 'qdrant',
[DBTypeEnum.nebula]: 'nebula',
[DBTypeEnum.weaviate]: 'weaviate',
[DBTypeEnum.milvus]: 'milvus'
};

export const defaultDBEditValue: DBEditType = {
Expand Down Expand Up @@ -259,5 +285,8 @@ export const DBTypeSecretMap = {
},
weaviate: {
connectKey: 'weaviate'
},
milvus: {
connectKey: 'milvus'
}
};
22 changes: 13 additions & 9 deletions frontend/providers/dbprovider/src/pages/api/backup/create.ts
Expand Up @@ -4,7 +4,7 @@ import { authSession } from '@/services/backend/auth';
import { getK8s } from '@/services/backend/kubernetes';
import { jsonRes } from '@/services/backend/response';
import { json2ManualBackup } from '@/utils/json2Yaml';
import { DBBackupPolicyNameMap, DBTypeEnum } from '@/constants/db';
import { DBBackupMethodNameMap, DBBackupPolicyNameMap, DBTypeEnum } from '@/constants/db';

export type Props = {
backupName: string;
Expand Down Expand Up @@ -34,15 +34,16 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse<
});

// get backup backupolicies.dataprotection.kubeblocks.io
const { body } = (await k8sCustomObjects.getNamespacedCustomObject(
group,
version,
namespace,
plural,
`${dbName}-${DBBackupPolicyNameMap[dbType]}-backup-policy`
)) as { body: any };
// const { body } = (await k8sCustomObjects.getNamespacedCustomObject(
// group,
// version,
// namespace,
// plural,
// `${dbName}-${DBBackupPolicyNameMap[dbType]}-backup-policy`
// )) as { body: any };

const backupPolicyName = body?.metadata?.name;
const backupPolicyName = `${dbName}-${DBBackupPolicyNameMap[dbType]}-backup-policy`;
const backupMethod = DBBackupMethodNameMap[dbType];

if (!backupPolicyName) {
throw new Error('Cannot find backup policy');
Expand All @@ -51,9 +52,12 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse<
const backupCr = json2ManualBackup({
name: backupName,
backupPolicyName,
backupMethod,
remark
});

console.info(backupCr);

// create backup
await applyYamlList([backupCr], 'create');

Expand Down
Expand Up @@ -69,6 +69,10 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse<
[DBTypeEnum.weaviate]: {
...base,
connectKey: 'weaviate'
},
[DBTypeEnum.milvus]: {
...base,
connectKey: 'milvus'
}
};
// get secret
Expand Down
Expand Up @@ -41,6 +41,9 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse<
},
[DBTypeEnum.weaviate]: {
key: 'weaviate'
},
[DBTypeEnum.milvus]: {
key: 'milvus'
}
};

Expand Down
Expand Up @@ -25,7 +25,8 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse)
[DBTypeEnum.kafka]: [],
[DBTypeEnum.qdrant]: [],
[DBTypeEnum.nebula]: [],
[DBTypeEnum.weaviate]: []
[DBTypeEnum.weaviate]: [],
[DBTypeEnum.milvus]: []
};

// source price
Expand Down
Expand Up @@ -3,6 +3,7 @@ import { ApiResp } from '@/services/kubernet';
import { authSession } from '@/services/backend/auth';
import { getK8s } from '@/services/backend/kubernetes';
import { jsonRes } from '@/services/backend/response';
import { KBBackupNameLabel } from '@/constants/db';

// get App Metrics By DeployName. compute average value
export default async function handler(req: NextApiRequest, res: NextApiResponse<ApiResp>) {
Expand All @@ -26,7 +27,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse<
undefined,
undefined,
undefined,
`app.kubernetes.io/instance=${name}`
`app.kubernetes.io/instance=${name},!${KBBackupNameLabel}`
);

jsonRes(res, {
Expand Down
Expand Up @@ -151,7 +151,8 @@ const AppBaseInfo = ({ db = defaultDBDetail }: { db: DBDetailType }) => {
[DBTypeEnum.kafka]: ``,
[DBTypeEnum.qdrant]: ``,
[DBTypeEnum.nebula]: ``,
[DBTypeEnum.weaviate]: ``
[DBTypeEnum.weaviate]: ``,
[DBTypeEnum.milvus]: ``
};

const defaultCommand = commandMap[db.dbType];
Expand Down
Expand Up @@ -57,7 +57,7 @@ const BackupTable = ({ db }: { db?: DBDetailType }, ref: ForwardedRef<ComponentR
content: t('Confirm delete the backup')
});

const [restoreBackupName, setRestoreBackupName] = useState<string>();
const [backupInfo, setBackupInfo] = useState<BackupItemType>();

const {
isInitialLoading,
Expand Down Expand Up @@ -160,7 +160,7 @@ const BackupTable = ({ db }: { db?: DBDetailType }, ref: ForwardedRef<ComponentR
item.status.value !== BackupStatusEnum.InProgress ? (
<Flex>
<Tooltip label={t('Restore Backup')}>
<Flex {...operationIconBoxStyles} onClick={() => setRestoreBackupName(item.name)}>
<Flex {...operationIconBoxStyles} onClick={() => setBackupInfo(item)}>
<MyIcon name={'restore'} {...operationIconStyles} />
</Flex>
</Tooltip>
Expand Down Expand Up @@ -250,12 +250,8 @@ const BackupTable = ({ db }: { db?: DBDetailType }, ref: ForwardedRef<ComponentR
refetchPolicy={refetchPolicy}
/>
)}
{!!restoreBackupName && (
<RestoreModal
db={db}
backupName={restoreBackupName}
onClose={() => setRestoreBackupName(undefined)}
/>
{!!backupInfo?.name && (
<RestoreModal db={db} backupInfo={backupInfo} onClose={() => setBackupInfo(undefined)} />
)}
</Flex>
);
Expand Down
Expand Up @@ -20,19 +20,19 @@ import Tip from '@/components/Tip';
import { InfoOutlineIcon } from '@chakra-ui/icons';
import { useTranslation } from 'next-i18next';
import { useForm } from 'react-hook-form';
import { DBDetailType } from '@/types/db';
import { BackupItemType, DBDetailType } from '@/types/db';
import { json2CreateCluster, json2Account } from '@/utils/json2Yaml';
import { useRouter } from 'next/router';
import { applyYamlList } from '@/api/db';

const BackupModal = ({
db,
backupName,
backupInfo,
onClose,
onSuccess
}: {
db: DBDetailType;
backupName: string;
backupInfo: BackupItemType;
onClose: () => void;
onSuccess?: () => void;
}) => {
Expand All @@ -53,7 +53,7 @@ const BackupModal = ({
...db,
dbName: databaseName
};
const yamlList = [json2CreateCluster(dbData, backupName), json2Account(dbData)];
const yamlList = [json2CreateCluster(dbData, backupInfo), json2Account(dbData)];
return applyYamlList(yamlList, 'create');
},
onSuccess() {
Expand Down
6 changes: 0 additions & 6 deletions frontend/providers/dbprovider/src/pages/db/detail/index.tsx
Expand Up @@ -156,12 +156,6 @@ const AppDetail = ({
ml={3}
variant={'primary'}
onClick={() => {
if (dbDetail.dbType === DBTypeEnum.redis) {
return toast({
status: 'warning',
title: t('Redis does not support backup at this time')
});
}
BackupTableRef.current?.openBackup();
}}
>
Expand Down
1 change: 1 addition & 0 deletions frontend/providers/dbprovider/src/pages/dbs/index.tsx
Expand Up @@ -10,6 +10,7 @@ function Home() {
const { dbList, setDBList } = useDBStore();
const { Loading } = useLoading();
const [initialized, setInitialized] = useState(false);

const { refetch } = useQuery(['initDbData'], setDBList, {
refetchInterval: 3000,
onSettled() {
Expand Down
3 changes: 2 additions & 1 deletion frontend/providers/dbprovider/src/store/static.ts
Expand Up @@ -23,7 +23,8 @@ export let DBVersionMap: DBVersionMapType = {
[DBTypeEnum.kafka]: [{ id: 'kafka-3.3.2', label: 'kafka-3.3.2' }],
[DBTypeEnum.qdrant]: [{ id: 'qdrant-1.1.0', label: 'qdrant-1.1.0' }],
[DBTypeEnum.nebula]: [{ id: 'nebula-v3.5.0', label: 'nebula-v3.5.0' }],
[DBTypeEnum.weaviate]: [{ id: 'weaviate-1.18.0', label: 'weaviate-1.18.0' }]
[DBTypeEnum.weaviate]: [{ id: 'weaviate-1.18.0', label: 'weaviate-1.18.0' }],
[DBTypeEnum.milvus]: [{ id: 'milvus-2.2.4', label: 'milvus-2.2.4' }]
};

export const getUserPrice = async () => {
Expand Down
1 change: 1 addition & 0 deletions frontend/providers/dbprovider/src/types/db.d.ts
Expand Up @@ -114,4 +114,5 @@ export interface BackupItemType {
startTime: Date;
failureReason?: string;
type: `${BackupTypeEnum}`;
connectionPassword: string;
}
9 changes: 6 additions & 3 deletions frontend/providers/dbprovider/src/utils/adapt.ts
Expand Up @@ -29,8 +29,8 @@ export const adaptDBListItem = (db: KbPgClusterType): DBListItemType => {
? dbStatusMap[db?.status?.phase]
: dbStatusMap.UnKnow,
createTime: dayjs(db.metadata?.creationTimestamp).format('YYYY/MM/DD HH:mm'),
cpu: cpuFormatToM(db.spec?.componentSpecs?.[0]?.resources.limits.cpu),
memory: cpuFormatToM(db.spec?.componentSpecs?.[0]?.resources.limits.memory),
cpu: cpuFormatToM(db.spec?.componentSpecs?.[0]?.resources?.limits?.cpu),
memory: cpuFormatToM(db.spec?.componentSpecs?.[0]?.resources?.limits?.memory),
storage:
db.spec?.componentSpecs?.[0]?.volumeClaimTemplates?.[0]?.spec?.resources?.requests?.storage ||
'-',
Expand Down Expand Up @@ -149,6 +149,8 @@ export const adaptEvents = (events: CoreV1EventList): PodEvent[] => {

export const adaptBackup = (backup: BackupCRItemType): BackupItemType => {
const autoLabel = 'dataprotection.kubeblocks.io/autobackup';
const passwordLabel = 'dataprotection.kubeblocks.io/connection-password';

return {
id: backup.metadata.uid,
name: backup.metadata.name,
Expand All @@ -159,7 +161,8 @@ export const adaptBackup = (backup: BackupCRItemType): BackupItemType => {
startTime: backup.metadata.creationTimestamp,
type: autoLabel in backup.metadata.labels ? BackupTypeEnum.auto : BackupTypeEnum.manual,
remark: backup.metadata.labels[BACKUP_REMARK_LABEL_KEY] || '-',
failureReason: backup.status?.failureReason
failureReason: backup.status?.failureReason,
connectionPassword: backup.metadata?.annotations?.[passwordLabel]
};
};

Expand Down