1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/didiopensource-KnowStreaming

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
task.ts 8.3 КБ
Копировать Редактировать Исходные данные Просмотреть построчно История
孙超 Отправлено 4 лет назад 47b8fe5
import { wrapper } from 'store';
import { notification } from 'component/antd';
import { expert } from 'store/expert';
import { admin } from 'store/admin';
import { IMigration, IReassignTasks, IExecute } from 'types/base-type';
import { createMigrationTask } from 'lib/api';
import { transMBToB, transHourToMSecond, transMSecondToHour } from 'lib/utils';
import moment = require('moment');
import { timeFormat } from 'constants/strategy';
const updateFormModal = (topicName?: string) => {
const formMap = wrapper.xFormWrapper.formMap;
const formData = wrapper.xFormWrapper.formData;
if (topicName) {
formMap[2].options = expert.partitionIdMap[topicName]; // 3
formData.originalRetentionTime = transMSecondToHour(admin.topicsBasic.retentionTime);
} else {
formMap[1].options = expert.taskTopicMetadata;
formMap[4].options = admin.brokersMetadata; // 2
formMap[5].options = admin.brokersRegions;
}
// tslint:disable-next-line:no-unused-expression
wrapper.ref && wrapper.ref.updateFormMap$(formMap, wrapper.xFormWrapper.formData, !!topicName, ['partitionIdList']);
};
const updateInputModal = (status?: string) => {
const formMap = wrapper.xFormWrapper.formMap;
formMap[4].invisible = status === 'region';
formMap[5].invisible = status !== 'region';
formMap[4].rules = [{ required: status !== 'region' }];
formMap[5].rules = [{ required: status === 'region' }];
// tslint:disable-next-line:no-unused-expression
wrapper.ref && wrapper.ref.updateFormMap$(formMap, wrapper.xFormWrapper.formData);
};
let clusterId = 0 as number;
export const createMigrationTasks = () => {
const xFormModal = {
type: 'drawer',
width: 700,
formMap: [
{
key: 'clusterId',
label: '集群名称',
type: 'select',
options: expert.metaData ? expert.metaData.slice(1).map(item => {
return {
label: item.clusterName,
value: item.clusterId,
};
}) : [],
rules: [{
required: true,
}],
attrs: {
async onChange(value: number) {
clusterId = value;
await admin.getBrokersMetadata(value);
await admin.getBrokersRegions(value);
await expert.getTaskTopicMetadata(value);
updateFormModal();
},
},
},
{
key: 'topicName',
label: 'Topic名称',
type: 'select',
options: (expert.taskTopicMetadata),
rules: [{
required: true,
}],
attrs: {
showSearch: true,
optionFilterProp: 'children',
async onChange(value: string) {
await admin.getTopicsBasicInfo(clusterId, value);
updateFormModal(value);
},
},
},
{
key: 'partitionIdList',
label: '分区ID',
type: 'select',
defaultValue: [] as any,
rules: [{
required: false,
}],
attrs: {
mode: 'tags',
placeholder: '请选择PartitionIdList',
},
},
{
key: 'species',
label: '类型',
type: 'radio_group',
defaultValue: 'broker',
options: [{
label: 'Region',
value: 'region',
}, {
label: 'Broker',
value: 'broker',
}],
rules: [{
required: false,
message: '请选择类型',
}],
attrs: {
onChange(item: any) {
updateInputModal(item.target.value);
},
},
},
{
key: 'brokerIdList',
label: 'Broker',
type: 'select',
defaultValue: [] as any,
invisible: false,
options: admin.brokersMetadata,
rules: [{ required: true, message: '请选择目标Broker,Broker数量需大于等于副本数量' }],
attrs: {
mode: 'multiple',
placeholder: '请选择目标Broker,Broker数量需大于等于副本数量',
},
},
{
key: 'regionId',
label: 'Region',
type: 'select',
defaultValue: [] as any,
invisible: true,
options: admin.brokersRegions,
rules: [{ required: false, message: '请选择目标Region' }],
attrs: {
placeholder: '请选择目标Region',
},
},
{
key: 'beginTime',
label: '计划开始时间',
type: 'date_picker',
rules: [{
required: true,
message: '请输入计划开始时间',
}],
attrs: {
placeholder: '请输入计划开始时间',
format: timeFormat,
showTime: true,
},
},
{
key: 'originalRetentionTime',
label: '原Topic保存时间',
rules: [{
required: true,
message: '请输入原Topic保存时间',
}],
attrs: {
disabled: true,
placeholder: '请输入原Topic保存时间',
suffix: '小时',
},
},
{
key: 'reassignRetentionTime',
label: '迁移后Topic保存时间',
rules: [{
required: true,
message: '请输入迁移后Topic保存时间',
}],
attrs: {
placeholder: '请输入迁移后Topic保存时间',
suffix: '小时',
},
},
{
key: 'throttle',
label: '初始限流',
rules: [{
required: true,
message: '请输入初始限流,并按照:“限流上限>初始限流>限流下限”的大小顺序',
}],
attrs: {
placeholder: '请输入初始限流,并按照:“限流上限>初始限流>限流下限”的大小顺序',
suffix: 'MB/s',
},
},
{
key: 'maxThrottle',
label: '限流上限',
rules: [{
required: true,
message: '请输入限流上限,并按照:“限流上限>初始限流>限流下限”的大小顺序',
}],
attrs: {
placeholder: '请输入限流上限,并按照:“限流上限>初始限流>限流下限”的大小顺序',
suffix: 'MB/s',
},
},
{
key: 'minThrottle',
label: '限流下限',
rules: [{
required: true,
message: '请输入限流下限,并按照:“限流上限>初始限流>限流下限”的大小顺序',
}],
attrs: {
placeholder: '请输入限流下限,并按照:“限流上限>初始限流>限流下限”的大小顺序',
suffix: 'MB/s',
},
},
{
key: 'description',
label: '备注',
type: 'text_area',
rules: [{
required: false,
message: '请输入至少5个字符',
pattern: /^.{4,}.$/,
}],
attrs: {
placeholder: '请输入备注',
},
},
],
formData: {},
visible: true,
title: '新建迁移任务',
onSubmit: (value: any) => {
const params = {
clusterId: value.clusterId,
beginTime: +moment(value.beginTime).format('x'),
originalRetentionTime: transHourToMSecond(value.originalRetentionTime),
reassignRetentionTime: transHourToMSecond(value.reassignRetentionTime),
throttle: transMBToB(value.throttle),
maxThrottle: transMBToB(value.maxThrottle),
minThrottle: transMBToB(value.minThrottle),
description: value.description,
brokerIdList: value.brokerIdList,
regionId: value.regionId,
partitionIdList: value.partitionIdList,
topicName: value.topicName,
} as IMigration;
if (value.regionId) {
delete params.brokerIdList;
} else {
delete params.regionId;
}
createMigrationTask([params]).then(data => {
notification.success({ message: '新建迁移任务成功' });
expert.getReassignTasks();
});
},
};
wrapper.open(xFormModal);
};
export const cancelMigrationTask = (item: IReassignTasks, action: string) => {
const params = {
action,
taskId: item.taskId,
beginTime: +moment(item.beginTime).format('x'),
throttle: Number(item.throttle),
maxThrottle: Number(item.maxThrottle),
minThrottle: Number(item.minThrottle),
} as IExecute;
expert.getExecuteTask(params).then(data => {
notification.success({ message: '操作成功' });
});
};

Комментарий ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://gitlife.ru/oschina-mirror/didiopensource-KnowStreaming.git
git@gitlife.ru:oschina-mirror/didiopensource-KnowStreaming.git
oschina-mirror
didiopensource-KnowStreaming
didiopensource-KnowStreaming
v2.5.0