You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aurora.apache.org by dm...@apache.org on 2017/11/08 00:25:40 UTC
aurora git commit: Display pending task reasons in TaskList
Repository: aurora
Updated Branches:
refs/heads/master 53fda6092 -> b4825a37c
Display pending task reasons in TaskList
Reviewed at https://reviews.apache.org/r/63650/
Project: http://git-wip-us.apache.org/repos/asf/aurora/repo
Commit: http://git-wip-us.apache.org/repos/asf/aurora/commit/b4825a37
Tree: http://git-wip-us.apache.org/repos/asf/aurora/tree/b4825a37
Diff: http://git-wip-us.apache.org/repos/asf/aurora/diff/b4825a37
Branch: refs/heads/master
Commit: b4825a37c1391a4566b91fe00ff88431b6e715f2
Parents: 53fda60
Author: David McLaughlin <da...@dmclaughlin.com>
Authored: Tue Nov 7 16:22:08 2017 -0800
Committer: David McLaughlin <da...@dmclaughlin.com>
Committed: Tue Nov 7 16:22:08 2017 -0800
----------------------------------------------------------------------
ui/src/main/js/components/JobHistory.js | 6 ++-
ui/src/main/js/components/JobStatus.js | 12 ++++-
ui/src/main/js/components/TaskList.js | 9 +++-
.../js/components/__tests__/TaskList-test.js | 46 +++++++++++++++++++-
ui/src/main/js/pages/Job.js | 15 +++++--
ui/src/main/js/test-utils/TaskBuilders.js | 1 +
6 files changed, 78 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/aurora/blob/b4825a37/ui/src/main/js/components/JobHistory.js
----------------------------------------------------------------------
diff --git a/ui/src/main/js/components/JobHistory.js b/ui/src/main/js/components/JobHistory.js
index 7eff462..dabcbf9 100644
--- a/ui/src/main/js/components/JobHistory.js
+++ b/ui/src/main/js/components/JobHistory.js
@@ -7,9 +7,11 @@ import TaskList from 'components/TaskList';
import { sort } from 'utils/Common';
import { getLastEventTime, isActive } from 'utils/Task';
-export default function ({ tasks }) {
+export default function ({ pendingReasons, tasks }) {
const terminalTasks = sort(tasks.filter((t) => !isActive(t)), (t) => getLastEventTime(t), true);
return (<Tab id='history' name={`Completed Tasks (${terminalTasks.length})`}>
- <PanelGroup><TaskList sortBy='latest' tasks={terminalTasks} /></PanelGroup>
+ <PanelGroup>
+ <TaskList pendingReasons={pendingReasons} sortBy='latest' tasks={terminalTasks} />
+ </PanelGroup>
</Tab>);
}
http://git-wip-us.apache.org/repos/asf/aurora/blob/b4825a37/ui/src/main/js/components/JobStatus.js
----------------------------------------------------------------------
diff --git a/ui/src/main/js/components/JobStatus.js b/ui/src/main/js/components/JobStatus.js
index 8f7023b..14f3538 100644
--- a/ui/src/main/js/components/JobStatus.js
+++ b/ui/src/main/js/components/JobStatus.js
@@ -8,7 +8,13 @@ import TaskList from 'components/TaskList';
import { isNully, sort } from 'utils/Common';
import { isActive } from 'utils/Task';
-export default function ({ configGroups, cronJob, onTaskViewChange, queryParams, tasks }) {
+export default function ({
+ configGroups,
+ cronJob,
+ onTaskViewChange,
+ pendingReasons,
+ queryParams,
+ tasks }) {
const activeTasks = sort(tasks.filter(isActive), (t) => t.assignedTask.instanceId);
const numberConfigs = isNully(cronJob) ? (isNully(configGroups) ? '' : configGroups.length) : 1;
return (<Tab id='status' name={`Active Tasks (${activeTasks.length})`}>
@@ -17,7 +23,9 @@ export default function ({ configGroups, cronJob, onTaskViewChange, queryParams,
activeTab={queryParams.taskView}
className='task-status-tabs'
onChange={onTaskViewChange}>
- <Tab icon='th-list' id='tasks' name='Tasks'><TaskList tasks={activeTasks} /></Tab>
+ <Tab icon='th-list' id='tasks' name='Tasks'>
+ <TaskList pendingReasons={pendingReasons} tasks={activeTasks} />
+ </Tab>
<Tab icon='info-sign' id='config' name={`Configuration (${numberConfigs})`}>
<JobConfig cronJob={cronJob} groups={configGroups} />
</Tab>
http://git-wip-us.apache.org/repos/asf/aurora/blob/b4825a37/ui/src/main/js/components/TaskList.js
----------------------------------------------------------------------
diff --git a/ui/src/main/js/components/TaskList.js b/ui/src/main/js/components/TaskList.js
index c0815cf..4513715 100644
--- a/ui/src/main/js/components/TaskList.js
+++ b/ui/src/main/js/components/TaskList.js
@@ -4,7 +4,7 @@ import Icon from 'components/Icon';
import Pagination from 'components/Pagination';
import TaskListItem from 'components/TaskListItem';
-import { pluralize } from 'utils/Common';
+import { isNully, pluralize } from 'utils/Common';
import { getClassForScheduleStatus, getLastEventTime } from 'utils/Task';
import { SCHEDULE_STATUS } from 'utils/Thrift';
@@ -104,6 +104,13 @@ export default class TaskList extends React.Component {
? (t) => getLastEventTime(t) * -1
: (t) => t.assignedTask.instanceId;
+ const reasons = isNully(this.props.pendingReasons) ? {} : this.props.pendingReasons;
+ this.props.tasks.forEach((t) => {
+ if (t.status === ScheduleStatus.PENDING && reasons[t.assignedTask.taskId]) {
+ t.taskEvents[t.taskEvents.length - 1].message = reasons[t.assignedTask.taskId];
+ }
+ });
+
return (<div>
<TaskListFilter
numberPerPage={tasksPerPage}
http://git-wip-us.apache.org/repos/asf/aurora/blob/b4825a37/ui/src/main/js/components/__tests__/TaskList-test.js
----------------------------------------------------------------------
diff --git a/ui/src/main/js/components/__tests__/TaskList-test.js b/ui/src/main/js/components/__tests__/TaskList-test.js
index 948e86b..946428b 100644
--- a/ui/src/main/js/components/__tests__/TaskList-test.js
+++ b/ui/src/main/js/components/__tests__/TaskList-test.js
@@ -1,14 +1,56 @@
import React from 'react';
import { shallow } from 'enzyme';
-import {
+import TaskList, {
TaskListControls,
TaskListStatusFilter,
TaskListStatus,
searchTask
} from '../TaskList';
-import { AssignedTaskBuilder, ScheduledTaskBuilder } from 'test-utils/TaskBuilders';
+import {
+ AssignedTaskBuilder,
+ ScheduledTaskBuilder,
+ TaskEventBuilder
+} from 'test-utils/TaskBuilders';
+
+describe('TaskList', () => {
+ it('Should set pending reasons on PENDING tasks', () => {
+ const tasks = [
+ ScheduledTaskBuilder.status(ScheduleStatus.PENDING)
+ .taskEvents([TaskEventBuilder.build()])
+ .assignedTask(AssignedTaskBuilder.taskId('one').build())
+ .build(),
+ ScheduledTaskBuilder.status(ScheduleStatus.RUNNING)
+ .taskEvents([TaskEventBuilder.message('running').build()])
+ .assignedTask(AssignedTaskBuilder.taskId('two').build())
+ .build()
+ ];
+ const reasons = {
+ [tasks[0].assignedTask.taskId]: 'Test Reason',
+ [tasks[1].assignedTask.taskId]: 'I should never be used'
+ };
+ shallow(<TaskList pendingReasons={reasons} tasks={tasks} />);
+ expect(tasks[0].taskEvents[0].message).toBe('Test Reason');
+ expect(tasks[1].taskEvents[0].message).toBe('running');
+ });
+
+ it('Should handle null pendingReasons', () => {
+ const tasks = [
+ ScheduledTaskBuilder.status(ScheduleStatus.PENDING)
+ .taskEvents([TaskEventBuilder.build()])
+ .assignedTask(AssignedTaskBuilder.taskId('one').build())
+ .build(),
+ ScheduledTaskBuilder.status(ScheduleStatus.RUNNING)
+ .taskEvents([TaskEventBuilder.message('running').build()])
+ .assignedTask(AssignedTaskBuilder.taskId('two').build())
+ .build()
+ ];
+ const el = shallow(<TaskList pendingReasons={null} tasks={tasks} />);
+ // basic check for successful rendering
+ expect(el.find(TaskListControls).length).toBe(1);
+ });
+});
describe('TaskListControls', () => {
it('Should attach active to default list element', () => {
http://git-wip-us.apache.org/repos/asf/aurora/blob/b4825a37/ui/src/main/js/pages/Job.js
----------------------------------------------------------------------
diff --git a/ui/src/main/js/pages/Job.js b/ui/src/main/js/pages/Job.js
index 2f96e23..4af4f31 100644
--- a/ui/src/main/js/pages/Job.js
+++ b/ui/src/main/js/pages/Job.js
@@ -39,10 +39,16 @@ export default class Job extends React.Component {
});
});
api.getPendingReason(taskQuery, (response) => {
- that.setState({
- cluster: response.serverInfo.clusterName,
- pendingReasons: response.result.getPendingReasonResult.reasons
- });
+ if (response.result.getPendingReasonResult.reasons) {
+ const reasons = response.result.getPendingReasonResult.reasons.reduce((res, reason) => {
+ res[reason.taskId] = reason.reason;
+ return res;
+ }, {});
+ that.setState({
+ cluster: response.serverInfo.clusterName,
+ pendingReasons: reasons
+ });
+ }
});
api.getConfigSummary(key, (response) => {
that.setState({
@@ -131,6 +137,7 @@ export default class Job extends React.Component {
cronJob={this.state.cronJob}
onTaskViewChange={(t) => that.setTaskView(t.id)}
onViewChange={(t) => that.setJobView(t.id)}
+ pendingReasons={this.state.pendingReasons}
queryParams={queryString.parse(this.props.location.search)}
tasks={this.state.tasks} />
</Container>
http://git-wip-us.apache.org/repos/asf/aurora/blob/b4825a37/ui/src/main/js/test-utils/TaskBuilders.js
----------------------------------------------------------------------
diff --git a/ui/src/main/js/test-utils/TaskBuilders.js b/ui/src/main/js/test-utils/TaskBuilders.js
index f2b0645..5a34735 100644
--- a/ui/src/main/js/test-utils/TaskBuilders.js
+++ b/ui/src/main/js/test-utils/TaskBuilders.js
@@ -45,6 +45,7 @@ export const AssignedTaskBuilder = createBuilder({
});
export const TaskEventBuilder = createBuilder({
+ message: '',
timestamp: 0,
status: ScheduleStatus.PENDING
});