From bb41c5a9365c9bc6ca6ffd6d13876ccccfa8b290 Mon Sep 17 00:00:00 2001 From: Guillaume Pellerin Date: Fri, 10 Jan 2014 18:44:16 +0100 Subject: [PATCH] add source monitor models and views --- teleforma/models/core.py | 38 ++++++++++++++++++++++++++++++++++++++ teleforma/views/core.py | 30 ++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) diff --git a/teleforma/models/core.py b/teleforma/models/core.py index 4a403c9f..077c4576 100644 --- a/teleforma/models/core.py +++ b/teleforma/models/core.py @@ -625,6 +625,44 @@ class Media(MediaBase): ordering = ['-date_modified'] +class Source(Model): + "Streaming source" + + public_id = CharField(_('public_id'), max_length=255) + ip = GenericIPAddressField(_('IP')) + room = ForeignKey(Room, related_name='source', verbose_name=_('room') + blank=True, null=True, on_delete=models.SET_NULL) + monitors = ManyToManyField(Monitor, related_name="source", + verbose_name=_('monitors'), blank=True, null=True) + class Meta: + db_table = app_label + '_' + 'source' + ordering = ['public_id'] + + def __unicode__(self): + return '-'.join([self.public_id, self.room, self.ip]) + + +class Monitor(Model): + "Streaming source monitor" + + mime_types = [('audio/ogg', 'audio/ogg'), ('audio/mp3', 'audio/mp3'), + ('video/webm', 'video/webm'), ('video/mp4', 'video/mp4')] + + port = IntegerField(_('port')) + mount_point = CharField(_('public_id'), max_length=255) + mime_type = CharField(_('type'), choices=self.mime_types, max_length=255) + + @property + def slug(self): + return ':' + str(self.port) + '/' + self.mount_point + + class Meta: + db_table = app_label + '_' + 'monitor' + + def __unicode__(self): + return self.slug + '(' + self.type + ')' + + class NamePaginator(object): """Pagination for string-based objects""" diff --git a/teleforma/views/core.py b/teleforma/views/core.py index 8d7e06cb..f05c5129 100644 --- a/teleforma/views/core.py +++ b/teleforma/views/core.py @@ -693,3 +693,33 @@ class HelpView(TemplateView): def dispatch(self, *args, **kwargs): return super(HelpView, self).dispatch(*args, **kwargs) + +class SourcesStatusView(ListView): + + model = Source + template_name='teleforma/source_monitors.html' + + @jsonrpc_method('telecaster.get_source_status') + def get_source_status(request, public_id): + source = Source.objects.get(public_id=public_id) + url = 'http://' + source.ip + '/json/' + service = ServiceProxy(url) + status = s.teleforma.get_server_status() + return status + + @jsonrpc_method('telecaster.get_source_station_status') + def get_source_station_status(request, public_id): + source = Source.objects.get(public_id=public_id) + url = 'http://' + source.ip + '/json/' + service = ServiceProxy(url) + station = s.teleforma.get_station_status() + return station + + @jsonrpc_method('telecaster.source_station_start') + def start(request, station_dict): + pass + + @jsonrpc_method('telecaster.source_station_stop') + def stop(request): + pass + -- 2.39.5