diff --git a/utils/airtime-import/airtime-import b/utils/airtime-import/airtime-import deleted file mode 100755 index 4309185b4..000000000 --- a/utils/airtime-import/airtime-import +++ /dev/null @@ -1,410 +0,0 @@ -#!/usr/bin/python2 import sys -import json -import logging -import os -import shutil -from optparse import OptionParser, OptionValueError - -import commands -from libretime_api_client import api_client as apc -from configobj import ConfigObj - -# sys.path.append('/usr/lib/airtime/media-monitor/mm2/') -from mm2.media.monitor.pure import is_file_supported - -# create logger -logger = logging.getLogger() - -# no logging -ch = logging.StreamHandler() -logging.disable(50) - -# add ch to logger -logger.addHandler(ch) - -if os.geteuid() != 0: - print "Must be a root user." - sys.exit() - -# loading config file -try: - config = ConfigObj("/etc/airtime/airtime.conf") -except Exception, e: - print ("Error loading config file: %s", e) - sys.exit() - -api_client = apc.AirtimeApiClient(config) - -# helper functions -# copy or move files -# flag should be 'copy' or 'move' -def copy_or_move_files_to(paths, dest, flag): - try: - for path in paths: - if path[0] == "/" or path[0] == "~": - path = os.path.realpath(path) - else: - path = currentDir + path - path = apc.encode_to(path, "utf-8") - dest = apc.encode_to(dest, "utf-8") - if os.path.exists(path): - if os.path.isdir(path): - path = format_dir_string(path) - # construct full path - sub_path = [] - for temp in os.listdir(path): - sub_path.append(path + temp) - copy_or_move_files_to(sub_path, dest, flag) - elif os.path.isfile(path): - # copy file to dest - if is_file_supported(path): - destfile = dest + os.path.basename(path) - if flag == "copy": - print "Copying %(src)s to %(dest)s..." % { - "src": path, - "dest": destfile, - } - shutil.copyfile(path, destfile) - elif flag == "move": - print "Moving %(src)s to %(dest)s..." % { - "src": path, - "dest": destfile, - } - shutil.move(path, destfile) - else: - print "Cannot find file or path: %s" % path - except Exception as e: - print "Error: ", e - - -def format_dir_string(path): - if path[-1] != "/": - path = path + "/" - return path - - -def helper_get_stor_dir(): - try: - res = api_client.list_all_watched_dirs() - except Exception, e: - return res - - if res["dirs"]["1"][-1] != "/": - out = res["dirs"]["1"] + "/" - return out - else: - return res["dirs"]["1"] - - -def checkOtherOption(args): - for i in args: - if i[0] == "-": - return True - - -def errorIfMultipleOption(args, msg=""): - if checkOtherOption(args): - if msg != "": - raise OptionValueError(msg) - else: - raise OptionValueError("This option cannot be combined with other options") - - -def printHelp(): - storage_dir = helper_get_stor_dir() - if storage_dir is None: - storage_dir = "Unknown" - else: - storage_dir += "imported/" - print """ -======================== - Airtime Import Script -======================== -There are two ways to import audio files into Airtime: - -1) Use airtime-import to copy or move files into the storage folder. - - Copied or moved files will be placed into the folder: - %s - - Files will be automatically organized into the structure - "Artist/Album/TrackNumber-TrackName-Bitrate.file_extension". - -2) Use airtime-import to add a folder to the Airtime library ("watch" a folder). - - All the files in the watched folder will be imported to Airtime and the - folder will be monitored to automatically detect any changes. Hence any - changes done in the folder(add, delete, edit a file) will trigger - updates in Airtime library. -""" % storage_dir - parser.print_help() - print "" - - -def CopyAction(option, opt, value, parser): - errorIfMultipleOption(parser.rargs) - if len(parser.rargs) == 0: - raise OptionValueError( - "No argument found. This option requires at least one argument." - ) - stor = helper_get_stor_dir() - if stor is None: - print "Unable to connect to the Airtime server." - return - dest = stor + "organize/" - copy_or_move_files_to(parser.rargs, dest, "copy") - - -def MoveAction(option, opt, value, parser): - errorIfMultipleOption(parser.rargs) - if len(parser.rargs) == 0: - raise OptionValueError( - "No argument found. This option requires at least one argument." - ) - stor = helper_get_stor_dir() - if stor is None: - exit("Unable to connect to the Airtime server.") - dest = stor + "organize/" - copy_or_move_files_to(parser.rargs, dest, "move") - - -def WatchAddAction(option, opt, value, parser): - errorIfMultipleOption(parser.rargs) - if len(parser.rargs) > 1: - raise OptionValueError( - "Too many arguments. This option requires exactly one argument." - ) - elif len(parser.rargs) == 0: - raise OptionValueError( - "No argument found. This option requires exactly one argument." - ) - path = parser.rargs[0] - if path[0] == "/" or path[0] == "~": - path = os.path.realpath(path) - else: - path = currentDir + path - path = apc.encode_to(path, "utf-8") - if os.path.isdir(path): - # os.chmod(path, 0765) - try: - res = api_client.add_watched_dir(path) - except Exception, e: - exit("Unable to connect to the server.") - # success - if res["msg"]["code"] == 0: - print "%s added to watched folder list successfully" % path - else: - print "Adding a watched folder failed: %s" % res["msg"]["error"] - print "This error most likely caused by wrong permissions" - print "Try fixing this error by chmodding the parent directory(ies)" - else: - print "Given path is not a directory: %s" % path - - -def WatchListAction(option, opt, value, parser): - errorIfMultipleOption(parser.rargs) - if len(parser.rargs) > 0: - raise OptionValueError("This option doesn't take any arguments.") - try: - res = api_client.list_all_watched_dirs() - except Exception, e: - exit("Unable to connect to the Airtime server.") - dirs = res["dirs"].items() - # there will be always 1 which is storage folder - if len(dirs) == 1: - print "No watch folders found" - else: - for key, v in dirs: - if key != "1": - print v - - -def WatchRemoveAction(option, opt, value, parser): - errorIfMultipleOption(parser.rargs) - if len(parser.rargs) > 1: - raise OptionValueError( - "Too many arguments. This option requires exactly one argument." - ) - elif len(parser.rargs) == 0: - raise OptionValueError( - "No argument found. This option requires exactly one argument." - ) - path = parser.rargs[0] - if path[0] == "/" or path[0] == "~": - path = os.path.realpath(path) - else: - path = currentDir + path - path = apc.encode_to(path, "utf-8") - if os.path.isdir(path): - try: - res = api_client.remove_watched_dir(path) - except Exception, e: - exit("Unable to connect to the Airtime server.") - # success - if res["msg"]["code"] == 0: - print "%s removed from watch folder list successfully." % path - else: - print "Removing the watch folder failed: %s" % res["msg"]["error"] - else: - print "The given path is not a directory: %s" % path - - -def StorageSetAction(option, opt, value, parser): - bypass = False - isF = "-f" in parser.rargs - isForce = "--force" in parser.rargs - if isF or isForce: - bypass = True - if isF: - parser.rargs.remove("-f") - if isForce: - parser.rargs.remove("--force") - if not bypass: - errorIfMultipleOption( - parser.rargs, "Only [-f] and [--force] option is allowed with this option." - ) - possibleInput = ["y", "Y", "n", "N"] - confirm = raw_input( - "Are you sure you want to change the storage directory? (y/N)" - ) - confirm = confirm or "N" - while confirm not in possibleInput: - print "Not an acceptable input: %s\n" % confirm - confirm = raw_input( - "Are you sure you want to change the storage directory? (y/N) " - ) - confirm = confirm or "N" - if confirm == "n" or confirm == "N": - sys.exit(1) - - if len(parser.rargs) > 1: - raise OptionValueError( - "Too many arguments. This option requires exactly one argument." - ) - elif len(parser.rargs) == 0: - raise OptionValueError( - "No argument found. This option requires exactly one argument." - ) - - path = parser.rargs[0] - if path[0] == "/" or path[0] == "~": - path = os.path.realpath(path) - else: - path = currentDir + path - path = apc.encode_to(path, "utf-8") - if os.path.isdir(path): - try: - res = api_client.set_storage_dir(path) - except Exception, e: - exit("Unable to connect to the Airtime server.") - # success - if res["msg"]["code"] == 0: - print "Successfully set storage folder to %s" % path - else: - print "Setting storage folder failed: %s" % res["msg"]["error"] - else: - print "The given path is not a directory: %s" % path - - -def StorageGetAction(option, opt, value, parser): - errorIfMultipleOption(parser.rargs) - if len(parser.rargs) > 0: - raise OptionValueError("This option does not take any arguments.") - print helper_get_stor_dir() - - -class OptionValueError(RuntimeError): - def __init__(self, msg): - self.msg = msg - - -usage = """[-c|--copy FILE/DIR [FILE/DIR...]] [-m|--move FILE/DIR [FILE/DIR...]] - [--watch-add DIR] [--watch-list] [--watch-remove DIR] - [--storage-dir-set DIR] [--storage-dir-get]""" - -parser = OptionParser(usage=usage, add_help_option=False) -parser.add_option( - "-c", - "--copy", - action="callback", - callback=CopyAction, - metavar="FILE", - help="Copy FILE(s) into the storage directory.\nYou can specify multiple files or directories.", -) -parser.add_option( - "-m", - "--move", - action="callback", - callback=MoveAction, - metavar="FILE", - help="Move FILE(s) into the storage directory.\nYou can specify multiple files or directories.", -) -parser.add_option( - "--watch-add", - action="callback", - callback=WatchAddAction, - help="Add DIR to the watched folders list.", -) -parser.add_option( - "--watch-list", - action="callback", - callback=WatchListAction, - help="Show the list of folders that are watched.", -) -parser.add_option( - "--watch-remove", - action="callback", - callback=WatchRemoveAction, - help="Remove DIR from the watched folders list.", -) -parser.add_option( - "--storage-dir-set", - action="callback", - callback=StorageSetAction, - help="Set storage dir to DIR.", -) -parser.add_option( - "--storage-dir-get", - action="callback", - callback=StorageGetAction, - help="Show the current storage dir.", -) -parser.add_option( - "-h", - "--help", - dest="help", - action="store_true", - help="show this help message and exit", -) - -# pop "--dir" -# sys.argv.pop(1) -# pop "invoked pwd" -currentDir = os.getcwd() # sys.argv.pop(1)+'/' - -if "-l" in sys.argv or "--link" in sys.argv: - print "\nThe [-l][--link] option is deprecated. Please use the --watch-add option.\nTry 'airtime-import -h' for more detail.\n" - sys.exit() -if "-h" in sys.argv: - printHelp() - sys.exit() -if len(sys.argv) == 1 or "-" not in sys.argv[1]: - printHelp() - sys.exit() - -try: - (option, args) = parser.parse_args() -except Exception, e: - printHelp() - if hasattr(e, "msg"): - print "Error: " + e.msg - else: - print "Error: ", e - sys.exit() -except SystemExit: - printHelp() - sys.exit() - -if option.help: - printHelp() - sys.exit() diff --git a/utils/airtime-log b/utils/airtime-log deleted file mode 100755 index ef7cc7928..000000000 --- a/utils/airtime-log +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env bash -# Absolute path to this script -SCRIPT=$(readlink -f $0) -# Absolute directory this script is in -SCRIPTPATH=$(dirname $SCRIPT) - -php -q $SCRIPTPATH/airtime-log.php "$@" || exit 1 diff --git a/utils/airtime-log.php b/utils/airtime-log.php deleted file mode 100644 index 6c2e15008..000000000 --- a/utils/airtime-log.php +++ /dev/null @@ -1,166 +0,0 @@ - "/var/log/airtime/media-monitor/media-monitor.log", - "recorder" => "/var/log/airtime/pypo/show-recorder.log", - "playout" => "/var/log/airtime/pypo/pypo.log", - "liquidsoap" => "/var/log/airtime/pypo-liquidsoap/ls_script.log", - "web" => "/var/log/airtime/zendphp.log"); - -array_filter($log_files, "file_exists"); - -/** - * Ensures that the user is running this PHP script with root - * permissions. If not running with root permissions, causes the - * script to exit. - */ -function exitIfNotRoot() -{ - // Need to check that we are superuser before running this. - if(posix_geteuid() != 0){ - echo "Must be root user.\n"; - exit(1); - } -} - -function printUsage($userMsg = "") -{ - global $opts; - - $msg = $opts->getUsageMessage(); - if (strlen($userMsg)>0) - echo $userMsg; - echo PHP_EOL."Usage: airtime-log [options]"; - echo substr($msg, strpos($msg, "\n")).PHP_EOL; -} - -function isKeyValid($key){ - global $log_files; - return array_key_exists($key, $log_files); -} - -function viewSpecificLog($key){ - global $log_files; - - if (isKeyValid($key)){ - echo "Viewing $key log\n"; - pcntl_exec(exec("which less"), array($log_files[$key])); - pcntl_wait($status); - } else printUsage(); -} - -function dumpAllLogs(){ - $dateStr = gmdate("Y-m-d-H-i-s"); - - $dir = getcwd(); - - $filename = "$dir/airtime-log-all-$dateStr.tgz"; - echo "Creating Airtime logs tgz file at $filename"; - $command = "tar cfz $filename /var/log/airtime 2>/dev/null"; - exec($command); -} - -function dumpSpecificLog($key){ - global $log_files; - - if (isKeyValid($key)){ - $dateStr = gmdate("Y-m-d-H-i-s"); - - $dir = getcwd(); - - $filename = "$dir/airtime-log-$key-$dateStr.tgz"; - echo "Creating Airtime logs tgz file at $filename"; - $dir = dirname($log_files[$key]); - $command = "tar cfz $filename $dir 2>/dev/null"; - exec($command); - } else printUsage(); -} - -function tailAllLogs(){ - global $log_files; - echo "Tail all Airtime logs"; - pcntl_exec(exec("which multitail"), $log_files); - pcntl_wait($status); -} - -function tailSpecificLog($key){ - global $log_files; - - if (isKeyValid($key)){ - echo "Tail $key log"; - pcntl_exec(exec("which tail"), array("-F", $log_files[$key])); - pcntl_wait($status); - } else printUsage(); -} - -function getAirtimeConf() -{ - $ini = parse_ini_file("/etc/airtime/airtime.conf", true); - - if ($ini === false){ - echo "Error reading /etc/airtime/airtime.conf.".PHP_EOL; - exit; - } - - return $ini; -} - -try { - $keys = implode("|", array_keys($log_files)); - $opts = new Zend_Console_Getopt( - array( - 'view|v=s' => "Display log file\n" - ."\t\t$keys", - 'dump|d-s' => "Collect all log files and compress into a tarball\n" - ."\t\t$keys (ALL by default)", - 'tail|t-s' => "View any new entries appended to log files in real-time\n" - ."\t\t$keys (ALL by default)" - ) - ); - $opts->parse(); -} -catch (Zend_Console_Getopt_Exception $e) { - print $e->getMessage() .PHP_EOL; - printUsage(); - exit(1); -} - -if (isset($opts->v)){ - if ($opts->v === true){ - //Should never get here. Zend_Console_Getopt requires v to provide a string parameter. - } else { - viewSpecificLog($opts->v); - } -} else if (isset($opts->d)){ - if ($opts->d === true){ - dumpAllLogs(); - } else { - dumpSpecificLog($opts->d); - } -} else if (isset($opts->t)){ - if ($opts->t === true){ - tailAllLogs(); - } else { - tailSpecificLog($opts->t); - } -} else { - printUsage(); - exit; -} - -echo PHP_EOL; diff --git a/utils/airtime-silan b/utils/airtime-silan deleted file mode 100755 index 5573cf954..000000000 --- a/utils/airtime-silan +++ /dev/null @@ -1,84 +0,0 @@ -#!/usr/bin/env python3 - -import json -import logging -import os -import subprocess -import sys -import traceback - -from libretime_api_client import api_client as apc -from configobj import ConfigObj - -# create logger -logger = logging.getLogger() - -# no logging -ch = logging.StreamHandler() -logging.disable(50) - -# add ch to logger -logger.addHandler(ch) - -if os.geteuid() != 0: - print "Must be a root user." - sys.exit(1) - -# loading config file -try: - config = ConfigObj("/etc/airtime/airtime.conf") -except Exception, e: - print ("Error loading config file: %s", e) - sys.exit(1) - -api_client = apc.AirtimeApiClient(config) - -try: - # keep getting few rows at a time for current music_dir (stor - # or watched folder). - subtotal = 0 - while True: - # return a list of pairs where the first value is the - # file's database row id and the second value is the - # filepath - files = api_client.get_files_without_silan_value() - total_files = len(files) - if total_files == 0: - break - processed_data = [] - total = 0 - for f in files: - full_path = f["fp"] - # silence detect(set default queue in and out) - try: - command = ["silan", "-b" "-f", "JSON", full_path] - proc = subprocess.Popen(command, stdout=subprocess.PIPE) - out = proc.communicate()[0].strip("\r\n") - info = json.loads(out) - data = {} - data["cuein"] = str("{:f}".format(info["sound"][0][0])) - data["cueout"] = str("{:f}".format(info["sound"][-1][1])) - data["length"] = str("{:f}".format(info["file duration"])) - processed_data.append((f["id"], data)) - total += 1 - if total % 5 == 0: - print "Total %s / %s files has been processed.." % ( - total, - total_files, - ) - except Exception, e: - print e - print traceback.format_exc() - print "Processed: %d songs" % total - subtotal += total - - try: - print api_client.update_cue_values_by_silan(processed_data) - except Exception, e: - print e - print traceback.format_exc() - print "Total %d songs Processed" % subtotal - -except Exception, e: - print e - print traceback.format_exc() diff --git a/utils/airtime-test-soundcard b/utils/airtime-test-soundcard deleted file mode 100755 index f852267a7..000000000 --- a/utils/airtime-test-soundcard +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env bash -#------------------------------------------------------------------------------- -# Copyright (c) 2011 Sourcefabric O.P.S. -# -# This file is part of the Airtime project. -# http://airtime.sourcefabric.org/ -# -# Airtime is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# Airtime is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Airtime; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -#------------------------------------------------------------------------------- -#------------------------------------------------------------------------------- -# This script send data to data collection server -# -# Absolute path to this script -SCRIPT=$(readlink -f $0) -# Absolute directory this script is in -SCRIPTPATH=$(dirname $SCRIPT) - -cd $SCRIPTPATH || exit 1 - -python airtime-test-soundcard.py "$@" || exit 1 diff --git a/utils/airtime-test-soundcard.py b/utils/airtime-test-soundcard.py deleted file mode 100644 index 0da138f25..000000000 --- a/utils/airtime-test-soundcard.py +++ /dev/null @@ -1,89 +0,0 @@ -import getopt -import grp -import os -import pwd -import subprocess -import sys - -""" -we need to run the program as non-root because Liquidsoap refuses to run as root. -It is possible to run change the effective user id (seteuid) before calling Liquidsoap -but this introduces other problems (fake root user is not part of audio group after calling seteuid) -""" -if os.geteuid() == 0: - print "Please run this program as non-root" - sys.exit(1) - - -def printUsage(): - print "airtime-test-soundcard [-v] [-o alsa | ao | oss | portaudio | pulseaudio ] [-h]" - print " Where: " - print " -v verbose mode" - print " -o Linux Sound API (default: alsa)" - print " -h show help menu " - - -def find_liquidsoap_binary(): - """ - Starting with Airtime 2.0, we don't know the exact location of the Liquidsoap - binary because it may have been installed through a debian package. Let's find - the location of this binary. - """ - - rv = subprocess.call("which libretime-liquidsoap > /dev/null", shell=True) - if rv == 0: - return "libretime-liquidsoap" - - return None - - -try: - optlist, args = getopt.getopt(sys.argv[1:], "hvo:") -except getopt.GetoptError, g: - printUsage() - sys.exit(1) - -sound_api_types = set(["alsa", "ao", "oss", "portaudio", "pulseaudio"]) - -verbose = False -sound_api = "alsa" -for o, a in optlist: - if "-v" == o: - verbose = True - if "-o" == o: - if a.lower() in sound_api_types: - sound_api = a.lower() - else: - print "Unknown sound api type\n" - printUsage() - sys.exit(1) - if "-h" == o and len(optlist) == 1: - printUsage() - sys.exit(0) - -try: - print "Sound API: %s" % sound_api - print "Outputting to soundcard. You should be able to hear a monotonous tone. Press ctrl-c to quit." - - liquidsoap_exe = find_liquidsoap_binary() - - if liquidsoap_exe is None: - raise Exception("Liquidsoap not found!") - - command = "%s 'output.%s(sine())'" % (liquidsoap_exe, sound_api) - - if not verbose: - command += " > /dev/null" - - # print command - rv = subprocess.call(command, shell=True) - - # if we reach this point, it means that our subprocess exited without the user - # doing a keyboard interrupt. This means there was a problem outputting to the - # soundcard. Print appropriate message. - print "There was an error using the selected sound API. Please select a different API " + "and run this program again. Use the -h option for help" - -except KeyboardInterrupt, ki: - print "\nExiting" -except Exception, e: - raise diff --git a/utils/airtime-test-stream b/utils/airtime-test-stream deleted file mode 100755 index 1ebc328dc..000000000 --- a/utils/airtime-test-stream +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env bash -#------------------------------------------------------------------------------- -# Copyright (c) 2011 Sourcefabric O.P.S. -# -# This file is part of the Airtime project. -# http://airtime.sourcefabric.org/ -# -# Airtime is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# Airtime is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Airtime; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -#------------------------------------------------------------------------------- -#------------------------------------------------------------------------------- -# This script send data to data collection server -# -# Absolute path to this script -SCRIPT=$(readlink -f $0) -# Absolute directory this script is in -SCRIPTPATH=$(dirname $SCRIPT) - -cd $SCRIPTPATH || exit 1 - -python airtime-test-stream.py "$@" || exit 1 diff --git a/utils/airtime-test-stream.py b/utils/airtime-test-stream.py deleted file mode 100644 index 977d79b03..000000000 --- a/utils/airtime-test-stream.py +++ /dev/null @@ -1,128 +0,0 @@ -import getopt -import grp -import os -import pwd -import subprocess -import sys - -""" -we need to run the program as non-root because Liquidsoap refuses to run as root. -It is possible to run change the effective user id (seteuid) before calling Liquidsoap -but this introduces other problems (fake root user is not part of audio group after calling seteuid) -""" -if os.geteuid() == 0: - print "Please run this program as non-root" - sys.exit(1) - - -def printUsage(): - print "airtime-test-stream [-v] [-o icecast | shoutcast ] [-H hostname] [-P port] [-u username] [-p password] [-m mount]" - print " Where: " - print " -v verbose mode" - print " -o stream server type (default: icecast)" - print " -H hostname (default: localhost) " - print " -P port (default: 8000) " - print " -u user (default: source) " - print " -p password (default: hackme) " - print " -m mount (default: test) " - print " -h show help menu" - - -def find_liquidsoap_binary(): - """ - With libretime 3.0 we are no longer depending upon the libretime-liquidsoap binary - but use a generic install of liquidsoap. This takes care of checking if it is on the - path and will lead to an error otherwise. - """ - - rv = subprocess.call("which liquidsoap > /dev/null", shell=True) - if rv == 0: - return "liquidsoap" - - return None - - -optlist, args = getopt.getopt(sys.argv[1:], "hvo:H:P:u:p:m:") -stream_types = set(["shoutcast", "icecast"]) - -verbose = False -stream_type = "icecast" - -host = "localhost" -port = 8000 -user = "source" -password = "hackme" -mount = "test" - -for o, a in optlist: - if "-v" == o: - verbose = True - if "-o" == o: - if a.lower() in stream_types: - stream_type = a.lower() - else: - print "Unknown stream type\n" - printUsage() - sys.exit(1) - if "-h" == o: - printUsage() - sys.exit(0) - if "-H" == o: - host = a - if "-P" == o: - port = a - if "-u" == o: - user = a - if "-p" == o: - password = a - if "-m" == o: - mount = a - -try: - - print "Protocol: %s " % stream_type - print "Host: %s" % host - print "Port: %s" % port - print "User: %s" % user - print "Password: %s" % password - if stream_type == "icecast": - print "Mount: %s\n" % mount - - url = "http://%s:%s/%s" % (host, port, mount) - print "Outputting to %s streaming server. You should be able to hear a monotonous tone on '%s'. Press ctrl-c to quit." % ( - stream_type, - url, - ) - - liquidsoap_exe = find_liquidsoap_binary() - if liquidsoap_exe is None: - raise Exception("Liquidsoap not found!") - - if stream_type == "icecast": - command = ( - '%s \'output.icecast(%%vorbis, host = "%s", port = %s, user= "%s", password = "%s", mount="%s", sine())\'' - % (liquidsoap_exe, host, port, user, password, mount) - ) - else: - command = ( - '%s \'output.shoutcast(%%mp3, host="%s", port = %s, user= "%s", password = "%s", sine())\'' - % (liquidsoap_exe, host, port, user, password) - ) - - if not verbose: - command += ' 2>/dev/null | grep "failed"' - else: - print command - - # print command - rv = subprocess.call(command, shell=True) - - # if we reach this point, it means that our subprocess exited without the user - # doing a keyboard interrupt. This means there was a problem outputting to the - # stream server. Print appropriate message. - print "There was an error with your stream configuration. Please review your configuration " + "and run this program again. Use the -h option for help" - -except KeyboardInterrupt, ki: - print "\nExiting" -except Exception, e: - raise diff --git a/utils/libretime-backup.sh b/utils/libretime-backup.sh deleted file mode 100755 index 529cc64dd..000000000 --- a/utils/libretime-backup.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env bash - -if [ -z "$1" ]; then - ## Use config - backup_folder=~/libretime_backup/ -else - ## User arg as config - backup_folder=$1 -fi - -airtime_conf_path=/etc/airtime/airtime.conf -uploads_folder=/srv/airtime/stor/ - -psql_db=$(grep dbname ${airtime_conf_path} | awk '{print $3;}') -psql_user=$(grep dbuser ${airtime_conf_path} | awk '{print $3;}') -psql_password=$(grep dbpass ${airtime_conf_path} | awk '{print $3;}') - -## Remove old backup -rm -rf "$backup_folder" -mkdir "$backup_folder" - -## Backup of database - -echo "db: Getting database..." -pg_dump --dbname="postgresql://$psql_user:$psql_password@localhost/$psql_db" > "${backup_folder}database" -echo "db: Complete" - -## Backup of sounds - -mkdir "${backup_folder}uploads/" - -echo "stor : Copying uploaded files..." -rsync -r -a --info=progress2 $uploads_folder "${backup_folder}uploads/" -echo "stor: Complete" - -## Backup of libretime config - -mkdir "${backup_folder}airtime_config/" - -echo "config: Copying config..." -rsync -r -a --info=progress2 /etc/airtime/ "${backup_folder}airtime_config/" -echo "config: Complete" - -date >> "${backup_folder}datelog.txt" diff --git a/utils/rabbitmq-update-pid.sh b/utils/rabbitmq-update-pid.sh deleted file mode 100755 index b46abb060..000000000 --- a/utils/rabbitmq-update-pid.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env bash - -/etc/init.d/rabbitmq-server status | grep "\[{pid" -pid_found="$?" - -if [ "$pid_found" == "0" ]; then - #PID is available in the status message - rabbitmqpid=$(/etc/init.d/rabbitmq-server status | grep "\[{pid" | sed "s/.*,\(.*\)\}.*/\1/") -else - #PID should be available from file - rabbitmqpid=$(sed "s/.*,\(.*\)\}.*/\1/" /var/lib/rabbitmq/pids) -fi - -echo "RabbitMQ PID: $rabbitmqpid" -echo "$rabbitmqpid" > /var/run/airtime/rabbitmq.pid diff --git a/utils/rivendell-converter.sh b/utils/rivendell-converter.sh deleted file mode 100755 index 38f3d071d..000000000 --- a/utils/rivendell-converter.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env bash - -# A bash script to convert all Rivendell's audio-library to MP3, extract meta-tags from Rivendell's -# database and set appropriate tags to each MP3 file. - -# Notes: -# 1 - Rivendell store files in .wav format, airtime uses .mp3 format -# 2 - WAV does not have Meta-tag support so all meta-tags need to be fetched from Rivendell database. - -if [ $# -ne 2 ]; then - echo "usage: $0 " - exit -fi - -#*** MySql data ***# -user="INSERT_MYSQL_USERNAME_HERE" -pass="INSERT_MYSQL_PASSWORD_HERE" -db="Rivendell" #Edit this only if you changed Rivendell's database name :-) -#*** End ***# - -rivendell_dir=$1 -end_dir=$2 - -cd "$rivendell_dir" || (echo "could not cd in $rivendell_dir" && exit 1) - -for file in *; do - lame "$file" -done - -mv "$rivendell_dir"/*.mp3 "$end_dir" -cd "$end_dir" || (echo "could not cd in $end_dir" && exit 1) - -for file in *; do - id=$(echo "$file" | head -c 10) - title=$(mysql -u $user -p$pass -sN -e "SELECT CU.DESCRIPTION FROM CUTS CU, CART CA WHERE CA.NUMBER=CU.CART_NUMBER AND CU.CUT_NAME=\"${id}\"" $db) - artist=$(mysql -u $user -p$pass -sN -e "SELECT CA.ARTIST FROM CUTS CU, CART CA WHERE CA.NUMBER=CU.CART_NUMBER AND CU.CUT_NAME=\"${id}\"" $db) - album=$(mysql -u $user -p$pass -sN -e "SELECT CA.ALBUM FROM CUTS CU, CART CA WHERE CA.NUMBER=CU.CART_NUMBER AND CU.CUT_NAME=\"${id}\"" $db) - year=$(mysql -u $user -p$pass -sN -e "SELECT CA.YEAR FROM CUTS CU, CART CA WHERE CA.NUMBER=CU.CART_NUMBER AND CU.CUT_NAME=\"${id}\"" $db) - id3 -t "$title" -a "$artist" -A "$album" -y "$year" $file - mv "$file" "$artist-$title.mp3" -done - -exit diff --git a/utils/update-postgres-password b/utils/update-postgres-password deleted file mode 100755 index 4051e09c1..000000000 --- a/utils/update-postgres-password +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash - -set -u - -error() { - echo >&2 "error: $*" - exit 1 -} - -# Make sure only root can run our script -(($( id -u) == 0)) || error "this script must be run as root!" - -command -v sudo > /dev/null || error "sudo command not found!" -command -v openssl > /dev/null || error "openssl command not found!" -command -v psql > /dev/null || error "psql command not found!" - -typeset -r DB_USER="airtime" -DB_PASSWORD=$(openssl rand -hex 16) -typeset -r DB_PASSWORD - -echo "Changing password for database user '$DB_USER' to '$DB_PASSWORD'" -sudo -u postgres psql -c "ALTER USER $DB_USER WITH PASSWORD '$DB_PASSWORD';" diff --git a/utils/update-rabbitmq-password b/utils/update-rabbitmq-password deleted file mode 100755 index 1300d5b0c..000000000 --- a/utils/update-rabbitmq-password +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash - -set -u - -error() { - echo >&2 "error: $*" - exit 1 -} - -# Make sure only root can run our script -(($( id -u) == 0)) || error "this script must be run as root!" - -command -v openssl > /dev/null || error "openssl command not found!" -command -v rabbitmqctl > /dev/null || error "rabbitmqctl command not found!" - -typeset -r RMQ_USER="airtime" -RMQ_PASSWORD=$(openssl rand -hex 16) -typeset -r RMQ_PASSWORD - -# RabbitMQ -echo "Changing password for rabbitmq user '$RMQ_USER' to '$RMQ_PASSWORD'" -rabbitmqctl change_password "$RMQ_USER" "$RMQ_PASSWORD" diff --git a/utils/upgrade.py b/utils/upgrade.py deleted file mode 100755 index a76895bce..000000000 --- a/utils/upgrade.py +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/env python3 - -import argparse -import sys - -import ConfigParser -import requests -from urlparse import urlparse - -CONFIG_PATH = "/etc/airtime/airtime.conf" -GENERAL_CONFIG_SECTION = "general" - - -def read_config_file(config_path): - """Parse the application's config file located at config_path.""" - config = ConfigParser.SafeConfigParser() - try: - config.readfp(open(config_path)) - except IOError as e: - print "Failed to open config file at " + config_path + ": " + e.strerror - exit(-1) - except Exception: - print e.strerror - exit(-1) - - return config - - -if __name__ == "__main__": - config = read_config_file(CONFIG_PATH) - api_key = config.get(GENERAL_CONFIG_SECTION, "api_key") - base_url = config.get(GENERAL_CONFIG_SECTION, "base_url") - base_dir = config.get(GENERAL_CONFIG_SECTION, "base_dir") - base_port = config.get(GENERAL_CONFIG_SECTION, "base_port", 80) - action = "upgrade" - station_url = "" - - default_url = "http://%s:%s%s" % (base_url, base_port, base_dir) - - parser = argparse.ArgumentParser() - parser.add_argument( - "--downgrade", help="Downgrade the station", action="store_true" - ) - parser.add_argument( - "station_url", help="station URL", nargs="?", default=default_url - ) - args = parser.parse_args() - - if args.downgrade: - action = "downgrade" - - if args.station_url: - station_url = args.station_url - - # Add http:// if you were lazy and didn't pass a scheme to this script - url = urlparse(station_url) - if not url.scheme: - station_url = "http://%s" % station_url - - print "Requesting %s..." % action - r = requests.get("%s/%s" % (station_url, action), auth=(api_key, "")) - print r.text - r.raise_for_status()