ui/app/components/resource-event-list/component.js

105 lines
2.5 KiB
JavaScript

import Component from '@ember/component';
import { inject as service } from '@ember/service';
import layout from './template';
import { set, get, observer } from '@ember/object';
const NON_NAMESPACED_RESOURCES = ['PersistentVolume'];
export default Component.extend({
globalStore: service(),
scope: service(),
layout,
events: null,
sortBy: 'lastTimestamp',
descending: false,
name: null,
namespaceId: null,
resourceType: null,
expanded: false,
timeOutAnchor: null,
loading: false,
headers: [
{
name: 'type',
sort: ['type'],
translationKey: 'resourceEventList.table.type',
width: 100,
},
{
name: 'reason',
sort: ['reason'],
translationKey: 'resourceEventList.table.reason',
width: 200,
},
{
name: 'message',
sort: ['message'],
translationKey: 'resourceEventList.table.message',
},
{
name: 'lastTimestamp',
sort: ['lastTimestamp'],
translationKey: 'conditionSections.table.lastUpdate',
width: 200,
},
],
init() {
this._super(...arguments);
this.expanedDidChange();
},
willDestroyElement() {
this.clearTimeOut();
this._super();
},
expanedDidChange: observer('expanded', function() {
if ( get(this, 'expanded') ) {
set(this, 'loading', true);
this.fetchEvents();
} else {
this.clearTimeOut();
}
}),
fetchEvents() {
const query = `fieldSelector=involvedObject.name=${ get(this, 'name') },involvedObject.kind=${ get(this, 'kind').capitalize() }`;
let url = `/k8s/clusters/${ get(this, 'scope.currentCluster.id') }/api/v1/`;
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);
}
},
});