diff --git a/src/data/hassio/supervisor.ts b/src/data/hassio/supervisor.ts index 2f34c77f84ce..cc74a7fd70f8 100644 --- a/src/data/hassio/supervisor.ts +++ b/src/data/hassio/supervisor.ts @@ -203,6 +203,20 @@ export const fetchHassioLogs = async ( ); export const fetchHassioLogsFollow = async ( + hass: HomeAssistant, + provider: string, + signal: AbortSignal, + lines = 100 +) => + hass.callApiRaw( + "GET", + `hassio/${provider.includes("_") ? `addons/${provider}` : provider}/logs/follow?lines=${lines}`, + undefined, + undefined, + signal + ); + +export const fetchHassioLogsBootFollow = async ( hass: HomeAssistant, provider: string, signal: AbortSignal, @@ -222,7 +236,12 @@ export const getHassioLogDownloadUrl = (provider: string) => provider.includes("_") ? `addons/${provider}` : provider }/logs`; -export const getHassioLogDownloadLinesUrl = ( +export const getHassioLogDownloadLinesUrl = (provider: string, lines: number) => + `/api/hassio/${ + provider.includes("_") ? `addons/${provider}` : provider + }/logs?lines=${lines}`; + +export const getHassioLogBootDownloadLinesUrl = ( provider: string, lines: number, boot = 0 diff --git a/src/panels/config/logs/dialog-download-logs.ts b/src/panels/config/logs/dialog-download-logs.ts index fdd67e5a315b..e4726e0528a6 100644 --- a/src/panels/config/logs/dialog-download-logs.ts +++ b/src/panels/config/logs/dialog-download-logs.ts @@ -14,7 +14,10 @@ import type { DownloadLogsDialogParams } from "./show-dialog-download-logs"; import "../../../components/ha-select"; import "../../../components/ha-list-item"; import { stopPropagation } from "../../../common/dom/stop_propagation"; -import { getHassioLogDownloadLinesUrl } from "../../../data/hassio/supervisor"; +import { + getHassioLogDownloadLinesUrl, + getHassioLogBootDownloadLinesUrl, +} from "../../../data/hassio/supervisor"; import { getSignedPath } from "../../../data/auth"; import { fileDownload } from "../../../util/file_download"; @@ -112,7 +115,7 @@ class DownloadLogsDialog extends LitElement { const boot = this._dialogParams!.boot; const timeString = new Date().toISOString().replace(/:/g, "-"); - const downloadUrl = getHassioLogDownloadLinesUrl( + const downloadUrl = this._getDownloadUrlFunction()( provider, this._lineCount, boot @@ -126,6 +129,13 @@ class DownloadLogsDialog extends LitElement { this.closeDialog(); } + private _getDownloadUrlFunction() { + if (this._dialogParams!.boot === 0) { + return getHassioLogDownloadLinesUrl; + } + return getHassioLogBootDownloadLinesUrl; + } + private _setNumberOfLogs(ev) { this._lineCount = Number(ev.target.value); } diff --git a/src/panels/config/logs/error-log-card.ts b/src/panels/config/logs/error-log-card.ts index b487f07c9549..12994fe1e23f 100644 --- a/src/panels/config/logs/error-log-card.ts +++ b/src/panels/config/logs/error-log-card.ts @@ -39,6 +39,7 @@ import { extractApiErrorMessage } from "../../../data/hassio/common"; import { fetchHassioBoots, fetchHassioLogs, + fetchHassioLogsBootFollow, fetchHassioLogsFollow, getHassioLogDownloadUrl, } from "../../../data/hassio/supervisor"; @@ -378,7 +379,7 @@ class ErrorLogCard extends LitElement { isComponentLoaded(this.hass, "hassio") && this.provider ) { - const response = await fetchHassioLogsFollow( + const response = await this._fetchLogsFunction()( this.hass, this.provider, this._logStreamAborter.signal, @@ -468,6 +469,13 @@ class ErrorLogCard extends LitElement { } } + private _fetchLogsFunction = () => { + if (this._boot === 0) { + return fetchHassioLogsFollow; + } + return fetchHassioLogsBootFollow; + }; + private _debounceSearch = debounce(() => { this._noSearchResults = !this._ansiToHtmlElement?.filterLines(this.filter); @@ -570,9 +578,14 @@ class ErrorLogCard extends LitElement { if (this._streamSupported && isComponentLoaded(this.hass, "hassio")) { try { const { data } = await fetchHassioBoots(this.hass); - this._boots = Object.keys(data.boots) + const boots = Object.keys(data.boots) .map(Number) .sort((a, b) => b - a); + + // only show boots select when there are more than one boot + if (boots.length > 1) { + this._boots = boots; + } } catch (err: any) { // eslint-disable-next-line no-console console.error(err);