blob: a5904ef717e16d0858596096a2c5cfa607ae8eab [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import Ember from 'ember';
import DS from 'ember-data';
import AMTimelineModel from './am-timeline';
function valueComputerFactory(path1, path2, path3) {
return function () {
var value = this.get(path1);
if(path2 && (value === undefined || value === null)){
value = this.get(path2);
}
if(path3 && (value === undefined || value === null)){
value = this.get(path3);
}
return value;
};
}
export default AMTimelineModel.extend({
needs: {
dag: {
type: "dag",
idKey: "dagID",
silent: true
},
am: {
type: "vertexAm",
idKey: "entityID",
loadType: "demand",
queryParams: function (model) {
return {
vertexID: parseInt(model.get("index")),
dagID: parseInt(model.get("dag.index")),
counters: "*"
};
},
urlParams: function (model) {
return {
app_id: model.get("appID"),
version: model.get("dag.amWsVersion") || "1"
};
}
}
},
name: DS.attr('string'),
_initTime: DS.attr('number'),
_startTime: DS.attr('number'),
_endTime: DS.attr('number'),
_firstTaskStartTime: DS.attr('number'),
_lastTaskFinishTime: DS.attr('number'),
initTime: Ember.computed("am.initTime", "_initTime",
valueComputerFactory("am.initTime", "_initTime")
),
startTime: Ember.computed("firstTaskStartTime", "am.startTime", "_startTime",
valueComputerFactory("firstTaskStartTime", "am.startTime", "_startTime")
),
endTime: Ember.computed("am.endTime", "_endTime",
valueComputerFactory("am.endTime", "_endTime")
),
firstTaskStartTime: Ember.computed("am.firstTaskStartTime", "_firstTaskStartTime",
valueComputerFactory("am.firstTaskStartTime", "_firstTaskStartTime")
),
lastTaskFinishTime: Ember.computed("am.lastTaskFinishTime", "_lastTaskFinishTime",
valueComputerFactory("am.lastTaskFinishTime", "_lastTaskFinishTime")
),
totalTasks: DS.attr('number'),
_failedTasks: DS.attr('number'),
_succeededTasks: DS.attr('number'),
_killedTasks: DS.attr('number'),
failedTasks: Ember.computed("am.failedTasks", "_failedTasks",
valueComputerFactory("am.failedTasks", "_failedTasks")
),
succeededTasks: Ember.computed("am.succeededTasks", "_succeededTasks",
valueComputerFactory("am.succeededTasks", "_succeededTasks")
),
killedTasks: Ember.computed("am.killedTasks", "_killedTasks",
valueComputerFactory("am.killedTasks", "_killedTasks")
),
finalStatus: Ember.computed("status", "failedTaskAttempts", function () {
var status = this.get("status");
if(status === "SUCCEEDED" && this.get("failedTaskAttempts")) {
status = "SUCCEEDED_WITH_FAILURES";
}
return status;
}),
runningTasks: Ember.computed("am.runningTasks", "status", function () {
var runningTasks = this.get("am.runningTasks");
if(runningTasks === undefined) {
runningTasks = this.get("status") === 'SUCCEEDED' ? 0 : null;
}
return runningTasks;
}),
pendingTasks: Ember.computed("totalTasks", "succeededTasks", "runningTasks", function () {
var pendingTasks = null,
runningTasks = this.get("runningTasks"),
totalTasks = this.get("totalTasks");
if(totalTasks!== null && runningTasks !== null) {
pendingTasks = totalTasks - this.get("succeededTasks") - runningTasks;
}
return pendingTasks;
}),
_failedTaskAttempts: DS.attr('number'),
_killedTaskAttempts: DS.attr('number'),
failedTaskAttempts: Ember.computed("am.failedTaskAttempts", "_failedTaskAttempts",
valueComputerFactory("am.failedTaskAttempts", "_failedTaskAttempts")
),
killedTaskAttempts: Ember.computed("am.killedTaskAttempts", "_killedTaskAttempts",
valueComputerFactory("am.killedTaskAttempts", "_killedTaskAttempts")
),
minDuration: DS.attr('number'),
maxDuration: DS.attr('number'),
avgDuration: DS.attr('number'),
firstTasksToStart: DS.attr("object"),
lastTasksToFinish: DS.attr("object"),
shortestDurationTasks: DS.attr("object"),
longestDurationTasks: DS.attr("object"),
processorClassName: DS.attr('string'),
dagID: DS.attr('string'),
dag: DS.attr('object'), // Auto-loaded by need
description: Ember.computed("dag.vertices", "name", function () {
try {
let vertex = this.get("dag.vertices").findBy("vertexName", this.get("name"));
return JSON.parse(vertex.userPayloadAsText).desc;
}catch(e) {}
}),
servicePlugin: DS.attr('object'),
});