mirror of https://github.com/rancher/ui.git
127 lines
3.1 KiB
JavaScript
127 lines
3.1 KiB
JavaScript
import Component from '@ember/component';
|
|
import { inject as service } from '@ember/service';
|
|
import layout from './template';
|
|
import { computed, set, get, observer } from '@ember/object';
|
|
|
|
const NON_NAMESPACED_RESOURCES = ['PersistentVolume'];
|
|
const CLUSTER_ONLY = ['namespace', 'object']
|
|
|
|
const HEADERS = [
|
|
{
|
|
name: 'namespace',
|
|
sort: ['involvedObject.namespace'],
|
|
translationKey: 'resourceEventList.table.namespace',
|
|
width: 120,
|
|
},
|
|
{
|
|
name: 'type',
|
|
sort: ['type'],
|
|
translationKey: 'resourceEventList.table.type',
|
|
width: 100,
|
|
},
|
|
{
|
|
name: 'reason',
|
|
sort: ['reason'],
|
|
translationKey: 'resourceEventList.table.reason',
|
|
width: 200,
|
|
},
|
|
{
|
|
name: 'object',
|
|
sort: ['involvedObject.name'],
|
|
translationKey: 'resourceEventList.table.object',
|
|
width: 200,
|
|
},
|
|
{
|
|
name: 'message',
|
|
sort: ['message'],
|
|
translationKey: 'resourceEventList.table.message',
|
|
},
|
|
{
|
|
name: 'lastTimestamp',
|
|
sort: ['lastTimestamp'],
|
|
translationKey: 'resourceEventList.table.lastUpdate',
|
|
width: 200,
|
|
},
|
|
];
|
|
|
|
export default Component.extend({
|
|
globalStore: service(),
|
|
scope: service(),
|
|
|
|
layout,
|
|
|
|
events: null,
|
|
|
|
sortBy: 'lastTimestamp',
|
|
descending: true,
|
|
name: null,
|
|
namespaceId: null,
|
|
resourceType: null,
|
|
expanded: false,
|
|
timeOutAnchor: null,
|
|
loading: false,
|
|
clusterEvents: false,
|
|
|
|
init() {
|
|
this._super(...arguments);
|
|
this.expanedDidChange();
|
|
},
|
|
|
|
willDestroyElement() {
|
|
this.clearTimeOut();
|
|
this._super();
|
|
},
|
|
|
|
expanedDidChange: observer('expanded', 'expandAll', function() {
|
|
if ( get(this, 'expanded') || get(this, 'expandAll') ) {
|
|
set(this, 'loading', true);
|
|
this.fetchEvents();
|
|
} else {
|
|
this.clearTimeOut();
|
|
}
|
|
}),
|
|
|
|
headers: computed('clusterEvents', function(){
|
|
return get(this, 'clusterEvents') ? HEADERS : HEADERS.filter((h) => CLUSTER_ONLY.indexOf(h.name) === -1) ;
|
|
}),
|
|
|
|
fetchEvents() {
|
|
let url = `/k8s/clusters/${ get(this, 'scope.currentCluster.id') }/api/v1/`;
|
|
|
|
if ( get(this, 'clusterEvents') ) {
|
|
url += 'events'
|
|
} else {
|
|
const query = `fieldSelector=involvedObject.name=${ get(this, 'name') },involvedObject.kind=${ get(this, 'kind').capitalize() }`;
|
|
|
|
if ( NON_NAMESPACED_RESOURCES.indexOf(get(this, 'kind')) === -1 ) {
|
|
url += `namespaces/${ get(this, 'namespaceId') }/`;
|
|
}
|
|
url += `events?${ query }`;
|
|
}
|
|
|
|
get(this, 'globalStore').rawRequest({
|
|
url,
|
|
method: 'GET',
|
|
})
|
|
.then((xhr) => {
|
|
set(this, 'events', xhr.body.items);
|
|
set(this, 'loading', false);
|
|
const timeOutAnchor = setTimeout(() => {
|
|
this.fetchEvents();
|
|
}, 10000);
|
|
|
|
set(this, 'timeOutAnchor', timeOutAnchor);
|
|
});
|
|
},
|
|
|
|
clearTimeOut() {
|
|
const timeOutAnchor = get(this, 'timeOutAnchor');
|
|
|
|
if (timeOutAnchor){
|
|
clearTimeout(timeOutAnchor);
|
|
set(this, 'timeOutAnchor', timeOutAnchor);
|
|
}
|
|
},
|
|
|
|
});
|