blob: 3c22dbacfafce07369e1263d62fb99a7d547056e [file] [log] [blame]
import React from 'react';
import deepEqual from 'deep-equal';
import Breadcrumb from 'components/Breadcrumb';
import InstanceHistory from 'components/InstanceHistory';
import Loading from 'components/Loading';
import TaskStatus from 'components/TaskStatus';
import { isNully } from 'utils/Common';
import { isActive } from 'utils/Task';
export default class Instance extends React.Component {
getInitialState() {
return {cluster: '', tasks: [], loading: true};
}
constructor(props) {
super(props);
this.state = this.getInitialState();
}
fetchTask(role, environment, name, instance) {
const query = new TaskQuery();
query.role = role;
query.environment = environment;
query.jobName = name;
query.instanceIds = [instance];
const that = this;
this.props.api.getTasksWithoutConfigs(query, (rsp) => {
that.setState({
cluster: rsp.serverInfo.clusterName,
loading: false,
tasks: rsp.result.scheduleStatusResult.tasks
});
});
}
componentWillMount(props) {
const { role, environment, name, instance } = this.props.match.params;
this.fetchTask(role, environment, name, instance);
}
componentWillUpdate(nextProps, nextState) {
if (this.state.loading && !nextState.loading) {
const activeTask = nextState.tasks.find(isActive);
if (!isNully(activeTask)) {
const query = new TaskQuery();
query.statuses = [ScheduleStatus.RUNNING];
query.slaveHosts = [activeTask.assignedTask.slaveHost];
const that = this;
this.props.api.getTasksWithoutConfigs(query, (rsp) => {
const tasksOnAgent = rsp.result.scheduleStatusResult.tasks;
that.setState({
neighborTasks: tasksOnAgent.filter(function (el) {
return el.assignedTask.taskId !== activeTask.assignedTask.taskId;
})
});
});
}
}
if (!deepEqual(this.props.match.params, nextProps.match.params)) {
const { role, environment, name, instance } = nextProps.match.params;
this.setState(this.getInitialState());
this.fetchTask(role, environment, name, instance);
}
}
render() {
const { role, environment, name, instance } = this.props.match.params;
if (this.state.loading) {
return <Loading />;
}
const activeTask = this.state.tasks.find(isActive);
const terminalTasks = this.state.tasks.filter((t) => !isActive(t));
return (<div className='instance-page'>
<Breadcrumb
cluster={this.state.cluster}
env={environment}
instance={instance}
name={name}
role={role} />
<TaskStatus neighbors={this.state.neighborTasks} task={activeTask} />
<InstanceHistory tasks={terminalTasks} />
</div>);
}
}