Add fallback for missing logs boot result. (#22600)

* Add fallback for missing logs boot result.

* Add fallback for logs full download when boots are missing

* Fix function naming and single boot select in error-log-card
This commit is contained in:
Wendelin 2024-10-31 08:57:27 +01:00 committed by GitHub
parent eb8d23320a
commit 744cda3974
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 47 additions and 5 deletions

View File

@ -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

View File

@ -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);
}

View File

@ -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);