X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/608f3e19607e00b76ef9fb8cedef8124a31ceff7..0f5b0542513b572959e39400bae42e69aeb1a7b6:/services/workbench2/src/services/log-service/log-service.ts diff --git a/services/workbench2/src/services/log-service/log-service.ts b/services/workbench2/src/services/log-service/log-service.ts index 03d3c01ec4..f36044f425 100644 --- a/services/workbench2/src/services/log-service/log-service.ts +++ b/services/workbench2/src/services/log-service/log-service.ts @@ -9,6 +9,7 @@ import { ApiActions } from "services/api/api-actions"; import { WebDAV } from "common/webdav"; import { extractFilesData } from "services/collection-service/collection-service-files-response"; import { CollectionFile } from "models/collection-file"; +import { ContainerRequestResource } from "models/container-request"; export type LogFragment = { logType: LogEventType; @@ -20,25 +21,33 @@ export class LogService extends CommonResourceService { super(serverApi, "logs", actions); } - async listLogFiles(containerRequestUuid: string) { - const request = await this.apiWebdavClient.propfind(`container_requests/${containerRequestUuid}/log`); - if (request.responseXML != null) { + async listLogFiles(containerRequest: Pick) { + const request = await this.apiWebdavClient.propfind(`container_requests/${containerRequest.uuid}/log/${containerRequest.containerUuid}`); + if (request?.responseXML != null) { return extractFilesData(request.responseXML) .filter((file) => ( - file.path === `/arvados/v1/container_requests/${containerRequestUuid}/log` + file.path === `/arvados/v1/container_requests/${containerRequest.uuid}/log/${containerRequest.containerUuid}` )); } return Promise.reject(); } - async getLogFileContents(containerRequestUuid: string, fileRecord: CollectionFile, startByte: number, endByte: number): Promise { + /** + * Fetches the specified log file contents from the given container request's container live logs endpoint + * @param containerRequest Container request to fetch logs for + * @param fileRecord Log file to fetch + * @param startByte First byte index of the log file to fetch + * @param endByte Last byte index to include in the response + * @returns A promise that resolves to the LogEventType and a string array of the log file contents + */ + async getLogFileContents(containerRequest: Pick, fileRecord: Pick, startByte: number, endByte: number): Promise { const request = await this.apiWebdavClient.get( - `container_requests/${containerRequestUuid}/log/${fileRecord.name}`, + `container_requests/${containerRequest.uuid}/log/${containerRequest.containerUuid}/${fileRecord.name}`, {headers: {Range: `bytes=${startByte}-${endByte}`}} ); const logFileType = logFileToLogType(fileRecord); - if (request.responseText && logFileType) { + if (request?.responseText && logFileType) { return { logType: logFileType, contents: request.responseText.split(/\r?\n/), @@ -49,4 +58,4 @@ export class LogService extends CommonResourceService { } } -export const logFileToLogType = (file: CollectionFile) => (file.name.replace(/\.(txt|json)$/, '') as LogEventType); +export const logFileToLogType = (file: Pick) => (file.name.replace(/\.(txt|json)$/, '') as LogEventType);