def gen_script(): """Generates liquidsoap script from templates """ interface = os.path.join(get_path('bin'), 'rfk-liquidsoaphandler') logfile = os.path.join(get_path(rfk.CONFIG.get('liquidsoap', 'logpath'))) address = rfk.CONFIG.get('liquidsoap', 'address') port = rfk.CONFIG.get('liquidsoap', 'port') lastfm = make_lastfm() template_string = open(_get_template_path('main.liq'), 'r').read() template = Template(template_string) config = template.substitute(address=address, port=port, logfile=logfile, lastFM=lastfm, script=interface) if isinstance(config, str): config = config.decode('utf-8') if not isinstance(config, unicode): config = unicode(config) config += make_output(dir) return config
def main(foreground): if not foreground: rfk.helper.daemonize.createDaemon(get_path()) rfk.init() rfk.database.init_db("%s://%s:%s@%s/%s" % (rfk.CONFIG.get('database', 'engine'), rfk.CONFIG.get('database', 'username'), rfk.CONFIG.get('database', 'password'), rfk.CONFIG.get('database', 'host'), rfk.CONFIG.get('database', 'database'))) global redis_client redis_client = redis.StrictRedis(host='127.0.0.1', port=6379, decode_responses=True) pubsub = redis_client.pubsub(ignore_subscribe_messages=True) pubsub.subscribe('rfk-event') try: for message in pubsub.listen(): if message and message['type'] == 'message': data = ast.literal_eval(message['data']) try: if data['event'] == 'show_change': handle_show_change(data['show_id']) elif data['event'] == 'track_change': handle_track_change(data['track_id']) except (KeyError, TypeError): pass except KeyboardInterrupt: return False
def main(): parser = argparse.ArgumentParser( description='PyRfK Daemon for running Liquidsoap', epilog='Anyways this should normally not called manually') parser.add_argument('--foreground', action='store_true') parser.add_argument('--debug', action='store_true') args = parser.parse_args() if not args.foreground: rfk.helper.daemonize.createDaemon(get_path()) rfk.init() rfk.database.init_db( "%s://%s:%s@%s/%s" % (rfk.CONFIG.get( 'database', 'engine'), rfk.CONFIG.get('database', 'username'), rfk.CONFIG.get('database', 'password'), rfk.CONFIG.get('database', 'host'), rfk.CONFIG.get('database', 'database'))) try: daemon = LiquidsoapDaemon(rfk.CONFIG.get('liquidsoap-daemon', 'socket')) if args.debug: daemon.set_debug(args.debug) if args.foreground: daemon.enable_stdout() daemon.run() except SocketExists: print 'Socket is already there, maybe another instance running?' finally: rfk.database.session.rollback() rfk.database.session.remove()
def loop_list(page): if request.method == 'POST': if request.form.get('action') == 'add': # try: spl = request.form.get('begin').split(':') begin = int(int(spl[0]) * 100 + (int(spl[1]) / 60.) * 100) spl = request.form.get('end').split(':') end = math.ceil(int(spl[0]) * 100 + (int(spl[1]) / 60.) * 100) if end == begin and end == 0: end = 2400 loop = Loop(begin=begin, end=end, filename=request.form.get('filename')) rfk.database.session.add(loop) rfk.database.session.commit() # except Exception as e: # flash('error while inserting Loop') elif request.form.get('action') == 'delete': try: rfk.database.session.delete(Loop.query.get(request.form.get('loopid'))) rfk.database.session.commit() except Exception as e: flash('error while deleting Loop') per_page = 25 (result, total_count) = paginate_query(Loop.query, page=page) current_loop = Loop.get_current_loop() loops = [] for loop in result: loops.append({'loop': loop.loop, 'begin': '%02d:%02d' % (int(loop.begin / 100), int(((loop.begin % 100) / 100.) * 60)), 'end': '%02d:%02d' % (int(loop.end / 100), int(((loop.end % 100) / 100.) * 60)), 'current': loop == current_loop, 'filename': loop.filename, 'file_missing': not (loop.file_exists)}) pagination = Pagination(page, per_page, total_count) searchpath = get_path(rfk.CONFIG.get('liquidsoap', 'looppath')) return render_template('admin/loops/list.html', loops=loops, pagination=pagination, searchpath=searchpath)
def main(): parser = argparse.ArgumentParser(description='PyRfK Daemon for running Liquidsoap', epilog='Anyways this should normally not called manually') parser.add_argument('--foreground', action='store_true') parser.add_argument('--debug', action='store_true') args = parser.parse_args() if not args.foreground: rfk.helper.daemonize.createDaemon(get_path()) rfk.init() rfk.database.init_db("%s://%s:%s@%s/%s" % (rfk.CONFIG.get('database', 'engine'), rfk.CONFIG.get('database', 'username'), rfk.CONFIG.get('database', 'password'), rfk.CONFIG.get('database', 'host'), rfk.CONFIG.get('database', 'database'))) try: daemon = LiquidsoapDaemon(rfk.CONFIG.get('liquidsoap-daemon','socket')) if args.debug: daemon.set_debug(args.debug) if args.foreground: daemon.enable_stdout() daemon.run() except SocketExists: print 'Socket is already there, maybe another instance running?' return 1
def liquidsoap_playlist(): """Returns the path to the current loop file that should be played """ loop = Loop.get_current_loop() return os.path.join(get_path(rfk.CONFIG.get('liquidsoap', 'looppath')), loop.filename)
def loop_list(): if request.method == 'POST': if request.form.get('action') == 'add': # try: spl = request.form.get('begin').split(':') begin = int(int(spl[0]) * 100 + (int(spl[1]) / 60.) * 100) spl = request.form.get('end').split(':') end = math.ceil(int(spl[0]) * 100 + (int(spl[1]) / 60.) * 100) if end == begin and end == 0: end = 2400 loop = Loop(begin=begin, end=end, filename=request.form.get('filename')) rfk.database.session.add(loop) rfk.database.session.commit() # except Exception as e: # flash('error while inserting Loop') elif request.form.get('action') == 'delete': try: rfk.database.session.delete(Loop.query.get(request.form.get('loopid'))) rfk.database.session.commit() except Exception as e: flash('error while deleting Loop') page = int(request.args.get('page') or 0) (result, total_pages) = paginate(Loop.query, page=page) current_loop = Loop.get_current_loop() loops = [] for loop in result: loops.append({'loop': loop.loop, 'begin': '%02d:%02d' % (int(loop.begin / 100), int(((loop.begin % 100) / 100.) * 60)), 'end': '%02d:%02d' % (int(loop.end / 100), int(((loop.end % 100) / 100.) * 60)), 'current': loop == current_loop, 'filename': loop.filename, 'file_missing': not (loop.file_exists)}) pagination = pagelinks('.loop_list', page, total_pages) searchpath = get_path(rfk.CONFIG.get('liquidsoap', 'looppath')) return render_template('admin/loops/list.html', loops=loops, pagination=pagination, searchpath=searchpath)
def get_stats(relay): statsfile = get_path(os.path.join('var', 'tmp', 'traffic{0}'.format(relay.relay))) try: with open(statsfile) as f: (last_total, last_timestamp) = struct.unpack('qi', f.read()) except IOError, struct.error: last_total = None last_timestamp = None
def make_emergency(): if rfk.CONFIG.has_option('liquidsoap', 'fallback'): fallback_filename = rfk.CONFIG.get('liquidsoap', 'fallback') fallback = os.path.join( get_path(rfk.CONFIG.get('liquidsoap', 'looppath')), fallback_filename) if os.path.isfile(fallback): return 'emergency = single("{}")'.format(fallback) return 'emergency = blank()'
def get_stats(relay): statsfile = get_path( os.path.join('var', 'tmp', 'traffic{0}'.format(relay.relay))) try: with open(statsfile) as f: (last_total, last_timestamp) = struct.unpack('qi', f.read()) except IOError, struct.error: last_total = None last_timestamp = None
def __init__(self, socket="/tmp/liquiddaemon.sock"): logging.Handler.__init__(self) self.logger = logging.getLogger("LiquidsoapDaemon") self.logger.setLevel(logging.INFO) self.logger.addHandler(self) self.liquidsoap_logger = logging.getLogger("Liquidsoap") self.liquidsoap_logger.setLevel(logging.INFO) self.liquidsoap_logger.addHandler(self) self.process = None self.socket_handler = SocketHandler(get_path(socket), self) self.log = RingBuffer(100) self.quit = False self.run_liquid = True self.skip_telnet = True
def __init__(self, socket='/tmp/liquiddaemon.sock'): logging.Handler.__init__(self) self.logger = logging.getLogger('LiquidsoapDaemon') self.logger.setLevel(logging.INFO) self.logger.addHandler(self) self.liquidsoap_logger = logging.getLogger('Liquidsoap') self.liquidsoap_logger.setLevel(logging.INFO) self.liquidsoap_logger.addHandler(self) self.process = None self.socket_handler = SocketHandler(get_path(socket), self) self.log = RingBuffer(100) self.quit = False self.run_liquid = True self.skip_telnet = True
def main(jid, password, foreground): rfk.init(enable_geoip=False) if not jid: jid = rfk.CONFIG.get('xmpp', 'jid') if not password: password = rfk.CONFIG.get('xmpp', 'password') if not foreground: rfk.helper.daemonize.createDaemon(get_path()) # Setup logging logging.basicConfig(level=logging.INFO, format='%(levelname)-8s %(message)s') # Setup XMPP instance xmpp = RfKBot(jid, password) # Connect to the XMPP server and start processing XMPP stanzas if xmpp.connect(): xmpp.process(block=False) def message_handler(message): if message and message['type'] == 'message': data = ast.literal_eval(message['data']) try: if data['type'] == 'message': xmpp.send_messages(data) elif data['type'] == 'tune': xmpp.update_tune(data) except (KeyError, TypeError) as err: logging.error('message_handler error: {}'.format(err)) try: redis_client = StrictRedis(host='localhost', port=6379, decode_responses=True) redis_pubsub = redis_client.pubsub(ignore_subscribe_messages=True) redis_pubsub.subscribe('rfk-xmpp') for message in redis_pubsub.listen(): message_handler(message) except (ConnectionError, KeyboardInterrupt): xmpp.disconnect(wait=True) return False else: return False
def doPlaylist(): loop = Loop.get_current_loop() print os.path.join(get_path(rfk.CONFIG.get('liquidsoap', 'looppath')), loop.filename)
def file_exists(self): if self.filename is None: return False return os.path.exists(os.path.join(get_path(CONFIG.get('liquidsoap', 'looppath')), self.filename))
def _get_template_path(template): return os.path.join(get_path(os.path.join('rfk', 'templates', 'liquidsoap', template), internal=True))
def file_exists(self): if self.filename is None: return False return os.path.exists( os.path.join(get_path(CONFIG.get('liquidsoap', 'looppath')), self.filename))
def liquidsoap_start(): returncode = call(os.path.join(get_path('bin'),'rfk-liquidsoap'), env=os.environ.copy()) return jsonify({'status': returncode})
def liquidsoap_start(): returncode = call(os.path.join(get_path('bin'), 'rfk-liquidsoap'), env=os.environ.copy()) return jsonify({'status': returncode})
def _get_template_path(template): return os.path.join( get_path(os.path.join('rfk', 'templates', 'liquidsoap', template), internal=True))