YARN-8386. App log can not be viewed from Logs tab in secure cluster. Contributed by Sunil Govindan.
This commit is contained in:
parent
e39b113db0
commit
377ea1bcdf
|
@ -0,0 +1,68 @@
|
|||
/**
|
||||
* 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 DS from 'ember-data';
|
||||
import Ember from 'ember';
|
||||
import Converter from 'yarn-ui/utils/converter';
|
||||
import RESTAbstractAdapter from './restabstract';
|
||||
|
||||
/**
|
||||
* REST URL's response when fetching container logs will be
|
||||
* in plain text format and not JSON.
|
||||
*/
|
||||
export default RESTAbstractAdapter.extend({
|
||||
address: "timelineV1WebAddress",
|
||||
restNameSpace: "timeline",
|
||||
serverName: "ATS",
|
||||
|
||||
headers: {
|
||||
Accept: 'text/plain'
|
||||
},
|
||||
|
||||
urlForFindRecord(id/*, modelName, snapshot*/) {
|
||||
var splits = Converter.splitForAppLogs(id);
|
||||
var containerId = splits[0];
|
||||
var logFile = splits[1];
|
||||
var url = this._buildURL();
|
||||
url = url + '/containers/' + containerId + '/logs/' + logFile;
|
||||
console.log('log url' + url);
|
||||
return url;
|
||||
},
|
||||
|
||||
/**
|
||||
* Override options so that result is not expected to be JSON
|
||||
*/
|
||||
ajaxOptions: function (url, type, options) {
|
||||
var hash = options || {};
|
||||
hash.url = url;
|
||||
hash.type = type;
|
||||
// Make sure jQuery does not try to convert response to JSON.
|
||||
hash.dataType = 'text';
|
||||
hash.context = this;
|
||||
|
||||
var headers = Ember.get(this, 'headers');
|
||||
if (headers !== undefined) {
|
||||
hash.beforeSend = function (xhr) {
|
||||
Object.keys(headers).forEach(function (key) {
|
||||
return xhr.setRequestHeader(key, headers[key]);
|
||||
});
|
||||
};
|
||||
}
|
||||
return hash;
|
||||
}
|
||||
});
|
|
@ -29,11 +29,5 @@ export default AbstractAdapter.extend({
|
|||
var containerId = query['containerId'];
|
||||
delete query.containerId;
|
||||
return url + '/containers/' + containerId + '/logs';
|
||||
},
|
||||
|
||||
fetchLogFileContent(containerId, logFile) {
|
||||
var url = this._buildURL();
|
||||
url = url + '/containers/' + containerId + '/logs/' + logFile;
|
||||
return Ember.$.ajax({url: url, type: 'GET', dataType: 'text'});
|
||||
}
|
||||
});
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
*/
|
||||
|
||||
import Ember from 'ember';
|
||||
import Constants from 'yarn-ui/constants';
|
||||
|
||||
export default Ember.Controller.extend({
|
||||
queryParams: ["service"],
|
||||
|
@ -118,16 +119,17 @@ export default Ember.Controller.extend({
|
|||
if (logFile) {
|
||||
this.set("_isLoadingBottomPanel", true);
|
||||
this.set("selectedLogFileName", logFile);
|
||||
this.fetchContentForLogFile(this.get("selectedContainerId"), logFile)
|
||||
var id = this.get("selectedContainerId") + Constants.PARAM_SEPARATOR + logFile;
|
||||
this.fetchContentForLogFile(id)
|
||||
.then(
|
||||
content => {
|
||||
this.set("selectedLogFileContent", content.trim());
|
||||
hash => {
|
||||
this.set("selectedLogFileContent", hash.logs.get('logs').trim());
|
||||
},
|
||||
() => {
|
||||
this.set("selectedLogFileContent", "");
|
||||
}
|
||||
)
|
||||
.always(() => {
|
||||
.then(() => {
|
||||
this.set("_isLoadingBottomPanel", false);
|
||||
});
|
||||
} else {
|
||||
|
@ -224,9 +226,10 @@ export default Ember.Controller.extend({
|
|||
});
|
||||
},
|
||||
|
||||
fetchContentForLogFile(containerId, logFile) {
|
||||
let logAdapter = this.store.adapterFor("yarn-log");
|
||||
return logAdapter.fetchLogFileContent(containerId, logFile);
|
||||
fetchContentForLogFile(id) {
|
||||
return Ember.RSVP.hash({
|
||||
logs: this.store.findRecord('yarn-app-log', id)
|
||||
});
|
||||
},
|
||||
|
||||
resetAfterRefresh() {
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
/**
|
||||
* 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 DS from 'ember-data';
|
||||
|
||||
export default DS.Model.extend({
|
||||
logs: DS.attr('string'),
|
||||
containerID: DS.attr('string'),
|
||||
logFileName: DS.attr('string')
|
||||
});
|
|
@ -0,0 +1,38 @@
|
|||
/**
|
||||
* 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 DS from 'ember-data';
|
||||
import Converter from 'yarn-ui/utils/converter';
|
||||
|
||||
export default DS.JSONAPISerializer.extend({
|
||||
normalizeSingleResponse(store, primaryModelClass, payload, id/*, requestType*/) {
|
||||
// Convert plain text response into JSON.
|
||||
// ID is of the form containerId!fileName
|
||||
var splits = Converter.splitForAppLogs(id);
|
||||
var convertedPayload = {
|
||||
id: id,
|
||||
type: primaryModelClass.modelName,
|
||||
attributes: {
|
||||
logs: payload,
|
||||
containerID: splits[1],
|
||||
logFileName: splits[2]
|
||||
}
|
||||
};
|
||||
return { data: convertedPayload };
|
||||
},
|
||||
});
|
|
@ -112,6 +112,16 @@ export default {
|
|||
return [splits[0], splits[1], fileName];
|
||||
}
|
||||
},
|
||||
splitForAppLogs: function(id) {
|
||||
if (id) {
|
||||
var splits = id.split(Constants.PARAM_SEPARATOR);
|
||||
var splitLen = splits.length;
|
||||
if (splitLen < 2) {
|
||||
return null;
|
||||
}
|
||||
return [splits[0], splits[1]];
|
||||
}
|
||||
},
|
||||
memoryToSimpliedUnit: function(mb) {
|
||||
var unit = "MB";
|
||||
var value = mb;
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
/**
|
||||
* 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 { moduleFor, test } from 'ember-qunit';
|
||||
|
||||
moduleFor('adapter:yarn-app-log', 'Unit | Adapter | yarn app log', {
|
||||
// Specify the other units that are required for this test.
|
||||
// needs: ['serializer:foo']
|
||||
});
|
||||
|
||||
// Replace this with your real tests.
|
||||
test('it exists', function(assert) {
|
||||
let adapter = this.subject();
|
||||
assert.ok(adapter);
|
||||
});
|
Loading…
Reference in New Issue