From ffe16ef794e64fdde55e046dc82d56912529e227 Mon Sep 17 00:00:00 2001 From: Jonathan Baecker Date: Fri, 24 Apr 2020 15:16:47 +0200 Subject: [PATCH] write playlist, work on systemd service --- ffplayout/api/views.py | 31 +++++++++++++++++++++++++++++-- ffplayout/db.sqlite3 | Bin 135168 -> 135168 bytes ffplayout/ffplayout/urls.py | 1 + 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/ffplayout/api/views.py b/ffplayout/api/views.py index ae718909..8b944a25 100644 --- a/ffplayout/api/views.py +++ b/ffplayout/api/views.py @@ -6,13 +6,14 @@ from api.models import GuiSettings from api.serializers import GuiSettingsSerializer, UserSerializer from django.contrib.auth.models import User from django_filters import rest_framework as filters +from pystemd.systemd1 import Unit from rest_framework import viewsets from rest_framework.parsers import FileUploadParser, JSONParser from rest_framework.response import Response from rest_framework.views import APIView from .utils import (SystemStats, get_media_path, read_json, read_yaml, - write_yaml) + write_json, write_yaml) class CurrentUserView(APIView): @@ -71,6 +72,32 @@ class Config(APIView): return Response({"success": False}) +class SystemCtl(APIView): + """ + controlling the ffplayout-engine systemd services + """ + + def post(self, request, *args, **kwargs): + if 'data' in request.data and 'run' in request.data['data']: + unit = Unit(b'ffplayout-engine.service', _autoload=True) + if request.data['data']['run'] == 'start': + unit.Unit.Start(b'replace') + return Response({"success": True}) + elif request.data['data']['run'] == 'stop': + unit.Unit.Stop(b'replace') + return Response({"success": True}) + elif request.data['data']['run'] == 'reload': + unit.Unit.Reload(b'replace') + return Response({"success": True}) + elif request.data['data']['run'] == 'restart': + unit.Unit.Restart(b'replace') + return Response({"success": True}) + else: + Response({"success": False}) + + return Response({"success": False}) + + class Playlist(APIView): """ read and write config from ffplayout engine @@ -93,7 +120,7 @@ class Playlist(APIView): def post(self, request, *args, **kwargs): if 'data' in request.data: - write_yaml(request.data['data']) + write_json(request.data['data']) return Response({"success": True}) return Response({"success": False}) diff --git a/ffplayout/db.sqlite3 b/ffplayout/db.sqlite3 index 206be744d31a49634bc38b51fa70a396291fdc1d..218acb354e8a6a45c875948640b9ae3248ff7377 100644 GIT binary patch delta 277 zcmZozz|pXPV}dlJ?nD`9M%|4GOX4}0cv~3w4)L~ZY^>nbXtHKv^=)BwG)>D&NiH%d z$~HBtFtRjGNl7uvNi(X-w@A)UFUU_z-ux<$iBZN>*T6!-(Adhr*vi;U&(hSy!qB|Q znh|Wm9%k0Prkv7paHc&9Iv@$WW OGBMS&Ff%bSvH$?8%})aW delta 136 zcmZozz|pXPV}dlJ)88rY5GAhRqk|Z@(~~(If$=_z?sD fBcS3N{Bp9)j+{mYMh3bDCc4H3NP5gnjEpP*+At|O diff --git a/ffplayout/ffplayout/urls.py b/ffplayout/ffplayout/urls.py index 81091f02..5b2d0fb6 100644 --- a/ffplayout/ffplayout/urls.py +++ b/ffplayout/ffplayout/urls.py @@ -32,6 +32,7 @@ urlpatterns = [ path('admin/', admin.site.urls), path('api/', include(router.urls)), path('api/config/', views.Config.as_view()), + path('api/system/', views.SystemCtl.as_view()), path('api/playlist/', views.Playlist.as_view()), path('api/stats/', views.Statistics.as_view()), path('api/current/user/', views.CurrentUserView.as_view()),