summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2014-10-08 18:43:02 +0200
committerChristian Pointner <equinox@spreadspace.org>2014-10-08 18:43:02 +0200
commit0bf931cf12c66abfd58e70dd1cf3659e828a8725 (patch)
tree4d2c63bb07f05825599bf25413b66e7275d5c5c0
parentfixed locale issue at command line parser (diff)
added scripts and configs for supervisord
-rw-r--r--.gitignore4
-rw-r--r--scripts/include.sh46
-rwxr-xr-xscripts/show-stream.sh102
-rw-r--r--scripts/supervisord.conf55
-rwxr-xr-xscripts/sydra-ctl.sh12
-rwxr-xr-xscripts/sydra-manager.sh60
6 files changed, 279 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index 750279c..4548a5d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,7 @@ src/*.d
src/*.d.*
src/config*.h
src/recordings/
+scripts/logs/
+scripts/recordings/
+scripts/show-stream.current
+scripts/supervisord.pid
diff --git a/scripts/include.sh b/scripts/include.sh
new file mode 100644
index 0000000..3a809e9
--- /dev/null
+++ b/scripts/include.sh
@@ -0,0 +1,46 @@
+get_id_title_and_port() {
+ case "$1" in
+ 00)
+ TITLE='ESC: Ministry of Hacking'
+ PORT_BASE=5010
+ ID='esc'
+ ;;
+ 01)
+ TITLE='Gemeinschaftsprojekt Attemsgarten'
+ PORT_BASE=5020
+ ID='gag'
+ ;;
+ 02)
+ TITLE='rathaus der herzen'
+ PORT_BASE=5030
+ ID='rdh'
+ ;;
+ 03)
+ TITLE='realraum'
+ PORT_BASE=5040
+ ID='r3'
+ ;;
+ 04)
+ TITLE='&lt;rotor&gt; Zentrum für zetgenössische Kunst'
+ PORT_BASE=5050
+ ID='rot'
+ ;;
+ 05)
+ TITLE='Spektral'
+ PORT_BASE=5060
+ ID='spe'
+ ;;
+ esac
+}
+
+get_num() {
+ case "$1" in
+ 'esc') NUM=00 ;;
+ 'gag') NUM=01 ;;
+ 'rdh') NUM=02 ;;
+ 'r3') NUM=03 ;;
+ 'rot') NUM=04 ;;
+ 'spe') NUM=05 ;;
+ esac
+}
+
diff --git a/scripts/show-stream.sh b/scripts/show-stream.sh
new file mode 100755
index 0000000..2f618a2
--- /dev/null
+++ b/scripts/show-stream.sh
@@ -0,0 +1,102 @@
+#!/bin/bash
+############################
+
+ROOT_D="$1"
+TAG="$2"
+NUM="$3"
+
+SYDRA_RTP="/home/equinox/spreadspace/sydra/src/sydra-rtp"
+SYDRA_LAUNCH="/home/equinox/spreadspace/sydra/src/sydra-launch"
+
+############################
+
+printUsage() {
+ echo "Usage: $0 <basedir> (overview|main <id>)"
+}
+
+if [ -z "$ROOT_D" ] || [ -z "$TAG" ]; then
+ printUsage
+ exit 1
+fi
+if [ ! -d "$ROOT_D" ]; then
+ echo "ERROR: can't change to non-existent directory: $ROOT_D"
+ exit 2
+fi
+
+. ./include.sh
+
+start_rtp_overview() {
+ ID="$1"
+ TITLE="$2"
+ PORT_BASE="$3"
+ REF_PORT_BASE=$((PORT_BASE + 1000))
+ RECORD_D="$ROOT_D/recordings/$ID"
+ mkdir -p "$RECORD_D"
+
+ herbstclient rule once title="overview-$ID" tag="overview"
+ exec $SYDRA_RTP -n "overview-$ID" -D --log stdout:3 --mode receiver -O $PORT_BASE --rtp-host-reflector localhost --rtp-port-base-reflector $REF_PORT_BASE \
+ --sink "videoconvert name=videosink ! textoverlay text=\"$TITLE\" shaded-background=true font-desc=\"Sans 18\" ! videoscale add-borders=true ! xvimagesink fakesink name=audiosink" \
+ --rec-mux matroskamux --rec-name-format "$RECORD_D/%Y-%m-%d_%H-%M-%S.mkv" --rec-video-encoder jpegenc \
+ --rec-audio-encoder "audioconvert ! vorbisenc"
+}
+
+start_test_overview() {
+ ID="$1"
+ TITLE="$2"
+
+ herbstclient rule once title="overview-$ID" tag="overview"
+ exec $SYDRA_LAUNCH -n "overview-$ID" -D --log stdout:3 -p "videotestsrc ! video/x-raw,width=864,height=480,framerate=25/1 ! textoverlay text=\"$TITLE\" shaded-background=true font-desc=\"Sans 18\" ! videoscale add-borders=true ! xvimagesink"
+}
+
+start_rtp_main() {
+ ID="$1"
+ TITLE="$2"
+ PORT_BASE="$3"
+
+ herbstclient rule once title="main-$ID" tag="main"
+ exec $SYDRA_RTP -n "main-$ID" -D --log stdout:3 --mode receiver -A localhost -O $PORT_BASE \
+ --sink "videoconvert name=videosink ! videoscale add-borders=true ! xvimagesink audioconvert name=audiosink ! audioresample ! autoaudiosink"
+}
+
+start_test_main() {
+ ID="$1"
+ TITLE="$2"
+
+ herbstclient rule once title="main-$ID" tag="main"
+ exec $SYDRA_LAUNCH -n "main-$ID" -D --log stdout:3 -p "videotestsrc ! video/x-raw,width=864,height=480,framerate=25/1 ! textoverlay text=\"$TITLE\" shaded-background=true font-desc=\"Sans 18\" ! videoscale add-borders=true ! xvimagesink"
+}
+
+cd $ROOT_D
+case "$TAG" in
+ overview)
+ if [ -z "$NUM" ]; then
+ printUsage
+ exit 1
+ fi
+
+ get_id_title_and_port "$NUM"
+ if [ -z "$ID" ]; then
+ echo "invalid process number: $NUM"
+ exit 3
+ fi
+ [ -n "$SYDRA_TEST" ] || start_rtp_overview "$ID" "$TITLE" $PORT_BASE
+ [ -n "$SYDRA_TEST" ] && start_test_overview "$ID" "$TITLE" $PORT_BASE
+ ;;
+ main)
+ read NUM < "$ROOT_D/show-stream.current"
+ get_id_title_and_port "$NUM"
+ if [ -z "$ID" ]; then
+ echo "$ROOT_D/show-stream.current contains an invalid process number: $NUM"
+ exit 3
+ fi
+ [ -n "$SYDRA_TEST" ] || start_rtp_main "$ID" "$TITLE" $((PORT_BASE + 1000))
+ [ -n "$SYDRA_TEST" ] && start_test_main "$ID" "$TITLE" $((PORT_BASE + 1000))
+ ;;
+ *)
+ printUsage
+ exit 1
+ ;;
+esac
+
+############################
+exit 3
diff --git a/scripts/supervisord.conf b/scripts/supervisord.conf
new file mode 100644
index 0000000..a4199e2
--- /dev/null
+++ b/scripts/supervisord.conf
@@ -0,0 +1,55 @@
+[unix_http_server]
+file=%(here)s/supervisor.sock
+chmod=0700
+
+[inet_http_server]
+port=127.0.0.1:9001
+
+[supervisord]
+logfile=%(here)s/logs/supervisord.log
+loglevel=info
+pidfile=%(here)s/supervisord.pid
+nodaemon=false
+identifier=sydra
+childlogdir=%(here)s/logs
+environment=SYDRA_TEST=1
+
+[rpcinterface:supervisor]
+supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
+
+[supervisorctl]
+serverurl=unix://%(here)s/supervisor.sock
+prompt=sydractl
+
+[program:manager]
+command=/home/equinox/spreadspace/sydra/scripts/sydra-manager.sh %(here)s %(group_name)s
+process_name=manager
+numprocs=1
+priority=10
+autostart=true
+autorestart=true
+startsecs=0
+startretries=10
+
+[program:overview]
+command=/home/equinox/spreadspace/sydra/scripts/show-stream.sh %(here)s %(program_name)s %(process_num)02d
+process_name=%(process_num)02d
+numprocs=6
+priority=20
+autostart=true
+autorestart=true
+startsecs=0
+startretries=10
+
+[program:main]
+command=/home/equinox/spreadspace/sydra/scripts/show-stream.sh %(here)s %(program_name)s
+process_name=main
+numprocs=1
+priority=30
+autostart=true
+autorestart=true
+startsecs=0
+startretries=10
+
+[group:e14]
+programs=manager,overview,main
diff --git a/scripts/sydra-ctl.sh b/scripts/sydra-ctl.sh
new file mode 100755
index 0000000..2a2cb45
--- /dev/null
+++ b/scripts/sydra-ctl.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+PIPE=./sydra-manager.sock
+
+while true
+do
+ if read line; then
+ echo $line > $PIPE
+ fi
+done
+
+exit 0
diff --git a/scripts/sydra-manager.sh b/scripts/sydra-manager.sh
new file mode 100755
index 0000000..093d557
--- /dev/null
+++ b/scripts/sydra-manager.sh
@@ -0,0 +1,60 @@
+#!/bin/bash
+
+############################
+
+ROOT_D="$1"
+GROUP_NAME="$2"
+
+############################
+
+printUsage() {
+ echo "Usage: $0 <basedir> <groupname>"
+}
+
+if [ -z "$ROOT_D" ] || [ -z "$GROUP_NAME" ]; then
+ printUsage
+ exit 1
+fi
+if [ ! -d "$ROOT_D" ]; then
+ echo "ERROR: can't change to non-existent directory: $ROOT_D"
+ exit 2
+fi
+
+. ./include.sh
+
+PIPE="$ROOT_D/sydra-manager.sock"
+trap "rm -f $PIPE" EXIT
+if [[ ! -p $PIPE ]]; then
+ mkfifo $PIPE
+fi
+
+cd "$ROOT_D"
+echo "00" > show-stream.current
+
+while true
+do
+ if read line <$PIPE; then
+ cmd=${line%% *}
+ arg=${line##* }
+ case $cmd in
+ restart)
+ get_num $arg
+ if [ -z "$NUM" ]; then NUM=$arg; fi
+ supervisorctl restart "$GROUP_NAME:$NUM"
+ NUM=''
+ ;;
+ select)
+ get_num $arg
+ if [ -n "$NUM" ]; then
+ echo "$NUM" > show-stream.current
+ supervisorctl restart "$GROUP_NAME:main"
+ fi
+ NUM=''
+ ;;
+ *)
+ ;;
+ esac
+ fi
+done
+
+exit 0