From 83b8fa9d98246f175e778e4b95dca949269f8394 Mon Sep 17 00:00:00 2001 From: Alex Andreev Date: Mon, 12 Oct 2020 15:58:18 +0300 Subject: [PATCH] Ability to show previous terminated container logs (#1074) * Show previous terminated container logs Signed-off-by: Alex Andreev * Fix for parsing error object Signed-off-by: Alex Andreev --- src/renderer/api/endpoints/pods.api.ts | 2 ++ .../components/+workloads-pods/pod-menu.tsx | 1 + src/renderer/components/dock/pod-logs.store.ts | 8 +++++--- src/renderer/components/dock/pod-logs.tsx | 13 ++++++++++++- 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/renderer/api/endpoints/pods.api.ts b/src/renderer/api/endpoints/pods.api.ts index e1545f09c7..e1c91f6e36 100644 --- a/src/renderer/api/endpoints/pods.api.ts +++ b/src/renderer/api/endpoints/pods.api.ts @@ -42,12 +42,14 @@ export interface IPodMetrics { networkTransmit: T; } +// Reference: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.19/#read-log-pod-v1-core export interface IPodLogsQuery { container?: string; tailLines?: number; timestamps?: boolean; sinceTime?: string; // Date.toISOString()-format follow?: boolean; + previous?: boolean; } export enum PodStatus { diff --git a/src/renderer/components/+workloads-pods/pod-menu.tsx b/src/renderer/components/+workloads-pods/pod-menu.tsx index 64b5d1f5eb..4ec3bb69d0 100644 --- a/src/renderer/components/+workloads-pods/pod-menu.tsx +++ b/src/renderer/components/+workloads-pods/pod-menu.tsx @@ -50,6 +50,7 @@ export class PodMenu extends React.Component { initContainers: pod.getInitContainers(), selectedContainer: container, showTimestamps: false, + previous: false, tailLines: 1000 }); } diff --git a/src/renderer/components/dock/pod-logs.store.ts b/src/renderer/components/dock/pod-logs.store.ts index bf2bf9eb5c..fa1da38c68 100644 --- a/src/renderer/components/dock/pod-logs.store.ts +++ b/src/renderer/components/dock/pod-logs.store.ts @@ -13,6 +13,7 @@ export interface IPodLogsData { initContainers: IPodContainer[] showTimestamps: boolean tailLines: number + previous: boolean } type TabId = string; @@ -48,7 +49,7 @@ export class PodLogsStore extends DockTabStore { } const data = this.getData(tabId); const { oldLogs, newLogs } = this.logs.get(tabId); - const { selectedContainer, tailLines } = data; + const { selectedContainer, tailLines, previous } = data; const pod = new Pod(data.pod); try { // if logs already loaded, check the latest timestamp for getting updates only from this point @@ -64,14 +65,15 @@ export class PodLogsStore extends DockTabStore { sinceTime: lastLogDate.toISOString(), timestamps: true, // Always setting timestampt to separate old logs from new ones container: selectedContainer.name, - tailLines: tailLines, + tailLines, + previous }); if (!oldLogs) { this.logs.set(tabId, { oldLogs: loadedLogs, newLogs }); } else { this.logs.set(tabId, { oldLogs, newLogs: loadedLogs }); } - } catch (error) { + } catch ({error}) { this.logs.set(tabId, { oldLogs: [ _i18n._(t`Failed to load logs: ${error.message}`), diff --git a/src/renderer/components/dock/pod-logs.tsx b/src/renderer/components/dock/pod-logs.tsx index 6f97163bde..06643bc711 100644 --- a/src/renderer/components/dock/pod-logs.tsx +++ b/src/renderer/components/dock/pod-logs.tsx @@ -94,6 +94,11 @@ export class PodLogs extends React.Component { this.save({ showTimestamps: !this.tabData.showTimestamps }); } + togglePrevious = () => { + this.save({ previous: !this.tabData.previous }); + this.reload(); + } + onScroll = (evt: React.UIEvent) => { const logsArea = evt.currentTarget; const { scrollHeight, clientHeight, scrollTop } = logsArea; @@ -148,7 +153,7 @@ export class PodLogs extends React.Component { renderControls() { if (!this.ready) return null; - const { selectedContainer, showTimestamps, tailLines } = this.tabData; + const { selectedContainer, showTimestamps, tailLines, previous } = this.tabData; const timestamps = podLogsStore.getTimestamps(podLogsStore.logs.get(this.tabId).oldLogs); return (
@@ -181,6 +186,12 @@ export class PodLogs extends React.Component { className={cssNames("timestamps-icon", { active: showTimestamps })} tooltip={(showTimestamps ? _i18n._(t`Hide`) : _i18n._(t`Show`)) + " " + _i18n._(t`timestamps`)} /> +