Skip to content
61 changes: 59 additions & 2 deletions hassio/src/system/hassio-supervisor-log.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
import "@material/mwc-button";
import "@polymer/paper-dropdown-menu/paper-dropdown-menu";
import "@polymer/paper-item/paper-item";
import "@polymer/paper-listbox/paper-listbox";
import "@polymer/paper-card/paper-card";
import {
css,
Expand All @@ -15,12 +18,24 @@ import { ANSI_HTML_STYLE, parseTextToColoredPre } from "../ansi-to-html";
import { hassioStyle } from "../resources/hassio-style";
import { haStyle } from "../../../src/resources/styles";
import { HomeAssistant } from "../../../src/types";
import { fetchSupervisorLogs } from "../../../src/data/hassio/supervisor";
import {
fetchAudioLogs,
fetchDNSLogs,
fetchHostLogs,
fetchMulticastLogs,
fetchSupervisorLogs,
} from "../../../src/data/hassio/supervisor";

@customElement("hassio-supervisor-log")
class HassioSupervisorLog extends LitElement {
@property() public hass!: HomeAssistant;
@property() private _error?: string;
@property() private _logSource:
| "Supervisor"
| "Host"
| "DNS"
| "Audio"
| "Multicast" = "Supervisor";
@query("#content") private _logContent!: HTMLDivElement;

public async connectedCallback(): Promise<void> {
Expand All @@ -36,6 +51,24 @@ class HassioSupervisorLog extends LitElement {
<div class="errors">${this._error}</div>
`
: ""}
<paper-dropdown-menu
label="Log source"
@iron-select=${this._setLogSource}
>
<paper-listbox
slot="dropdown-content"
attr-for-selected="source"
.selected=${this._logSource}
>
${["Supervisor", "Host", "DNS", "Audio", "Multicast"].map(
(source) => {
return html`
<paper-item source=${source}>${source}</paper-item>
`;
}
)}
</paper-listbox>
</paper-dropdown-menu>
<div class="card-content" id="content"></div>
<div class="card-actions">
<mwc-button @click=${this._refresh}>Refresh</mwc-button>
Expand All @@ -56,18 +89,42 @@ class HassioSupervisorLog extends LitElement {
pre {
white-space: pre-wrap;
}
paper-dropdown-menu {
padding: 0 2%;
width: 96%;
}
.errors {
color: var(--google-red-500);
margin-bottom: 16px;
}
.card-content {
padding-top: 0px;
}
`,
];
}

private async _setLogSource(ev): Promise<void> {
const source = ev.detail.item.getAttribute("source");
this._logSource = source;
await this._loadData();
}

private async _loadData(): Promise<void> {
this._error = undefined;
let content!: string;
try {
const content = await fetchSupervisorLogs(this.hass);
if (this._logSource === "Supervisor") {
content = await fetchSupervisorLogs(this.hass);
} else if (this._logSource === "Host") {
content = await fetchHostLogs(this.hass);
} else if (this._logSource === "DNS") {
content = await fetchDNSLogs(this.hass);
} else if (this._logSource === "Audio") {
content = await fetchAudioLogs(this.hass);
} else if (this._logSource === "Multicast") {
content = await fetchMulticastLogs(this.hass);
}
Comment thread
ludeeus marked this conversation as resolved.
Outdated
while (this._logContent.lastChild) {
this._logContent.removeChild(this._logContent.lastChild as Node);
}
Expand Down
16 changes: 16 additions & 0 deletions src/data/hassio/supervisor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,22 @@ export const fetchSupervisorLogs = async (hass: HomeAssistant) => {
return hass.callApi<string>("GET", "hassio/supervisor/logs");
};

export const fetchHostLogs = async (hass: HomeAssistant) => {
return hass.callApi<string>("GET", "hassio/host/logs");
};

export const fetchDNSLogs = async (hass: HomeAssistant) => {
return hass.callApi<string>("GET", "hassio/dns/logs");
};

export const fetchMulticastLogs = async (hass: HomeAssistant) => {
return hass.callApi<string>("GET", "hassio/multicast/logs");
};

export const fetchAudioLogs = async (hass: HomeAssistant) => {
return hass.callApi<string>("GET", "hassio/audio/logs");
};

export const createHassioSession = async (hass: HomeAssistant) => {
const response = await hass.callApi<HassioResponse<CreateSessionResponse>>(
"POST",
Expand Down