From f4aa0ac02b6418ff36a6772fd37eaf1a5c545b83 Mon Sep 17 00:00:00 2001 From: Jonathan Baecker Date: Mon, 27 Apr 2020 16:07:28 +0200 Subject: [PATCH] get logging --- ffplayout/api/utils.py | 17 ++- ffplayout/api/views.py | 18 ++- ffplayout/ffplayout/urls.py | 1 + ffplayout/frontend/pages/control.vue | 2 +- ffplayout/frontend/pages/logging.vue | 192 +++++++++++++++++++-------- 5 files changed, 170 insertions(+), 60 deletions(-) diff --git a/ffplayout/api/utils.py b/ffplayout/api/utils.py index 36819a32..5d55bd1e 100644 --- a/ffplayout/api/utils.py +++ b/ffplayout/api/utils.py @@ -46,6 +46,16 @@ def write_json(data): json.dump(data, outfile, indent=4) +def read_log(type): + config = read_yaml() + log_path = config['logging']['log_path'] + log_file = os.path.join(log_path, '{}.log'.format(type)) + + if os.path.isfile(log_file): + with open(log_file, 'r') as log: + return log.read().strip() + + def sizeof_fmt(num, suffix='B'): for unit in ['', 'Ki', 'Mi', 'Gi', 'Ti', 'Pi', 'Ei', 'Zi']: if abs(num) < 1024.0: @@ -61,7 +71,8 @@ class PlayoutService: self.proc = None def run_cmd(self): - self.proc = run(self.cmd + self.service, stdout=PIPE, stderr=STDOUT, encoding="utf-8").stdout + self.proc = run(self.cmd + self.service, stdout=PIPE, stderr=STDOUT, + encoding="utf-8").stdout def start(self): self.cmd.append('start') @@ -86,8 +97,8 @@ class PlayoutService: return self.proc.replace('\n', '') def log(self): - self.cmd = ['sudo', '/bin/systemctl', 'journalctl', - '-n', '1000', '-u'] + self.service + self.cmd = ['sudo', '/bin/journalctl', '-n', '1000', '-u'] + self.run_cmd() return self.proc diff --git a/ffplayout/api/views.py b/ffplayout/api/views.py index 6172b49e..d62c47f0 100644 --- a/ffplayout/api/views.py +++ b/ffplayout/api/views.py @@ -12,7 +12,7 @@ from rest_framework.response import Response from rest_framework.views import APIView from .utils import (PlayoutService, SystemStats, get_media_path, read_json, - read_yaml, write_json, write_yaml) + read_yaml, write_json, write_yaml, read_log) class CurrentUserView(APIView): @@ -104,6 +104,22 @@ class SystemCtl(APIView): return Response({"success": False}) +class LogReader(APIView): + def get(self, request, *args, **kwargs): + if 'type' in request.GET.dict(): + type = request.GET.dict()['type'] + log = read_log(type) + + if log: + return Response({'log': log}) + else: + return Response({ + "success": False, + "error": "PLayout log file not found!"}) + else: + return Response({"success": False}) + + class Playlist(APIView): """ read and write config from ffplayout engine diff --git a/ffplayout/ffplayout/urls.py b/ffplayout/ffplayout/urls.py index 5b2d0fb6..2c8aad45 100644 --- a/ffplayout/ffplayout/urls.py +++ b/ffplayout/ffplayout/urls.py @@ -35,6 +35,7 @@ urlpatterns = [ path('api/system/', views.SystemCtl.as_view()), path('api/playlist/', views.Playlist.as_view()), path('api/stats/', views.Statistics.as_view()), + path('api/log/', views.LogReader.as_view()), path('api/current/user/', views.CurrentUserView.as_view()), path('api/media/', views.Media.as_view()), re_path(r'^api/media/upload/(?P[^/]+)$', views.FileUpload.as_view()), diff --git a/ffplayout/frontend/pages/control.vue b/ffplayout/frontend/pages/control.vue index 3ec2b2f3..57b0bcd9 100644 --- a/ffplayout/frontend/pages/control.vue +++ b/ffplayout/frontend/pages/control.vue @@ -397,7 +397,7 @@ export default { { headers: { Authorization: 'Bearer ' + this.$store.state.auth.jwtToken } } ) - await this.getStatus() + setTimeout(() => { this.getStatus() }, 1000) }, async getPlaylist () { await this.$store.dispatch('auth/inspectToken') diff --git a/ffplayout/frontend/pages/logging.vue b/ffplayout/frontend/pages/logging.vue index 5e9fe568..def48f29 100644 --- a/ffplayout/frontend/pages/logging.vue +++ b/ffplayout/frontend/pages/logging.vue @@ -1,75 +1,82 @@