mirror of https://github.com/rancher/ui.git
106 lines
2.8 KiB
JavaScript
106 lines
2.8 KiB
JavaScript
import { observer } from '@ember/object';
|
|
import Service, { inject as service } from '@ember/service';
|
|
import { get, set } from '@ember/object';
|
|
import { on } from '@ember/object/evented';
|
|
|
|
const GRAFANA_LINKS = [
|
|
{
|
|
id: 'etcd',
|
|
title: 'Etcd'
|
|
},
|
|
{
|
|
id: 'scheduler',
|
|
title: 'Kubernetes Components'
|
|
},
|
|
{
|
|
id: 'controller',
|
|
title: 'Kubernetes Components'
|
|
},
|
|
{
|
|
id: 'nodes',
|
|
title: 'Nodes'
|
|
},
|
|
{
|
|
id: 'k8s',
|
|
title: 'Kubernetes Components'
|
|
},
|
|
{
|
|
id: 'rancher',
|
|
title: 'Rancher Components'
|
|
},
|
|
{
|
|
id: 'istio',
|
|
title: 'istio'
|
|
},
|
|
];
|
|
|
|
export default Service.extend({
|
|
scope: service(),
|
|
globalStore: service(),
|
|
|
|
grafanaLinks: GRAFANA_LINKS,
|
|
dashboards: null,
|
|
|
|
updateLinks() {
|
|
( get(this, 'grafanaLinks') || [] ).forEach((link) => {
|
|
const dashboards = get(this, 'dashboards') || [];
|
|
const target = dashboards.findBy('title', get(link, 'title'));
|
|
|
|
if ( target ) {
|
|
const grafanaUrl = `${ get(this, 'scope.currentCluster.monitoringStatus.grafanaEndpoint') }${ get(target, 'url') }`;
|
|
|
|
set(this, `${ get(link, 'id') }Url`, grafanaUrl);
|
|
} else {
|
|
set(this, `${ get(link, 'id') }Url`, null);
|
|
}
|
|
});
|
|
},
|
|
|
|
monitoringStatusDidChange: on('init', observer('scope.currentCluster.id', 'scope.currentProject.id', 'scope.currentCluster.isMonitoringReady', 'scope.currentProject.isMonitoringReady', function() {
|
|
set(this, 'dashboards', []);
|
|
this.updateLinks();
|
|
const isProjectReady = get(this, 'scope.currentProject.isMonitoringReady');
|
|
const systemProject = get(this, 'globalStore').all('project').findBy('isSystemProject', true);
|
|
|
|
if ( isProjectReady ) {
|
|
const rootUrl = get(this, 'scope.currentProject.monitoringStatus.grafanaEndpoint');
|
|
|
|
get(this, 'globalStore').rawRequest({
|
|
url: `${ rootUrl }api/search`,
|
|
method: 'GET',
|
|
}).then((xhr) => {
|
|
if (this.isDestroyed || this.isDestroying) {
|
|
return;
|
|
}
|
|
|
|
const dashboards = xhr.body || [];
|
|
|
|
set(this, 'dashboards', dashboards);
|
|
});
|
|
} else if ( systemProject ){
|
|
const isClusterReady = get(this, 'scope.currentCluster.isMonitoringReady');
|
|
|
|
if ( isClusterReady ) {
|
|
const rootUrl = get(this, 'scope.currentCluster.monitoringStatus.grafanaEndpoint');
|
|
|
|
get(this, 'globalStore').rawRequest({
|
|
url: `${ rootUrl }api/search`,
|
|
method: 'GET',
|
|
}).then((xhr) => {
|
|
if (this.isDestroyed || this.isDestroying) {
|
|
return;
|
|
}
|
|
|
|
const dashboards = xhr.body || [];
|
|
|
|
set(this, 'dashboards', dashboards);
|
|
this.updateLinks();
|
|
});
|
|
} else {
|
|
set(this, 'dashboards', []);
|
|
this.updateLinks();
|
|
}
|
|
}
|
|
})),
|
|
});
|