mirror of https://github.com/rancher/ui.git
136 lines
3.9 KiB
JavaScript
136 lines
3.9 KiB
JavaScript
import Route from '@ember/routing/route';
|
|
import { hash } from 'rsvp';
|
|
import { get } from '@ember/object';
|
|
import { inject as service } from '@ember/service';
|
|
import { reads } from '@ember/object/computed'
|
|
import EditOrClone from 'alert/mixins/edit-or-clone';
|
|
|
|
export default Route.extend(EditOrClone, {
|
|
globalStore: service(),
|
|
scope: service(),
|
|
growl: service(),
|
|
|
|
pageScope: reads('scope.currentPageScope'),
|
|
|
|
model(params) {
|
|
const pageScope = get(this, 'pageScope');
|
|
const ruleId = params.rule_id;
|
|
const groupId = params.group_id;
|
|
|
|
if (pageScope === 'cluster') {
|
|
const cluster = window.l('route:application').modelFor('authenticated.cluster');
|
|
const clusterId = cluster.get('id');
|
|
|
|
return this.loadClusterResource({
|
|
clusterId,
|
|
ruleId,
|
|
groupId,
|
|
});
|
|
} else {
|
|
const project = window.l('route:application').modelFor('authenticated.project').get('project');
|
|
const projectId = project.get('id');
|
|
const clusterId = project.get('clusterId');
|
|
|
|
return this.loadProjectResource({
|
|
projectId,
|
|
clusterId,
|
|
ruleId,
|
|
groupId,
|
|
});
|
|
}
|
|
},
|
|
isMonitoringEnabled() {
|
|
const ps = get(this, 'pageScope');
|
|
|
|
if (ps === 'cluster') {
|
|
return get(this, 'scope.currentCluster.enableClusterMonitoring')
|
|
} else {
|
|
return get(this, 'scope.currentProject.enableProjectMonitoring')
|
|
}
|
|
},
|
|
|
|
loadClusterResource({
|
|
clusterId, ruleId, groupId
|
|
}) {
|
|
const globalStore = get(this, 'globalStore');
|
|
const opt = { filter: { clusterId } };
|
|
let metrics
|
|
|
|
if (this.isMonitoringEnabled()) {
|
|
metrics = globalStore.rawRequest({
|
|
url: `monitormetrics?action=listclustermetricname&limit=-1`,
|
|
method: 'POST',
|
|
data: { clusterId, }
|
|
}).catch((err = {}) => {
|
|
get(this, 'growl').fromError(get(err, 'body.message'));
|
|
});
|
|
}
|
|
|
|
return hash({
|
|
nodes: globalStore.find('node', null, opt),
|
|
notifiers: globalStore.findAll('notifier'),
|
|
alertRule: globalStore.find('clusterAlertRule', ruleId),
|
|
alertGroup: globalStore.find('clusterAlertGroup', groupId),
|
|
metrics,
|
|
}).then(({
|
|
nodes, notifiers, alertRule, metrics, alertGroup
|
|
}) => {
|
|
return {
|
|
nodes,
|
|
notifiers,
|
|
alertGroup,
|
|
alertRule: this.loadClusterRule(alertRule.clone()),
|
|
metrics: metrics && metrics.body && metrics.body.names,
|
|
mode: 'edit',
|
|
level: 'rule',
|
|
}
|
|
});
|
|
},
|
|
|
|
loadProjectResource({
|
|
clusterId, projectId, groupId, ruleId
|
|
}) {
|
|
const store = get(this, 'store');
|
|
const globalStore = get(this, 'globalStore');
|
|
const opt = { filter: { projectId } };
|
|
let metrics
|
|
|
|
if (this.isMonitoringEnabled()) {
|
|
metrics = globalStore.rawRequest({
|
|
url: `monitormetrics?action=listprojectmetricname&limit=-1`,
|
|
method: 'POST',
|
|
data: { projectId, }
|
|
}).catch((err = {}) => {
|
|
get(this, 'growl').fromError(get(err, 'body.message'));
|
|
});
|
|
}
|
|
|
|
return hash({
|
|
pods: store.find('pod', null),
|
|
statefulsets: store.find('statefulset', null, opt),
|
|
daemonsets: store.find('daemonset', null, opt),
|
|
deployments: store.find('deployment', null, opt),
|
|
notifiers: globalStore.find('notifier', null, { filter: { clusterId } }),
|
|
metrics,
|
|
alertRule: globalStore.find('projectAlertRule', ruleId),
|
|
alertGroup: globalStore.find('projectAlertGroup', groupId),
|
|
}).then(({
|
|
pods, statefulsets, daemonsets, deployments, notifiers, metrics, alertRule, alertGroup
|
|
}) => {
|
|
return {
|
|
pods,
|
|
statefulsets,
|
|
daemonsets,
|
|
deployments,
|
|
notifiers,
|
|
metrics: metrics && metrics.body && metrics.body.names,
|
|
alertGroup,
|
|
alertRule: this.loadProjectRule(alertRule.clone()),
|
|
mode: 'edit',
|
|
level: 'rule',
|
|
}
|
|
});
|
|
},
|
|
|
|
});
|