diff --git a/app/kubernetes/views/applications/logs/logs.html b/app/kubernetes/views/applications/logs/logs.html index eaefc6417..6c9f1e19e 100644 --- a/app/kubernetes/views/applications/logs/logs.html +++ b/app/kubernetes/views/applications/logs/logs.html @@ -46,6 +46,13 @@ + +
+
+ +
+
+ diff --git a/app/kubernetes/views/applications/logs/logsController.js b/app/kubernetes/views/applications/logs/logsController.js index a7d761dd5..015d31c0e 100644 --- a/app/kubernetes/views/applications/logs/logsController.js +++ b/app/kubernetes/views/applications/logs/logsController.js @@ -1,14 +1,17 @@ import angular from 'angular'; +import _ from 'lodash-es'; class KubernetesApplicationLogsController { /* @ngInject */ - constructor($async, $state, $interval, Notifications, KubernetesApplicationService, KubernetesPodService) { + constructor($async, $state, $interval, Notifications, KubernetesApplicationService, KubernetesPodService, Blob, FileSaver) { this.$async = $async; this.$state = $state; this.$interval = $interval; this.Notifications = Notifications; this.KubernetesApplicationService = KubernetesApplicationService; this.KubernetesPodService = KubernetesPodService; + this.Blob = Blob; + this.FileSaver = FileSaver; this.onInit = this.onInit.bind(this); this.stopRepeater = this.stopRepeater.bind(this); @@ -35,6 +38,11 @@ class KubernetesApplicationLogsController { this.repeater = this.$interval(this.getApplicationLogsAsync, this.state.refreshRate); } + downloadLogs() { + const data = new this.Blob([_.reduce(this.applicationLogs, (acc, log) => acc + '\n' + log, '')]); + this.FileSaver.saveAs(data, this.podName + '_logs.txt'); + } + async getApplicationLogsAsync() { try { this.applicationLogs = await this.KubernetesPodService.logs(this.application.ResourcePool, this.podName); diff --git a/app/kubernetes/views/stacks/logs/logs.html b/app/kubernetes/views/stacks/logs/logs.html index cab652fb9..0717a63d6 100644 --- a/app/kubernetes/views/stacks/logs/logs.html +++ b/app/kubernetes/views/stacks/logs/logs.html @@ -44,6 +44,13 @@ + +
+
+ +
+
+ diff --git a/app/kubernetes/views/stacks/logs/logsController.js b/app/kubernetes/views/stacks/logs/logsController.js index bcb7a2c1e..cadcab1db 100644 --- a/app/kubernetes/views/stacks/logs/logsController.js +++ b/app/kubernetes/views/stacks/logs/logsController.js @@ -6,13 +6,15 @@ const colors = ['red', 'orange', 'lime', 'green', 'darkgreen', 'cyan', 'turquois class KubernetesStackLogsController { /* @ngInject */ - constructor($async, $state, $interval, Notifications, KubernetesApplicationService, KubernetesPodService) { + constructor($async, $state, $interval, Notifications, KubernetesApplicationService, KubernetesPodService, FileSaver, Blob) { this.$async = $async; this.$state = $state; this.$interval = $interval; this.Notifications = Notifications; this.KubernetesApplicationService = KubernetesApplicationService; this.KubernetesPodService = KubernetesPodService; + this.Blob = Blob; + this.FileSaver = FileSaver; this.onInit = this.onInit.bind(this); this.stopRepeater = this.stopRepeater.bind(this); @@ -87,6 +89,11 @@ class KubernetesStackLogsController { } } + downloadLogs() { + const data = new this.Blob([(this.dataLogs = _.reduce(this.stackLogs, (acc, log) => acc + '\n' + log.AppName + ' ' + log.Line, ''))]); + this.FileSaver.saveAs(data, this.state.transition.name + '_logs.txt'); + } + async onInit() { this.state = { autoRefresh: false,