send text messages to playout

This commit is contained in:
Jonathan Baecker 2020-04-29 10:30:17 +02:00
parent 1883fb733f
commit 3fdfa20f05
5 changed files with 77 additions and 5 deletions

View File

@ -6,6 +6,8 @@ from time import sleep
import psutil import psutil
import yaml import yaml
import zmq
from django.conf import settings
from pymediainfo import MediaInfo from pymediainfo import MediaInfo
from api.models import GuiSettings from api.models import GuiSettings
@ -56,6 +58,47 @@ def read_log(type):
return log.read().strip() return log.read().strip()
def send_message(data):
config = read_yaml()
address, port = config['text']['bind_address'].split(':')
context = zmq.Context(1)
client = context.socket(zmq.REQ)
client.connect('tcp://{}:{}'.format(address, port))
poll = zmq.Poller()
poll.register(client, zmq.POLLIN)
request = ''
reply_msg = ''
for key, value in data.items():
request += "{}='{}':".format(key, value)
request = "{} reinit {}".format(settings.DRAW_TEXT_NODE, request.rstrip(':'))
client.send_string(request)
socks = dict(poll.poll(settings.REQUEST_TIMEOUT))
if socks.get(client) == zmq.POLLIN:
reply = client.recv()
if reply and reply.decode() == '0 Success':
reply_msg = reply.decode()
else:
reply_msg = reply.decode()
else:
reply_msg = 'No response from server'
client.setsockopt(zmq.LINGER, 0)
client.close()
poll.unregister(client)
context.term()
return {'Success': reply_msg}
def sizeof_fmt(num, suffix='B'): def sizeof_fmt(num, suffix='B'):
for unit in ['', 'Ki', 'Mi', 'Gi', 'Ti', 'Pi', 'Ei', 'Zi']: for unit in ['', 'Ki', 'Mi', 'Gi', 'Ti', 'Pi', 'Ei', 'Zi']:
if abs(num) < 1024.0: if abs(num) < 1024.0:

View File

@ -13,7 +13,7 @@ from rest_framework.response import Response
from rest_framework.views import APIView from rest_framework.views import APIView
from .utils import (PlayoutService, SystemStats, get_media_path, read_json, from .utils import (PlayoutService, SystemStats, get_media_path, read_json,
read_yaml, write_json, write_yaml, read_log) read_yaml, write_json, write_yaml, read_log, send_message)
class CurrentUserView(APIView): class CurrentUserView(APIView):
@ -58,6 +58,16 @@ class MessengerViewSet(viewsets.ModelViewSet):
filterset_class = MessengerFilter filterset_class = MessengerFilter
class MessegeSender(APIView):
def post(self, request, *args, **kwargs):
if 'data' in request.data:
response = send_message(request.data['data'])
return Response({"success": True, 'status': response})
return Response({"success": False})
class Config(APIView): class Config(APIView):
""" """
read and write config from ffplayout engine read and write config from ffplayout engine

View File

@ -148,3 +148,9 @@ USE_TZ = True
# https://docs.djangoproject.com/en/3.0/howto/static-files/ # https://docs.djangoproject.com/en/3.0/howto/static-files/
STATIC_URL = '/static/' STATIC_URL = '/static/'
# ffmpeg filter node, needs to be edit only when the filter chain changes
DRAW_TEXT_NODE = 'Parsed_drawtext_2'
# zmq settings
REQUEST_TIMEOUT = 1000

View File

@ -39,6 +39,7 @@ urlpatterns = [
path('api/log/', views.LogReader.as_view()), path('api/log/', views.LogReader.as_view()),
path('api/current/user/', views.CurrentUserView.as_view()), path('api/current/user/', views.CurrentUserView.as_view()),
path('api/media/', views.Media.as_view()), path('api/media/', views.Media.as_view()),
path('api/send/', views.MessegeSender.as_view()),
re_path(r'^api/media/upload/(?P<filename>[^/]+)$', views.FileUpload.as_view()), re_path(r'^api/media/upload/(?P<filename>[^/]+)$', views.FileUpload.as_view()),
path('api/media/op/', views.FileOperations.as_view()), path('api/media/op/', views.FileOperations.as_view()),
path('api-auth/', include( path('api-auth/', include(

View File

@ -189,10 +189,10 @@
</b-button> </b-button>
</b-col> </b-col>
<b-col> <b-col>
<b-alert variant="success" :show="success" dismissible> <b-alert variant="success" :show="success" dismissible @dismissed="success=false">
Sending success... Sending success...
</b-alert> </b-alert>
<b-alert variant="warning" :show="failed" dismissible> <b-alert variant="warning" :show="failed" dismissible @dismissed="success=failed">
Sending failed... Sending failed...
</b-alert> </b-alert>
</b-col> </b-col>
@ -403,7 +403,8 @@ export default {
this.getPreset('') this.getPreset('')
}, },
submitMessage () { async submitMessage () {
await this.$store.dispatch('auth/inspectToken')
function aToHex (num) { function aToHex (num) {
return '0x' + Math.round(num * 255).toString(16) return '0x' + Math.round(num * 255).toString(16)
} }
@ -420,7 +421,18 @@ export default {
boxcolor: this.form.boxColor + '@' + aToHex(this.form.boxAlpha), boxcolor: this.form.boxColor + '@' + aToHex(this.form.boxAlpha),
boxborderw: this.form.border boxborderw: this.form.border
} }
console.log(obj)
const response = await this.$axios.post(
'api/send/',
{ data: obj },
{ headers: { Authorization: 'Bearer ' + this.$store.state.auth.jwtToken } }
)
if (response.data && response.data.status.Success && response.data.status.Success === '0 Success') {
this.success = true
} else {
this.failed = true
}
} }
} }
} }