diff options
Diffstat (limited to 'god')
| -rw-r--r--[-rwxr-xr-x] | god/streams/streams | 245 | ||||
| -rw-r--r-- | god/streams/streams.py | 116 | 
2 files changed, 115 insertions, 246 deletions
| diff --git a/god/streams/streams b/god/streams/streams index 80c654ad..65669b2d 100755..100644 --- a/god/streams/streams +++ b/god/streams/streams @@ -1,131 +1,116 @@ -#! /bin/bash -set -euf - -stream_file=/tmp/krebs.stream.current - -HERE=$(dirname $(readlink -f $0)) -URLS=`cat $HERE/stream.db` -CURRENT_STREAM="no stream" #will be set when calling `status` -if [ ! `id -u` -eq "0" ]; then -  exec sudo "$0" "$@" -fi - -#if [ ! `id -u` -eq "0" ]; then -#  echo "we are going sudo..." -#  exec sudo "$0" "$@" -#fi - -function start() { -  # start the given stream von $1 -  REQ=$1 -  tmux start-server  -  if status &>/dev/null ; then -    echo "!! Stream already running!" -    exit 1 -  fi - -  if echo "$URLS" | while read URL NAME; do -    if [ "$NAME" = "$REQ" ];then -      tmux new-session -s streams -n streams -d " -        while sleep 1; do -          echo $NAME > $stream_file -          mplayer $URL -        done -      "   -      echo "** $REQ started" -      exit 1 -    fi -  done; then -    echo "!! Stream '$REQ' not found!" -    exit 1 -  fi -} -function stop() -{ -  #stops every stream -  if status &>/dev/null; then -    status | cut -d\  -f2 | xargs printf "** killing %s\n" -    tmux kill-session -t streams 2>/dev/null || echo "!! killing session failed"  -  else -    echo "** no stream running";  -    return 1 -  fi -} - -function status() -{ -  #tmux has-session -t streams 2>/dev/null -  #RET=$? - -  #tmux list-sessions  2>/dev/null -  #return $RET -  EV="`ps -ef | grep mplayer`" -  if echo "$URLS" | while read URL NAME; do -    if [ "`echo "$EV" | grep \"$URL\"`" ] ;then -      echo "** $NAME running ($URL)" -      exit 1 -    fi -  done; then -    echo "** no stream running" -    return 1 -  else -    return 0 -  fi -} -function current() -{ - -  return 1 -} -function list() -{ -  echo "$URLS" | while read URL NAME ; do -    echo "$NAME : $URL" -  done - -} - -function shorthelp() -{ -    echo "start|stop|restart|status|list [audio stream]" -} -function longhelp() -{ -  B=`basename $0` -  echo -n "Usage: $B " -  shorthelp -  echo "[32;1m get all available streams with [31;1;4m'/$B list'[m -Examples:  -  $B list -  $B start groove -  $B restart deepmix -  $B status -  $B stop" -} - - -case "$1" in -  start) -    start ${2-"`test -f $stream_file && cat $stream_file`"} -    ;; -  stop) -    stop -    ;; -  (switch|restart) -    stop -    start $2 -    ;; -  status) -    status -    exit $? -    ;; -  list) -    list -    ;; -  (--help) +#!/usr/bin/python +import os +import sys +from subprocess import Popen, PIPE + +os.chdir(os.path.dirname(os.path.realpath(sys.argv[0]))) +pidfile = "/tmp/krebs.stream.pid" +url_file = os.environ.get("STREAM_DB", "stream.db") +urls = [] +#urls = [ url,f for (url,f) in open(url_file).readline() ] +for line in open(url_file): +    urls.append(line.split()) +#print urls +mybin = sys.argv[0] +cmd = sys.argv[1] if len(sys.argv) > 1 else "you-are-made-of-stupid" +stream = sys.argv[2] if len(sys.argv) == 3 else "groove" + + +def check_pid(pid): +    """ Check For the existence of a unix pid. """ +    try: +        os.kill(pid, 0) +    except OSError: +        return False +    else: +        return True + + +def urlForStream(stream): +    for url, s in urls: +        if s == stream: +            return url + + +def start(stream): +    ret = running() +    if ret: +        print "!! Stream `%s` already running with pid `%s` !" % \ +                (ret[1], ret[0]) +    else: +        pipe_silent = open('/dev/null', 'w') +        url = urlForStream(stream) +        mpl = Popen(["mplayer", url], +                 stdout=pipe_silent, stderr=pipe_silent).pid +        print >> open(pidfile, "w+"), "%d %s" % (mpl, stream) + + +def stop(): +    ret = running() +    if not ret: +        print "!! No Stream running!" +    else: +        pid, name = ret +        print "** Killing `%s` with pid %s" % (name, pid) +        os.kill(int(pid), 15) +        #if check_pid(int(pid)): +        #    print "!! trying harder to kill process" +        #    os.kill(int(pid), 9) +        os.remove(pidfile) + + +def running(): +    try: +        pid, currstream = open(pidfile).read().split() +        if check_pid(int(pid)): +            return (pid, currstream) +        else: +            print "!! removing stale pidfile" +            os.remove(pidfile) +            raise Exception("Pidfile stale") +    except Exception as e: +        return () + + +def slist(): +    for url, name in urls: +        print "%s : %s" % (name, url) + + +def shorthelp(): +    print "start|stop|restart|status|list [audio stream]" + + +def longhelp(): +    print "Usage: %s" % mybin,      shorthelp -    ;; -  *) -    longhelp -  ;; -esac +    print """[32;1m get all available streams with [31;1;4m'/%(fil)s list'[m +    Examples: +    %(fil)s list +    %(fil)s start groove +    %(fil)s switch deepmix +    %(fil)s status +    %(fil)s stop""" % {'fil': mybin} + +if cmd == "start": +    start(stream) +elif cmd == "stop": +    stop() +elif cmd == "switch" or cmd == "restart": +    stop() +    start(stream) +elif cmd == "status": +    ret = running() +    if not ret: +        print "** no stream running"  # , e +    else: +        print "%s is running(%s)" % (ret[1], urlForStream(ret[1])) +elif cmd == "list": +    slist() +elif cmd == "--help": +    longhelp() +elif cmd == "-h": +    shorthelp() +else: +    print "unknown command `%s`" % cmd +    print "try `%s` --help" % os.path.basename(mybin) diff --git a/god/streams/streams.py b/god/streams/streams.py deleted file mode 100644 index 65669b2d..00000000 --- a/god/streams/streams.py +++ /dev/null @@ -1,116 +0,0 @@ -#!/usr/bin/python -import os -import sys -from subprocess import Popen, PIPE - -os.chdir(os.path.dirname(os.path.realpath(sys.argv[0]))) -pidfile = "/tmp/krebs.stream.pid" -url_file = os.environ.get("STREAM_DB", "stream.db") -urls = [] -#urls = [ url,f for (url,f) in open(url_file).readline() ] -for line in open(url_file): -    urls.append(line.split()) -#print urls -mybin = sys.argv[0] -cmd = sys.argv[1] if len(sys.argv) > 1 else "you-are-made-of-stupid" -stream = sys.argv[2] if len(sys.argv) == 3 else "groove" - - -def check_pid(pid): -    """ Check For the existence of a unix pid. """ -    try: -        os.kill(pid, 0) -    except OSError: -        return False -    else: -        return True - - -def urlForStream(stream): -    for url, s in urls: -        if s == stream: -            return url - - -def start(stream): -    ret = running() -    if ret: -        print "!! Stream `%s` already running with pid `%s` !" % \ -                (ret[1], ret[0]) -    else: -        pipe_silent = open('/dev/null', 'w') -        url = urlForStream(stream) -        mpl = Popen(["mplayer", url], -                 stdout=pipe_silent, stderr=pipe_silent).pid -        print >> open(pidfile, "w+"), "%d %s" % (mpl, stream) - - -def stop(): -    ret = running() -    if not ret: -        print "!! No Stream running!" -    else: -        pid, name = ret -        print "** Killing `%s` with pid %s" % (name, pid) -        os.kill(int(pid), 15) -        #if check_pid(int(pid)): -        #    print "!! trying harder to kill process" -        #    os.kill(int(pid), 9) -        os.remove(pidfile) - - -def running(): -    try: -        pid, currstream = open(pidfile).read().split() -        if check_pid(int(pid)): -            return (pid, currstream) -        else: -            print "!! removing stale pidfile" -            os.remove(pidfile) -            raise Exception("Pidfile stale") -    except Exception as e: -        return () - - -def slist(): -    for url, name in urls: -        print "%s : %s" % (name, url) - - -def shorthelp(): -    print "start|stop|restart|status|list [audio stream]" - - -def longhelp(): -    print "Usage: %s" % mybin, -    shorthelp -    print """[32;1m get all available streams with [31;1;4m'/%(fil)s list'[m -    Examples: -    %(fil)s list -    %(fil)s start groove -    %(fil)s switch deepmix -    %(fil)s status -    %(fil)s stop""" % {'fil': mybin} - -if cmd == "start": -    start(stream) -elif cmd == "stop": -    stop() -elif cmd == "switch" or cmd == "restart": -    stop() -    start(stream) -elif cmd == "status": -    ret = running() -    if not ret: -        print "** no stream running"  # , e -    else: -        print "%s is running(%s)" % (ret[1], urlForStream(ret[1])) -elif cmd == "list": -    slist() -elif cmd == "--help": -    longhelp() -elif cmd == "-h": -    shorthelp() -else: -    print "unknown command `%s`" % cmd -    print "try `%s` --help" % os.path.basename(mybin) | 
