blob: 604d5ba1370d7ed7d5d3ddc8f5e9a7bba86e606d [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 TimelineSerializer from './timeline';
function getEndTime(source) {
var time = Ember.get(source, 'otherinfo.endTime'),
event = source.events;
if(!time && event) {
event = event.findBy('eventtype', 'QUERY_COMPLETED');
if(event) {
time = event.timestamp;
}
}
return time;
}
function getStatus(source) {
var status = Ember.get(source, 'otherinfo.STATUS');
switch(status) {
case true:
return "SUCCEEDED";
case false:
return "FAILED";
default:
return "RUNNING";
}
}
export default TimelineSerializer.extend({
maps: {
queryText: 'otherinfo.QUERY.queryText',
dagID: 'primaryfilters.DAG_ID',
appID: 'primaryfilters.APP_ID',
sessionID: 'otherinfo.INVOKER_INFO',
operationID: 'primaryfilters.operationid.0',
llapAppID: 'otherinfo.LLAP_APP_ID',
instanceType: 'otherinfo.HIVE_INSTANCE_TYPE',
executionMode: 'primaryfilters.executionmode.0',
domain: 'domain',
threadName: 'otherinfo.THREAD_NAME',
queue: 'primaryfilters.queue.0',
version: 'otherinfo.VERSION',
hiveAddress: 'otherinfo.HIVE_ADDRESS',
clientAddress: 'otherinfo.CLIENT_IP_ADDRESS',
user: 'primaryfilters.user.0',
requestUser: 'primaryfilters.requestuser.0',
tablesRead: 'primaryfilters.tablesread',
tablesWritten: 'primaryfilters.tableswritten',
status: getStatus,
configsJSON: "otherinfo.CONF",
startTime: 'starttime',
endTime: getEndTime,
perf: "otherinfo.PERF"
},
extractAttributes: function (modelClass, resourceHash) {
var data = resourceHash.data,
query = Ember.get(resourceHash, "data.otherinfo.QUERY"),
perf = Ember.get(resourceHash, "data.otherinfo.PERF");
if(query) {
try{
data.otherinfo.QUERY = JSON.parse(query);
}catch(e){}
}
if(!data.otherinfo.CLIENT_IP_ADDRESS) {
data.otherinfo.CLIENT_IP_ADDRESS = data.otherinfo.HIVE_ADDRESS;
}
if(perf) {
try{
let PERF = JSON.parse(perf);
PERF["PostATSHook"] = PERF["PostHook.org.apache.hadoop.hive.ql.hooks.ATSHook"];
data.otherinfo.PERF = PERF;
}catch(e){}
}
data.primaryfilters = data.primaryfilters || {};
if(!Ember.get(data, "primaryfilters.tablesread.length")) {
data.primaryfilters.tablesread = new Error("None");
}
if(!Ember.get(data, "primaryfilters.tableswritten.length")) {
data.primaryfilters.tableswritten = new Error("None");
}
return this._super(modelClass, resourceHash);
},
});