Skip to content

Commit

Permalink
feat:db provider adapted to 0.8.1 (#4508)
Browse files Browse the repository at this point in the history
* feat:db upgraded to 0.8.1 & add milvus

Signed-off-by: jingyang <3161362058@qq.com>

* backup

---------

Signed-off-by: jingyang <3161362058@qq.com>
  • Loading branch information
zjy365 committed Jan 24, 2024
1 parent 9318fd5 commit aec7020
Show file tree
Hide file tree
Showing 19 changed files with 278 additions and 89 deletions.
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

0 comments on commit aec7020

Please sign in to comment.