64 lines
1.6 KiB
JavaScript
64 lines
1.6 KiB
JavaScript
/**
|
|
* Copyright (c) HashiCorp, Inc.
|
|
* SPDX-License-Identifier: MPL-2.0
|
|
*/
|
|
|
|
import Component from '@glimmer/component';
|
|
import { inject as service } from '@ember/service';
|
|
|
|
export default class AllocationServiceSidebarComponent extends Component {
|
|
@service store;
|
|
@service system;
|
|
|
|
get isSideBarOpen() {
|
|
return !!this.args.service;
|
|
}
|
|
keyCommands = [
|
|
{
|
|
label: 'Close Service Sidebar',
|
|
pattern: ['Escape'],
|
|
action: () => this.args.fns.closeSidebar(),
|
|
},
|
|
];
|
|
|
|
get service() {
|
|
return this.store.query('service-fragment', { refID: this.args.serviceID });
|
|
}
|
|
|
|
get address() {
|
|
const port = this.args.allocation?.allocatedResources?.ports?.findBy(
|
|
'label',
|
|
this.args.service.portLabel
|
|
);
|
|
if (port) {
|
|
return `${port.hostIp}:${port.value}`;
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
get aggregateStatus() {
|
|
return this.checks.any((check) => check.Status === 'failure')
|
|
? 'Unhealthy'
|
|
: 'Healthy';
|
|
}
|
|
|
|
get consulRedirectLink() {
|
|
return this.system.agent.get('config')?.UI?.Consul?.BaseUIURL;
|
|
}
|
|
|
|
get checks() {
|
|
if (!this.args.service || !this.args.allocation) return [];
|
|
let allocID = this.args.allocation.id;
|
|
// Our UI checks run every 2 seconds; but a check itself may only update every, say, minute.
|
|
// Therefore, we'll have duplicate checks in a service's healthChecks array.
|
|
// Only get the most recent check for each check.
|
|
return (this.args.service.healthChecks || [])
|
|
.filterBy('Alloc', allocID)
|
|
.sortBy('Timestamp')
|
|
.reverse()
|
|
.uniqBy('Check')
|
|
.sortBy('Check');
|
|
}
|
|
}
|