From: yomguy Date: Tue, 24 Jul 2012 22:35:19 +0000 (+0200) Subject: add push to master server when recording new conference X-Git-Tag: 0.8^2~21 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=3e73592c758f0d3b781ed87fee13d67d6a84f12b;p=teleforma.git add push to master server when recording new conference --- diff --git a/example/settings.py b/example/settings.py index 54ef65db..399eb3dc 100644 --- a/example/settings.py +++ b/example/settings.py @@ -190,3 +190,4 @@ TELECASTER_CONF = [{'type':'mp3','server_type':'icecast','conf':'/etc/telecaster TELECASTER_RSYNC_SERVER = 'telecaster@jimi.parisson.com:archives/' TELECASTER_RSYNC_LOG = '/var/log/telecaster/rsync.log' +TELECASTER_MASTER_SERVER = 'angus.parisson.com' diff --git a/teleforma/models.py b/teleforma/models.py index 4da98173..a55be252 100755 --- a/teleforma/models.py +++ b/teleforma/models.py @@ -252,7 +252,13 @@ class Conference(Model): def to_json_dict(self): data = {'id': self.public_id, 'course_code': self.course.code, 'course_type': self.course_type.name, 'professor_id': self.professor.user.username, - 'session': self.session, 'room': self.room.name, } + 'session': self.session, 'room': self.room.name, 'streams':[] } + streams = self.livestream.all() + if streams: + for stream in streams: + data['streams'].append({'host': stream.server.host, + 'port': stream.server.port, + 'type': stream.server.type }) return data class Meta: diff --git a/teleforma/templates/teleforma/course_conference.html b/teleforma/templates/teleforma/course_conference.html index 472a2be5..2d662c78 100644 --- a/teleforma/templates/teleforma/course_conference.html +++ b/teleforma/templates/teleforma/course_conference.html @@ -7,15 +7,15 @@ diff --git a/teleforma/views.py b/teleforma/views.py index f5f24112..41bca649 100755 --- a/teleforma/views.py +++ b/teleforma/views.py @@ -35,6 +35,7 @@ from django.contrib.auth.decorators import login_required from django.contrib.contenttypes.models import ContentType from django.views.generic.edit import FormView from django.core.urlresolvers import reverse, reverse_lazy +from jsonrpc.proxy import ServiceProxy from teleforma.models import * from teleforma.forms import * @@ -273,7 +274,6 @@ class DocumentView(DetailView): model = Document template_name='teleforma/course_document.html' - def get_context_data(self, **kwargs): context = super(DocumentView, self).get_context_data(**kwargs) all_courses = get_courses(self.request.user) @@ -345,9 +345,9 @@ class ConferenceView(DetailView): context['message'] = contact_message return context - @jsonrpc_method('teleforma.conference_stop') - def stop(request, id): - conference = Conference.objects.get(id=id) + @jsonrpc_method('teleforma.stop_conference') + def stop(request, code): + conference = Conference.objects.get(code=code) conference.date_end = datetime.datetime.now() conference.save() for stream in conference.livestream.all(): @@ -361,6 +361,11 @@ class ConferenceView(DetailView): def dispatch(self, *args, **kwargs): return super(ConferenceView, self).dispatch(*args, **kwargs) + def push(self, conference): + url = 'http://' + settings.TELECASTER_MASTER_SERVER + '/json/' + s = ServiceProxy(url) + s.teleforma.stop_conference(conference.code) + class ConferenceRecordView(FormView): "Conference record form : TeleCaster module required" @@ -412,61 +417,61 @@ class ConferenceRecordView(FormView): # self.snapshot(stream.snapshot_url, station.output_dir) self.snapshot('http://localhost:8080/snapshot/safe', station.output_dir) + try: + self.push(self.conference) + except: + pass + return super(ConferenceRecordView, self).form_valid(form) def snapshot(self, url, dir): + width = 160 + height = 90 img = urllib.urlopen(url) path = dir + os.sep + 'preview.webp' f = open(path, 'w') f.write(img.read()) f.close() - command = '/usr/bin/dwebp ' + path + ' -o ' + dir + os.sep + 'preview.png &' + command = '/usr/bin/dwebp ' + path + ' -scale ' + str(width) + ' ' + str(height) + \ + ' -o ' + dir + os.sep + 'preview.png &' os.system(command) @method_decorator(login_required) def dispatch(self, *args, **kwargs): return super(ConferenceRecordView, self).dispatch(*args, **kwargs) - def create(self, conference): + @jsonrpc_method('teleforma.create_conference') + def create(request, conference): if isinstance(conference, dict): - conf, c = Conference.objects.get_or_create(public_id=conference['id']) + course = Course.objects.get(code=conference['course_code']) + course_type = CourseType.objects.get(name=conference['course_type']) + conf, c = Conference.objects.get_or_create(public_id=conference['id'], + course=course, course_type=course_type) if c: - conf.course = Course.objects.get(code=conference['course_code']) - conf.course_type = CourseType.objects.get(name=conference['course_type']) user = User.objects.get(username=conference['professor_id']) conf.session = conference['session'] conf.professor = Professor.objects.get(user=user) conf.room = Room.objects.get(name=conference['room']) + conf.date_begin = datetime.datetime.now() conf.save() - #TODO: dates - else: - raise 'Error : Bad Conference dictionnary' - - @jsonrpc_method('teleforma.update_conferences') - def update(request, data): - if isinstance(data, list): - for conference in data: - self.create(conference) - else: - raise 'Error : Bad Conference dictionnary list' - - @jsonrpc_method('teleforma.add_conference') - def add(request, data): - # playlist_resource must be a dict - if isinstance(data, dict): - self.create(data) + course.save() + for stream in conference['streams']: + host = stream['host'] + port = stream['port'] + server_type = stream['type'] + server, c = StreamingServer.objects.get_or_create(host=status.ip, + port=port, + type=server_type) + stream = LiveStream(conference=conf, server=server, + stream_type=type, streaming=True) + stream.save() else: raise 'Error : Bad Conference dictionnary' def push(self, conference): - url = 'http://' + conference.course.department.domain + '/' - data = {"id":"jsonrpc", "params":"'%s'", "method":"'teleforma.add_conference'", - "jsonrpc":"1.0"} % conference.to_json_dict() - jdata = json.dumps(data) - try: - urllib2.urlopen(url, jdata) - except: - pass + url = 'http://' + settings.TELECASTER_MASTER_SERVER + '/json/' + s = ServiceProxy(url) + s.teleforma.create_conference(conference.to_json_dict()) class UsersView(ListView):