blob: 18cbce216819f376cec12729fc516970d55f92e3 [file] [log] [blame]
/**
* @module infra-sk/modules/systemd-unit-status-sk
* @description <h2><code>systemd-unit-status-sk</code></h2>
*
* @attr machine - The name of the machine the service is running on.
*
* @evt unit-action - An event triggered when the user wants to perform an action
* on the service. The detail of the event has the form:
*
* @prop {Object} value - Expected to be a systemd.UnitStatus.
*
* <pre>
* {
* machine: "skia-monitoring",
* name: "logserver.service",
* action: "start"
* }
* </pre>
*/
import { define } from 'elements-sk/define'
import { html, render } from 'lit-html'
import 'elements-sk/styles/buttons'
import { upgradeProperty } from 'elements-sk/upgradeProperty'
import { diffDate } from 'common-sk/modules/human'
const template = (ele) => html`
<button raised data-action="start" data-name="${ele.value.status.Name}" @click=${ele._click}>Start </button>
<button raised data-action="stop" data-name="${ele.value.status.Name}" @click=${ele._click}>Stop </button>
<button raised data-action="restart" data-name="${ele.value.status.Name}" @click=${ele._click}>Restart</button>
<div class=uptime>${diffDate(ele.value.props ? +ele.value.props.ExecMainStartTimestamp/1000 : 'n/a')}</div>
<div class="${ele.value.status.SubState} state">${ele.value.status.SubState}</div>
<div class=service>${ele.value.status.Name}</div>
`;
define('systemd-unit-status-sk', class extends HTMLElement {
constructor() {
super();
this._value = null;
}
connectedCallback() {
upgradeProperty(this, 'value');
this._render(this);
}
get value() { return this._value; }
set value(val) {
this._value = val;
this._render(this);
}
_render() {
if (this.value) {
render(template(this), this, {eventContext: this});
}
}
_click(e) {
this.dispatchEvent(new CustomEvent('unit-action', {
detail: {
machine: this.getAttribute('machine'),
name: e.target.dataset.name,
action: e.target.dataset.action,
},
bubbles: true}
));
}
});