From 863916cfdeff54e1f04798302a6f582fe610a99d Mon Sep 17 00:00:00 2001
From: godog <godog@autistici.org>
Date: Sat, 9 Oct 2021 16:55:38 +0200
Subject: [PATCH] Move to S6 for process supervision

---
 Dockerfile                          |  2 +-
 conf/chaperone.d/feedbackloop.conf  | 16 ----------------
 conf/services.d/expire/run          | 10 ++++++++++
 conf/services.d/feedbackloop/finish |  3 +++
 conf/services.d/feedbackloop/run    |  2 ++
 conf/services.d/ingest/run          | 10 ++++++++++
 6 files changed, 26 insertions(+), 17 deletions(-)
 delete mode 100644 conf/chaperone.d/feedbackloop.conf
 create mode 100755 conf/services.d/expire/run
 create mode 100755 conf/services.d/feedbackloop/finish
 create mode 100755 conf/services.d/feedbackloop/run
 create mode 100755 conf/services.d/ingest/run

diff --git a/Dockerfile b/Dockerfile
index 2aa8c0d..e60ea58 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM registry.git.autistici.org/ai3/docker/chaperone-base:master
+FROM registry.git.autistici.org/ai3/docker/s6-base:master
 
 RUN apt-get -q update && \
     env DEBIAN_FRONTEND=noninteractive apt-get -qy install --no-install-recommends \
diff --git a/conf/chaperone.d/feedbackloop.conf b/conf/chaperone.d/feedbackloop.conf
deleted file mode 100644
index 6629386..0000000
--- a/conf/chaperone.d/feedbackloop.conf
+++ /dev/null
@@ -1,16 +0,0 @@
-feedbackloop.service: {
-    command: "/bin/sh -c '/usr/local/bin/feedbackloop server --port=${PORT:-4099} --addr=${ADDR:-0.0.0.0}'",
-    exit_kills: true,
-}
-
-ingest.service: {
-    type: cron,
-    interval: "44 * * * *",
-    command: "/usr/local/bin/feedbackloop ingest",
-}
-
-expire.service: {
-    type: cron,
-    interval: "39 5 * * *",
-    command: "/usr/local/bin/feedbackloop expire --days=30",
-}
diff --git a/conf/services.d/expire/run b/conf/services.d/expire/run
new file mode 100755
index 0000000..a19b4d5
--- /dev/null
+++ b/conf/services.d/expire/run
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+period=${EXPIRE_PERIOD_SECS:-86400}
+offset=$(shuf -i 0-${period} -n 1)
+
+sleep $offset
+while true; do
+    /usr/local/bin/feedbackloop expire --days=30
+    sleep $period
+done
diff --git a/conf/services.d/feedbackloop/finish b/conf/services.d/feedbackloop/finish
new file mode 100755
index 0000000..b6531b3
--- /dev/null
+++ b/conf/services.d/feedbackloop/finish
@@ -0,0 +1,3 @@
+#!/usr/bin/execlineb -S0
+
+s6-svscanctl -t /var/run/s6/services
diff --git a/conf/services.d/feedbackloop/run b/conf/services.d/feedbackloop/run
new file mode 100755
index 0000000..0b9de1c
--- /dev/null
+++ b/conf/services.d/feedbackloop/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/local/bin/feedbackloop server --port=${PORT:-4099} --addr=${ADDR:-0.0.0.0}
diff --git a/conf/services.d/ingest/run b/conf/services.d/ingest/run
new file mode 100755
index 0000000..8b945cf
--- /dev/null
+++ b/conf/services.d/ingest/run
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+period=${INGEST_PERIOD_SECS:-3600}
+offset=$(shuf -i 0-${period} -n 1)
+
+sleep $offset
+while true; do
+    /usr/local/bin/feedbackloop ingest
+    sleep $period
+done
-- 
GitLab