import { observable, action } from 'mobx'; import { IHotTopics, IReassignTasks, ITopicMetadata, ITasksDetail, IReassign, IPartition, IResource, IAnomalyFlow, IMetaData, ILabelValue, IExecute } from 'types/base-type'; import { getHotTopics, getReassignTasks, getTaskTopicMetadata, getReassignTasksDetail, getReassignTasksStatus, getInsufficientPartition, getResourceManagement, getAnomalyFlow, getMetaData, getExecuteSubTask, getExecuteTask } from 'lib/api'; import Moment from 'moment'; interface IPartitionMap { [key: string]: ILabelValue[]; } class Expert { @observable public hotTopics: IHotTopics[] = []; @observable public reassignTasks: IReassignTasks[] = []; @observable public taskTopicMetadata: ITopicMetadata[] = []; @observable public partitionIdMap: IPartitionMap = {}; @observable public tasksDetail: ITasksDetail; @observable public tasksStatus: IReassign[]; @observable public partitionedData: IPartition[] = []; @observable public resourceData: IResource[] = []; @observable public anomalyFlowData: IAnomalyFlow[] = []; @observable public metaData: IMetaData[] = []; @observable public active: number = null; @action.bound public changePhysical(data: number) { this.active = data; } @action.bound public setHotTopics(data: IHotTopics[]) { this.hotTopics = data ? data.map((item, index) => { item.key = index; return item; }) : []; } @action.bound public setReassignTasks(data: IReassignTasks[]) { this.reassignTasks = data ? data.map((item, index) => { item.key = index; return item; }) : []; } @action.bound public setTaskTopicMetadata(data: ITopicMetadata[]) { this.taskTopicMetadata = data ? data.map((item, index) => { item.key = index; this.partitionIdMap[item.topicName] = item.partitionIdList.map(item => { return { label: item + '', value: item + '', }; }); return { ...item, label: item.topicName, value: item.topicName, }; }) : []; } @action.bound public setReassignTasksDetail(data: ITasksDetail) { this.tasksDetail = data; } @action.bound public setReassignTasksStatus(data: IReassign[]) { this.tasksStatus = data ? data.map((item, index) => { item.key = index; item.reassignList.map((ele, i) => { ele.key = i; }); return item; }) : []; } @action.bound public setInsufficientPartition(data: IPartition[]) { this.partitionedData = data ? data.map((item, index) => { item.key = index; return item; }) : []; } @action.bound public setResourceManagement(data: IResource[]) { this.resourceData = data ? data.map((item, index) => { item.key = index; return item; }) : []; } @action.bound public setAnomalyFlow(data: IAnomalyFlow[]) { this.anomalyFlowData = data ? data.map((item, index) => { item.key = index; return item; }) : []; } @action.bound public setMetaData(data: IMetaData[]) { data = data ? data : []; data.unshift({ clusterId: -1, clusterName: '所有物理集群', } as IMetaData); this.metaData = data; this.active = (this.metaData[0] || { clusterId: null }).clusterId; } public getHotTopics() { getHotTopics().then(this.setHotTopics); } public getReassignTasks() { getReassignTasks().then(this.setReassignTasks); } public getTaskTopicMetadata(clusterId: number) { return getTaskTopicMetadata(clusterId).then(this.setTaskTopicMetadata); } public getReassignTasksDetail(taskId: number) { getReassignTasksDetail(taskId).then(this.setReassignTasksDetail); } public getReassignTasksStatus(taskId: number) { getReassignTasksStatus(taskId).then(this.setReassignTasksStatus); } public getInsufficientPartition() { getInsufficientPartition().then(this.setInsufficientPartition); } public getResourceManagement() { getResourceManagement().then(this.setResourceManagement); } public getAnomalyFlow(timestamp: number) { getAnomalyFlow(timestamp).then(this.setAnomalyFlow); } public getMetaData(needDetail: boolean) { getMetaData(needDetail).then(this.setMetaData); } public getExecuteSubTask(params: IExecute, taskId: number) { return getExecuteSubTask(params).then(() => this.getReassignTasksDetail(taskId)); } public getExecuteTask(params: IExecute) { return getExecuteTask(params).then(() => this.getReassignTasks()); } } export const expert = new Expert();