From fbaba59dca707f2e9a2dff7587e8c7cdfec455d8 Mon Sep 17 00:00:00 2001
From: Martin Konecny <martin.konecny@gmail.com>
Date: Tue, 26 Feb 2013 14:47:48 -0500
Subject: [PATCH] CC-4974: Watchdog for ensuring Liquidsoap does not consume
 more than 1GB of memory

-changed to 600MB for now. May lower even more later
---
 python_apps/pypo/airtime-liquidsoap               | 2 +-
 python_apps/pypo/airtime-liquidsoap-init-d        | 7 +++++--
 python_apps/pypo/liquidsoap_scripts/ls_script.liq | 4 +++-
 python_apps/pypo/monit-airtime-liquidsoap.cfg     | 9 ++++++++-
 4 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/python_apps/pypo/airtime-liquidsoap b/python_apps/pypo/airtime-liquidsoap
index bfefcf46f..75821b942 100755
--- a/python_apps/pypo/airtime-liquidsoap
+++ b/python_apps/pypo/airtime-liquidsoap
@@ -6,7 +6,7 @@ virtualenv_bin="/usr/lib/airtime/airtime_virtualenv/bin/"
 ls_user="pypo"
 export HOME="/var/tmp/airtime/pypo/"
 api_client_path="/usr/lib/airtime/"
-ls_path="/usr/bin/airtime-liquidsoap --verbose -f"
+ls_path="/usr/bin/airtime-liquidsoap --verbose -f -d"
 ls_param="/usr/lib/airtime/pypo/bin/liquidsoap_scripts/ls_script.liq"
 
 exec 2>&1
diff --git a/python_apps/pypo/airtime-liquidsoap-init-d b/python_apps/pypo/airtime-liquidsoap-init-d
index 7096bc59c..106006fab 100755
--- a/python_apps/pypo/airtime-liquidsoap-init-d
+++ b/python_apps/pypo/airtime-liquidsoap-init-d
@@ -20,8 +20,11 @@ start () {
         chown pypo:pypo /var/log/airtime/pypo
         chown pypo:pypo /var/log/airtime/pypo-liquidsoap
 
-        start-stop-daemon --start --background --quiet --chuid $USERID:$GROUPID \
-        --nicelevel -15 --make-pidfile --pidfile $PIDFILE --startas $DAEMON
+        touch /var/run/airtime-liquidsoap.pid
+        chown pypo:pypo /var/run/airtime-liquidsoap.pid
+
+        start-stop-daemon --start --quiet --chuid $USERID:$GROUPID \
+        --pidfile /var/run/airtime-liquidsoap.pid --nicelevel -15 --startas $DAEMON
         
         monit monitor airtime-liquidsoap >/dev/null 2>&1
 }
diff --git a/python_apps/pypo/liquidsoap_scripts/ls_script.liq b/python_apps/pypo/liquidsoap_scripts/ls_script.liq
index 489d494a3..6663193f0 100644
--- a/python_apps/pypo/liquidsoap_scripts/ls_script.liq
+++ b/python_apps/pypo/liquidsoap_scripts/ls_script.liq
@@ -1,10 +1,12 @@
-%include "library/pervasives.liq"
 %include "/etc/airtime/liquidsoap.cfg"
 
 set("log.file.path", log_file)
 set("log.stdout", true)
 set("server.telnet", true)
 set("server.telnet.port", 1234)
+set("init.daemon.pidfile.path", "/var/run/airtime-liquidsoap.pid") 
+
+%include "library/pervasives.liq"
 
 #Dynamic source list
 #dyn_sources = ref []
diff --git a/python_apps/pypo/monit-airtime-liquidsoap.cfg b/python_apps/pypo/monit-airtime-liquidsoap.cfg
index f8efcaf18..297854faa 100644
--- a/python_apps/pypo/monit-airtime-liquidsoap.cfg
+++ b/python_apps/pypo/monit-airtime-liquidsoap.cfg
@@ -1,4 +1,4 @@
- set daemon 10 # Poll at 5 second intervals
+ set daemon 15 # Poll at 5 second intervals
  set logfile /var/log/monit.log
 
  set httpd port 2812
@@ -7,3 +7,10 @@
     with pidfile "/var/run/airtime-liquidsoap.pid"
     start program = "/etc/init.d/airtime-liquidsoap start" with timeout 5 seconds
     stop program = "/etc/init.d/airtime-liquidsoap stop"
+
+    if mem > 600 MB for 3 cycles then restart
+    if failed host localhost port 1234
+      send "version\r\nexit\r\n"
+      expect "Liquidsoap"
+      retry 3
+    then restart