CC-5990, CC-5991 - Python cleanup, removed need for /usr/lib/airtime

This commit is contained in:
Duncan Sommerville 2015-01-27 18:43:36 -05:00
parent cd102b984b
commit 875a9dfd8b
115 changed files with 248 additions and 212 deletions

View File

@ -124,7 +124,7 @@ function checkRMQConnection() {
* @return boolean true if airtime-media-monitor is running * @return boolean true if airtime-media-monitor is running
*/ */
function checkMediaMonitorService() { function checkMediaMonitorService() {
exec("pgrep -fx 'python /usr/lib/airtime/media-monitor/media_monitor.py'", $out, $status); exec("pgrep -f -u www-data media_monitor", $out, $status);
if (array_key_exists(0, $out) && $status == 0) { if (array_key_exists(0, $out) && $status == 0) {
return posix_kill(rtrim($out[0]), 0); return posix_kill(rtrim($out[0]), 0);
} }
@ -137,7 +137,7 @@ function checkMediaMonitorService() {
* @return boolean true if airtime-playout is running * @return boolean true if airtime-playout is running
*/ */
function checkPlayoutService() { function checkPlayoutService() {
exec("pgrep -fx 'python /usr/lib/airtime/pypo/bin/pypocli.py'", $out, $status); exec("pgrep -f -u www-data pypo", $out, $status);
if (array_key_exists(0, $out) && $status == 0) { if (array_key_exists(0, $out) && $status == 0) {
return posix_kill(rtrim($out[0]), 0); return posix_kill(rtrim($out[0]), 0);
} }
@ -150,7 +150,7 @@ function checkPlayoutService() {
* @return boolean true if airtime-liquidsoap is running * @return boolean true if airtime-liquidsoap is running
*/ */
function checkLiquidsoapService() { function checkLiquidsoapService() {
exec("pgrep -fx '/usr/bin/airtime-liquidsoap --verbose -f /usr/lib/airtime/pypo/bin/liquidsoap_scripts/ls_script.liq'", $out, $status); exec("pgrep -f -u www-data airtime-liquidsoap", $out, $status);
if (array_key_exists(0, $out) && $status == 0) { if (array_key_exists(0, $out) && $status == 0) {
return posix_kill(rtrim($out[0]), 0); return posix_kill(rtrim($out[0]), 0);
} }

33
install
View File

@ -252,7 +252,10 @@ if [ -f /etc/airtime/airtime.conf ]; then
will be moved to /etc/airtime/airtime.conf.tmp" will be moved to /etc/airtime/airtime.conf.tmp"
# If we don't remove the existing python files in /usr/lib and the # If we don't remove the existing python files in /usr/lib and the
# /etc/init.d startup scripts, services won't work properly # /etc/init.d startup scripts, services won't work properly
rm -rf /usr/lib/airtime/ if [ -d /usr/lib/airtime/ ]; then
rm -rf /usr/lib/airtime/
fi
rm /etc/init.d/airtime-* rm /etc/init.d/airtime-*
if [ "$apache" = "t" ]; then if [ "$apache" = "t" ]; then
@ -353,7 +356,7 @@ if [ "$icecast" = "t" ]; then
verbose "\n * Enabling Icecast 2..." verbose "\n * Enabling Icecast 2..."
sed -i 's/ENABLE=false/ENABLE=true/g' /etc/default/icecast2 sed -i 's/ENABLE=false/ENABLE=true/g' /etc/default/icecast2
set +e set +e
service icecast2 start loudCmd "service icecast2 start"
set -e set -e
verbose "...Done" verbose "...Done"
fi fi
@ -367,38 +370,24 @@ loudCmd "apt-get -y --force-yes install liquidsoap python python-pip"
loudCmd "pip install setuptools" loudCmd "pip install setuptools"
verbose "...Done" verbose "...Done"
verbose "\n * Creating /usr/lib/airtime..."
mkdir -p /usr/lib/airtime
verbose "...Done"
verbose "\n * Creating /run/airtime..." verbose "\n * Creating /run/airtime..."
mkdir -p /run/airtime mkdir -p /run/airtime
chmod 755 /run/airtime chmod 755 /run/airtime
chown -R ${web_user}:${web_user} /run/airtime chown -R ${web_user}:${web_user} /run/airtime
verbose "...Done" verbose "...Done"
verbose "\n * Copying logging files..." verbose "\n * Installing log writer..."
cp -R ${AIRTIMEROOT}/python_apps/std_err_override /usr/lib/airtime/ loudCmd "python ${AIRTIMEROOT}/python_apps/std_err_override/setup.py install"
verbose "...Done" verbose "...Done"
verbose "\n * Copying API client files..." verbose "\n * Installing API client..."
cp -R ${AIRTIMEROOT}/python_apps/api_clients /usr/lib/airtime/ loudCmd "python ${AIRTIMEROOT}/python_apps/api_clients/setup.py install"
verbose "...Done"
verbose "\n * Copying media-monitor files..."
cp -R ${AIRTIMEROOT}/python_apps/media-monitor/media-monitor /usr/lib/airtime/
cp -R ${AIRTIMEROOT}/python_apps/media-monitor/media-monitor2 /usr/lib/airtime/media-monitor/mm2
verbose "...Done" verbose "...Done"
verbose "\n * Installing media-monitor..." verbose "\n * Installing media-monitor..."
loudCmd "python ${AIRTIMEROOT}/python_apps/media-monitor/setup.py install" loudCmd "python ${AIRTIMEROOT}/python_apps/media-monitor/setup.py install"
verbose "...Done" verbose "...Done"
verbose "\n * Copying pypo files..."
mkdir -p /usr/lib/airtime/pypo
cp -R ${AIRTIMEROOT}/python_apps/pypo/pypo /usr/lib/airtime/pypo/bin/
verbose "...Done"
verbose "\n * Installing pypo..." verbose "\n * Installing pypo..."
loudCmd "python ${AIRTIMEROOT}/python_apps/pypo/setup.py install" loudCmd "python ${AIRTIMEROOT}/python_apps/pypo/setup.py install"
verbose "...Done" verbose "...Done"
@ -425,7 +414,7 @@ if [ ! -d /var/log/airtime ]; then
verbose "\n * Copying logrotate files..." verbose "\n * Copying logrotate files..."
cp ${AIRTIMEROOT}/airtime_mvc/build/airtime-php.logrotate /etc/logrotate.d/airtime-php cp ${AIRTIMEROOT}/airtime_mvc/build/airtime-php.logrotate /etc/logrotate.d/airtime-php
cp /usr/lib/airtime/pypo/bin/liquidsoap_scripts/airtime-liquidsoap.logrotate /etc/logrotate.d/airtime-liquidsoap cp ${AIRTIMEROOT}/python_apps/pypo/pypo/liquidsoap_scripts/airtime-liquidsoap.logrotate /etc/logrotate.d/airtime-liquidsoap
fi fi
verbose "\n * Setting permissions on /var/log/airtime..." verbose "\n * Setting permissions on /var/log/airtime..."
@ -434,9 +423,7 @@ chown -R ${web_user}:${web_user} /var/log/airtime/
verbose "\n * Setting permissions on /var/tmp/airtime..." verbose "\n * Setting permissions on /var/tmp/airtime..."
chmod -R a+x /var/tmp/airtime chmod -R a+x /var/tmp/airtime
chmod 755 /usr/lib/airtime/pypo/bin/liquidsoap_scripts/notify.sh
chown -R ${web_user}:${web_user} /var/tmp/airtime/ chown -R ${web_user}:${web_user} /var/tmp/airtime/
chown -R ${web_user}:${web_user} /usr/lib/airtime/
loud "\n-----------------------------------------------------" loud "\n-----------------------------------------------------"
loud " * Installing PHP * " loud " * Installing PHP * "

View File

@ -0,0 +1,33 @@
from setuptools import setup
from subprocess import call
import sys
import os
script_path = os.path.dirname(os.path.realpath(__file__))
print script_path
os.chdir(script_path)
setup(name='api_clients',
version='1.0',
description='Airtime API Client',
url='http://github.com/sourcefabric/Airtime',
author='sourcefabric',
license='AGPLv3',
packages=['api_clients'],
scripts=[],
install_requires=[
# 'amqplib',
# 'anyjson',
# 'argparse',
'configobj'
# 'docopt',
# 'kombu',
# 'mutagen',
# 'poster',
# 'PyDispatcher',
# 'pyinotify',
# 'pytz',
# 'wsgiref'
],
zip_safe=False,
data_files=[])

View File

@ -2,8 +2,6 @@
exec 2>&1 exec 2>&1
cd /usr/lib/airtime/media-monitor/
set +e set +e
cat /etc/default/locale | grep -i "LANG=.*UTF-\?8" cat /etc/default/locale | grep -i "LANG=.*UTF-\?8"
set -e set -e
@ -12,8 +10,6 @@ if [ "$?" != "0" ]; then
exit 1 exit 1
fi fi
export PYTHONPATH=/usr/lib/airtime/:/usr/lib/airtime/media-monitor/airtimefilemonitor/:\
/usr/lib/airtime/media-monitor/mm2/:/usr/lib/airtime/std_err_override/:/usr/lib/airtime/api_clients:$PYTHONPATH
export LC_ALL=`cat /etc/default/locale | grep "LANG=" | cut -d= -f2 | tr -d "\n\""` export LC_ALL=`cat /etc/default/locale | grep "LANG=" | cut -d= -f2 | tr -d "\n\""`
exec python /usr/lib/airtime/media-monitor/media_monitor.py > /var/log/airtime/media-monitor/py-interpreter.log 2>&1 exec python -m media_monitor > /var/log/airtime/media-monitor/py-interpreter.log 2>&1

View File

@ -1,10 +1,11 @@
import logging import logging
import time import time
import sys import sys
import os
import mm2.mm2 as mm2 import mm2.mm2 as mm2
from std_err_override import LogWriter from std_err_override import LogWriter
global_cfg = '/etc/airtime/airtime.conf' global_cfg = '/etc/airtime/airtime.conf'
logging_cfg = '/usr/lib/airtime/media-monitor/logging.cfg' logging_cfg = os.path.join(os.path.dirname(__file__), 'logging.cfg')
mm2.main( global_cfg, logging_cfg ) mm2.main( global_cfg, logging_cfg )

View File

@ -1,8 +1,8 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import media.metadata.process as md import process as md
import re import re
from os.path import normpath from os.path import normpath
from media.monitor.pure import format_length, file_md5, is_airtime_recorded, \ from ..monitor.pure import format_length, file_md5, is_airtime_recorded, \
no_extension_basename no_extension_basename
defs_loaded = False defs_loaded = False

View File

@ -1,11 +1,11 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from contextlib import contextmanager from contextlib import contextmanager
from media.monitor.pure import truncate_to_value, truncate_to_length, toposort from ..monitor.pure import truncate_to_value, truncate_to_length, toposort
from os.path import normpath from os.path import normpath
from media.monitor.exceptions import BadSongFile from ..monitor.exceptions import BadSongFile
from media.monitor.log import Loggable from ..monitor.log import Loggable
import media.monitor.pure as mmp from ..monitor import pure as mmp
from collections import namedtuple from collections import namedtuple
import mutagen import mutagen
import subprocess import subprocess
import json import json

View File

@ -1,22 +1,21 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from kombu.messaging import Exchange, Queue, Consumer from kombu.messaging import Exchange, Queue, Consumer
from kombu.connection import BrokerConnection from kombu.connection import BrokerConnection
from kombu.simple import SimpleQueue from kombu.simple import SimpleQueue
from os.path import normpath from os.path import normpath
import json import json
import os import os
import copy import copy
import time import time
from media.monitor.exceptions import BadSongFile, InvalidMetadataElement from exceptions import BadSongFile, InvalidMetadataElement, DirectoryIsNotListed
from media.monitor.metadata import Metadata from metadata import Metadata
from media.monitor.log import Loggable from log import Loggable
from media.monitor.syncdb import AirtimeDB from syncdb import AirtimeDB
from media.monitor.exceptions import DirectoryIsNotListed from bootstrap import Bootstrapper
from media.monitor.bootstrap import Bootstrapper
from media.saas.thread import apc, user from ..saas.thread import apc, user
class AirtimeNotifier(Loggable): class AirtimeNotifier(Loggable):
""" """

View File

@ -1,9 +1,9 @@
import os import os
from pydispatch import dispatcher from pydispatch import dispatcher
from media.monitor.events import NewFile, DeleteFile, ModifyFile from events import NewFile, DeleteFile, ModifyFile
from media.monitor.log import Loggable from log import Loggable
from media.saas.thread import getsig from ..saas.thread import getsig
import media.monitor.pure as mmp import pure as mmp
class Bootstrapper(Loggable): class Bootstrapper(Loggable):
""" """

View File

@ -3,8 +3,8 @@ import os
import copy import copy
from configobj import ConfigObj from configobj import ConfigObj
from media.monitor.exceptions import NoConfigFile, ConfigAccessViolation from exceptions import NoConfigFile, ConfigAccessViolation
import media.monitor.pure as mmp import pure as mmp
class MMConfig(object): class MMConfig(object):
def __init__(self, path): def __init__(self, path):

View File

@ -1,5 +1,5 @@
from media.monitor.log import Loggable from log import Loggable
from media.monitor.events import DeleteFile from events import DeleteFile
class EventContractor(Loggable): class EventContractor(Loggable):
def __init__(self): def __init__(self):

View File

@ -1,7 +1,7 @@
import socket import socket
import time import time
from media.monitor.log import Loggable from log import Loggable
from media.monitor.toucher import RepeatTimer from toucher import RepeatTimer
from amqplib.client_0_8.exceptions import AMQPConnectionException from amqplib.client_0_8.exceptions import AMQPConnectionException
class EventDrainer(Loggable): class EventDrainer(Loggable):

View File

@ -2,12 +2,12 @@
import os import os
import abc import abc
import re import re
import media.monitor.pure as mmp import pure as mmp
from media.monitor.pure import LazyProperty from pure import LazyProperty
from media.monitor.metadata import Metadata from metadata import Metadata
from media.monitor.log import Loggable from log import Loggable
from media.monitor.exceptions import BadSongFile from exceptions import BadSongFile
from media.saas.thread import getsig, user from ..saas.thread import getsig, user
class PathChannel(object): class PathChannel(object):
""" Simple struct to hold a 'signal' string and a related 'path'. """ Simple struct to hold a 'signal' string and a related 'path'.

View File

@ -2,9 +2,9 @@
from pydispatch import dispatcher from pydispatch import dispatcher
import abc import abc
from media.monitor.log import Loggable from log import Loggable
from media.saas.thread import getsig from ..saas.thread import getsig
import media.monitor.pure as mmp import pure as mmp
# Defines the handle interface # Defines the handle interface
class Handles(object): class Handles(object):

View File

@ -3,13 +3,13 @@ import pyinotify
from pydispatch import dispatcher from pydispatch import dispatcher
from functools import wraps from functools import wraps
import media.monitor.pure as mmp import pure as mmp
from media.monitor.pure import IncludeOnly from pure import IncludeOnly
from media.monitor.events import OrganizeFile, NewFile, MoveFile, DeleteFile, \ from events import OrganizeFile, NewFile, MoveFile, DeleteFile, \
DeleteDir, MoveDir,\ DeleteDir, MoveDir,\
DeleteDirWatch DeleteDirWatch
from media.monitor.log import Loggable from log import Loggable
from media.saas.thread import getsig, user from ..saas.thread import getsig, user
# Note: Because of the way classes that inherit from pyinotify.ProcessEvent # Note: Because of the way classes that inherit from pyinotify.ProcessEvent
# interact with constructors. you should only instantiate objects from them # interact with constructors. you should only instantiate objects from them
# using keyword arguments. For example: # using keyword arguments. For example:

View File

@ -1,7 +1,7 @@
import logging import logging
import abc import abc
import traceback import traceback
from media.monitor.pure import LazyProperty from pure import LazyProperty
appname = 'root' appname = 'root'

View File

@ -1,16 +1,16 @@
import pyinotify import pyinotify
import time import time
import os import os
from pydispatch import dispatcher from pydispatch import dispatcher
from os.path import normpath from os.path import normpath
from media.monitor.events import PathChannel from events import PathChannel
from media.monitor.log import Loggable from log import Loggable
from media.monitor.listeners import StoreWatchListener, OrganizeListener from listeners import StoreWatchListener, OrganizeListener
from media.monitor.handler import ProblemFileHandler from handler import ProblemFileHandler
from media.monitor.organizer import Organizer from organizer import Organizer
from media.saas.thread import InstanceInheritingThread, getsig from ..saas.thread import InstanceInheritingThread, getsig
import media.monitor.pure as mmp import pure as mmp
class ManagerTimeout(InstanceInheritingThread,Loggable): class ManagerTimeout(InstanceInheritingThread,Loggable):

View File

@ -2,17 +2,17 @@
import mutagen import mutagen
import os import os
import copy import copy
from mutagen.easymp4 import EasyMP4KeyError from mutagen.easymp4 import EasyMP4KeyError
from mutagen.easyid3 import EasyID3KeyError from mutagen.easyid3 import EasyID3KeyError
from media.monitor.exceptions import BadSongFile, InvalidMetadataElement from exceptions import BadSongFile, InvalidMetadataElement
from media.monitor.log import Loggable from log import Loggable
from media.monitor.pure import format_length from pure import format_length
import media.monitor.pure as mmp import pure as mmp
# emf related stuff # emf related stuff
from media.metadata.process import global_reader from ..metadata.process import global_reader
import media.metadata.definitions as defs from ..metadata import definitions as defs
defs.load_definitions() defs.load_definitions()
""" """

View File

@ -1,12 +1,12 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import media.monitor.pure as mmp import pure as mmp
from media.monitor.handler import ReportHandler from handler import ReportHandler
from media.monitor.log import Loggable from log import Loggable
from media.monitor.exceptions import BadSongFile from exceptions import BadSongFile
from media.monitor.events import OrganizeFile from events import OrganizeFile
from pydispatch import dispatcher from pydispatch import dispatcher
from os.path import dirname from os.path import dirname
from media.saas.thread import getsig, user from ..saas.thread import getsig, user
import os.path import os.path
class Organizer(ReportHandler,Loggable): class Organizer(ReportHandler,Loggable):

View File

@ -1,5 +1,5 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from media.monitor.log import Loggable from log import Loggable
class Owner(Loggable): class Owner(Loggable):
def __init__(self): def __init__(self):

View File

@ -21,7 +21,7 @@ try: from functools import reduce
except: pass except: pass
from configobj import ConfigObj from configobj import ConfigObj
from media.monitor.exceptions import FailedToSetLocale, FailedToCreateDir from exceptions import FailedToSetLocale, FailedToCreateDir
supported_extensions = [u"mp3", u"ogg", u"oga", u"flac", u"wav", supported_extensions = [u"mp3", u"ogg", u"oga", u"flac", u"wav",
u'm4a', u'mp4', 'opus'] u'm4a', u'mp4', 'opus']

View File

@ -1,8 +1,8 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from media.monitor.exceptions import BadSongFile from exceptions import BadSongFile
from media.monitor.log import Loggable from log import Loggable
from media.saas.thread import apc, InstanceInheritingThread from ..saas.thread import apc, InstanceInheritingThread
class ThreadedRequestSync(InstanceInheritingThread, Loggable): class ThreadedRequestSync(InstanceInheritingThread, Loggable):
def __init__(self, rs): def __init__(self, rs):

View File

@ -1,10 +1,10 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import os import os
from media.monitor.log import Loggable from log import Loggable
from media.monitor.exceptions import NoDirectoryInAirtime from exceptions import NoDirectoryInAirtime
from media.saas.thread import user from ..saas.thread import user
from os.path import normpath, join from os.path import normpath, join
import media.monitor.pure as mmp import pure as mmp
class AirtimeDB(Loggable): class AirtimeDB(Loggable):
def __init__(self, apc, reload_now=True): def __init__(self, apc, reload_now=True):

View File

@ -1,9 +1,9 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import media.monitor.pure as mmp import pure as mmp
import os import os
from media.monitor.log import Loggable from log import Loggable
from media.monitor.exceptions import CouldNotCreateIndexFile from exceptions import CouldNotCreateIndexFile
from media.saas.thread import InstanceInheritingThread from ..saas.thread import InstanceInheritingThread
class Toucher(Loggable): class Toucher(Loggable):
""" """

View File

@ -2,13 +2,13 @@
import time import time
import copy import copy
from media.monitor.handler import ReportHandler from handler import ReportHandler
from media.monitor.log import Loggable from log import Loggable
from media.monitor.exceptions import BadSongFile from exceptions import BadSongFile
from media.monitor.eventcontractor import EventContractor from eventcontractor import EventContractor
from media.monitor.events import EventProxy from events import EventProxy
from media.monitor.request import ThreadedRequestSync, RequestSync from request import ThreadedRequestSync, RequestSync
from media.saas.thread import InstanceInheritingThread, getsig from ..saas.thread import InstanceInheritingThread, getsig
class TimeoutWatcher(InstanceInheritingThread,Loggable): class TimeoutWatcher(InstanceInheritingThread,Loggable):
""" """

View File

@ -1,12 +1,12 @@
import os import os
from os.path import join, basename, dirname from os.path import join, basename, dirname
from media.monitor.exceptions import NoConfigFile from ..monitor.exceptions import NoConfigFile
from media.monitor.pure import LazyProperty from ..monitor.pure import LazyProperty
from media.monitor.config import MMConfig from ..monitor.config import MMConfig
from media.monitor.owners import Owner from ..monitor.owners import Owner
from media.monitor.events import EventRegistry from ..monitor.events import EventRegistry
from media.monitor.listeners import FileMediator from ..monitor.listeners import FileMediator
from api_clients.api_client import AirtimeApiClient from api_clients.api_client import AirtimeApiClient
# poor man's phantom types... # poor man's phantom types...

View File

@ -2,21 +2,21 @@ import os, sys
import logging import logging
import logging.config import logging.config
import media.monitor.pure as mmp from ..monitor import pure as mmp
from media.monitor.exceptions import FailedToObtainLocale, FailedToSetLocale from ..monitor.exceptions import FailedToObtainLocale, FailedToSetLocale
from media.monitor.log import get_logger, setup_logging from ..monitor.log import get_logger, setup_logging
from std_err_override import LogWriter from std_err_override import LogWriter
from media.saas.thread import InstanceThread, user, apc, getsig from ..saas.thread import InstanceThread, user, apc, getsig
from media.monitor.log import Loggable from ..monitor.log import Loggable
from media.monitor.exceptions import CouldNotCreateIndexFile from ..monitor.exceptions import CouldNotCreateIndexFile
from media.monitor.toucher import ToucherThread from ..monitor.toucher import ToucherThread
from media.monitor.airtime import AirtimeNotifier, AirtimeMessageReceiver from ..monitor.airtime import AirtimeNotifier, AirtimeMessageReceiver
from media.monitor.watchersyncer import WatchSyncer from ..monitor.watchersyncer import WatchSyncer
from media.monitor.eventdrainer import EventDrainer from ..monitor.eventdrainer import EventDrainer
from media.monitor.manager import Manager from ..monitor.manager import Manager
from media.monitor.syncdb import AirtimeDB from ..monitor.syncdb import AirtimeDB
from media.saas.airtimeinstance import AirtimeInstance from airtimeinstance import AirtimeInstance
class MM2(InstanceThread, Loggable): class MM2(InstanceThread, Loggable):

View File

@ -34,7 +34,11 @@ setup(name='airtime-media-monitor',
url='http://github.com/sourcefabric/Airtime', url='http://github.com/sourcefabric/Airtime',
author='sourcefabric', author='sourcefabric',
license='AGPLv3', license='AGPLv3',
packages=['media-monitor', 'media-monitor2'], packages=['media_monitor', 'mm2', 'mm2.configs',
'mm2.media', 'mm2.media.monitor',
'mm2.media.metadata', 'mm2.media.saas'
],
package_data={'': ['*.cfg']},
scripts=['bin/airtime-media-monitor'], scripts=['bin/airtime-media-monitor'],
install_requires=[ install_requires=[
'amqplib', 'amqplib',

View File

@ -1,38 +1,3 @@
#!/bin/bash -e #!/bin/bash -e
debug="f" exec python -m liquidsoap 2>&1
showhelp () {
echo "Usage: airtime-liquidsoap [options]
--help|-h Displays usage information.
--debug|-d Print error messages to console"
}
set -- $(getopt -l help,debug "hd" "$@")
while [ $# -gt 0 ]
do
case "$1" in
(-h|--help) showhelp; exit 0;;
(-d|--debug) debug="t";;
(--) shift; break;;
(-*) echo "$0: error - unrecognized option $1" 1>&2; exit 1;;
(*) break;;
esac
shift
done
export HOME="/var/tmp/airtime/pypo/"
if [ "$debug" = "t" ]; then
ls_path="/usr/bin/airtime-liquidsoap --verbose -f --debug"
else
ls_path="/usr/bin/airtime-liquidsoap --verbose -f"
fi
export PYTHONPATH=/usr/lib/airtime/:/usr/lib/airtime/pypo/bin/:/usr/lib/airtime/std_err_override/:/usr/lib/airtime/api_clients:$PYTHONPATH
ls_param="/usr/lib/airtime/pypo/bin/liquidsoap_scripts/ls_script.liq"
cd /usr/lib/airtime/pypo/bin/liquidsoap_scripts
python generate_liquidsoap_cfg.py
exec ${ls_path} ${ls_param} 2>&1

View File

@ -9,8 +9,7 @@ if [ "$?" != "0" ]; then
fi fi
export HOME="/var/tmp/airtime/pypo/" export HOME="/var/tmp/airtime/pypo/"
export PYTHONPATH=/usr/lib/airtime/:/usr/lib/airtime/pypo/bin/:/usr/lib/airtime/std_err_override/:/usr/lib/airtime/api_clients:$PYTHONPATH
export LC_ALL=`cat /etc/default/locale | grep "LANG=" | cut -d= -f2 | tr -d "\n\""` export LC_ALL=`cat /etc/default/locale | grep "LANG=" | cut -d= -f2 | tr -d "\n\""`
export TERM=xterm export TERM=xterm
exec python /usr/lib/airtime/pypo/bin/pypocli.py > /var/log/airtime/pypo/py-interpreter.log 2>&1 exec python -m pypo > /var/log/airtime/pypo/py-interpreter.log 2>&1

View File

@ -1,3 +1,4 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import traceback import traceback

View File

View File

@ -0,0 +1,27 @@
""" Runs Airtime liquidsoap
"""
import argparse
import os
import generate_liquidsoap_cfg
PYPO_HOME = '/var/tmp/airtime/pypo/'
def run():
'''Entry-point for this application'''
print "Airtime Liquidsoap"
parser = argparse.ArgumentParser()
parser.add_argument("-d", "--debug", help="run in debug mode", action="store_true")
args = parser.parse_args()
os.environ["HOME"] = PYPO_HOME
generate_liquidsoap_cfg.run()
script_path = os.path.join(os.path.dirname(__file__), 'ls_script.liq')
if args.debug:
os.execl('/usr/bin/liquidsoap', 'airtime-liquidsoap', script_path, '--verbose', '-f', '--debug')
else:
os.execl('/usr/bin/liquidsoap', 'airtime-liquidsoap', script_path, '--verbose', '-f')
run()

View File

@ -25,24 +25,25 @@ def generate_liquidsoap_config(ss):
fh.write('log_file = "/var/log/airtime/pypo-liquidsoap/<script>.log"\n') fh.write('log_file = "/var/log/airtime/pypo-liquidsoap/<script>.log"\n')
fh.close() fh.close()
logging.basicConfig(format='%(message)s') def run():
attempts = 0 logging.basicConfig(format='%(message)s')
max_attempts = 10 attempts = 0
successful = False max_attempts = 10
successful = False
while not successful:
try: while not successful:
ac = AirtimeApiClient(logging.getLogger()) try:
ss = ac.get_stream_setting() ac = AirtimeApiClient(logging.getLogger())
generate_liquidsoap_config(ss) ss = ac.get_stream_setting()
successful = True generate_liquidsoap_config(ss)
except Exception, e: successful = True
if attempts == max_attempts: except Exception, e:
print "Unable to connect to the Airtime server." if attempts == max_attempts:
logging.error(str(e)) print "Unable to connect to the Airtime server."
logging.error("traceback: %s", traceback.format_exc()) logging.error(str(e))
sys.exit(1) logging.error("traceback: %s", traceback.format_exc())
else: sys.exit(1)
time.sleep(3) else:
attempts += 1 time.sleep(3)
attempts += 1

Some files were not shown because too many files have changed in this diff Show More