CC-5990, CC-5991 - Python cleanup, removed need for /usr/lib/airtime
This commit is contained in:
parent
cd102b984b
commit
875a9dfd8b
|
@ -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
33
install
|
@ -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 * "
|
||||||
|
|
|
@ -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=[])
|
|
@ -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
|
||||||
|
|
|
@ -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 )
|
|
@ -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
|
|
@ -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
|
|
@ -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):
|
||||||
"""
|
"""
|
|
@ -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):
|
||||||
"""
|
"""
|
|
@ -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):
|
|
@ -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):
|
|
@ -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):
|
|
@ -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'.
|
|
@ -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):
|
|
@ -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:
|
|
@ -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'
|
||||||
|
|
|
@ -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):
|
|
@ -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()
|
||||||
|
|
||||||
"""
|
"""
|
|
@ -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):
|
|
@ -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):
|
|
@ -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']
|
|
@ -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):
|
|
@ -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):
|
|
@ -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):
|
||||||
"""
|
"""
|
|
@ -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):
|
||||||
"""
|
"""
|
|
@ -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...
|
|
@ -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):
|
||||||
|
|
|
@ -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',
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import traceback
|
import traceback
|
||||||
|
|
|
@ -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()
|
|
@ -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
Loading…
Reference in New Issue