From fd6b1d680c7ac070b3fe1acc200f5c09dec00ae7 Mon Sep 17 00:00:00 2001 From: Vincent Mahnke Date: Sat, 25 Oct 2025 19:49:34 +0200 Subject: [PATCH 1/5] feat: Adds healthcheck to web server --- docker-compose.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 4509256..7c43cda 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -29,10 +29,18 @@ services: DEFAULT_LANGUAGE: en IMPRESSUM_URL: https://hamburg.ccc.de/imprint/ ports: - - "8080:80" + - "8081:80" depends_on: data_handler: condition: service_started + # all the way zoomed out, with hamburg at the center, at least one camera should be returned + healthcheck: + test: > + ["CMD", "curl -s 'http://localhost/camera.php?bbox=-92.52991540527346,30.683278176916133,131.7689595947266,72.87186315234298&zoom=4&width=2552&height=867' | grep '^\[.+\]$'"] + interval: 10s + timeout: 5s + start_period: 30s + retries: 5 data_handler: image: git.hamburg.ccc.de/ccchh/sunders/data_handler:latest From 58f048adbab4685e428911369497793f9f22678d Mon Sep 17 00:00:00 2001 From: Vincent Mahnke Date: Sat, 25 Oct 2025 21:20:09 +0200 Subject: [PATCH 2/5] refactor: Increases verbosity of data_handler --- data_handler/Containerfile | 2 +- data_handler/utils/entrypoint.sh | 2 +- data_handler/utils/update_camera.sh | 4 ++-- home/sunders/update_cameras/update_camera.sh | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/data_handler/Containerfile b/data_handler/Containerfile index 342ae74..633e712 100644 --- a/data_handler/Containerfile +++ b/data_handler/Containerfile @@ -5,4 +5,4 @@ COPY ./data_init/*.sql /opt/init/init.sql ENTRYPOINT ["/opt/entrypoint.sh"] -CMD ["/usr/sbin/dcrond", "-f" ] \ No newline at end of file +CMD ["/bin/sh", "-c", "/usr/sbin/dcrond -f -d 5 > /var/log/dcrond.log 2>&1"] \ No newline at end of file diff --git a/data_handler/utils/entrypoint.sh b/data_handler/utils/entrypoint.sh index c4dc346..2109d85 100755 --- a/data_handler/utils/entrypoint.sh +++ b/data_handler/utils/entrypoint.sh @@ -8,7 +8,7 @@ set -e cat<> /var/log/update_camera_$(date +\%Y\%m\%d\%H\%M\%S).log 2>&1 EOF #################################################################################################### diff --git a/data_handler/utils/update_camera.sh b/data_handler/utils/update_camera.sh index 25d23c8..4107d9f 100644 --- a/data_handler/utils/update_camera.sh +++ b/data_handler/utils/update_camera.sh @@ -63,7 +63,7 @@ do rm "change_file.osc.gz" fi - echo `date "+%d/%m/%Y %H:%M"`" - Start processing sequence number $curSeqNum" > "$logFileName" + echo `date "+%d/%m/%Y %H:%M"`" - Start processing sequence number $curSeqNum of $newSeqNum" > "$logFileName" targetDirName=`echo "000000000$curSeqNum" | sed 's#.*\(...\)\(...\)\(...\)$#\1/\2/\3.osc.gz#'` targetDirName="$REPLICATE_URL/$targetDirName" @@ -87,7 +87,7 @@ do targetDirName=`echo "$targetDirName" | sed 's/.osc.gz$/.state.txt/'` curl -L "$targetDirName" -o lastState.txt 2>&1 | tee -a $logFileName - echo `date "+%d/%m/%Y %H:%M"`" - Finish processing sequence number $curSeqNum" | tee -a "$logFileName" + echo `date "+%d/%m/%Y %H:%M"`" - Finish processing sequence number $curSeqNum of $newSeqNum" | tee -a "$logFileName" done rm "/var/lock/update_camera" diff --git a/home/sunders/update_cameras/update_camera.sh b/home/sunders/update_cameras/update_camera.sh index b605ee4..b6d3338 100644 --- a/home/sunders/update_cameras/update_camera.sh +++ b/home/sunders/update_cameras/update_camera.sh @@ -60,7 +60,7 @@ do rm "change_file.osc.gz" fi - echo `date "+%d/%m/%Y %H:%M"`" - Start processing sequence number $curSeqNum" > "$logFileName" + echo `date "+%d/%m/%Y %H:%M"`" - Start processing sequence number $curSeqNum of $newSeqNum" > "$logFileName" targetDirName=`echo "000000000$curSeqNum" | sed 's#.*\(...\)\(...\)\(...\)$#\1/\2/\3.osc.gz#'` targetDirName="$REPLICATE_URL/$targetDirName" @@ -84,7 +84,7 @@ do targetDirName=`echo "$targetDirName" | sed 's/.osc.gz$/.state.txt/'` wget -nv "$targetDirName" -O lastState.txt 2>&1 | tee -a $logFileName - echo `date "+%d/%m/%Y %H:%M"`" - Finish processing sequence number $curSeqNum" | tee -a "$logFileName" + echo `date "+%d/%m/%Y %H:%M"`" - Finish processing sequence number $curSeqNum of $newSeqNum" | tee -a "$logFileName" done rm "/var/lock/update_camera" From f94080f45f63a5188ebe9b211ed27a815a78c49e Mon Sep 17 00:00:00 2001 From: Vincent Mahnke Date: Sat, 25 Oct 2025 21:20:27 +0200 Subject: [PATCH 3/5] chore: Immediately starts `update_camera` on container startup --- data_handler/utils/entrypoint.sh | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/data_handler/utils/entrypoint.sh b/data_handler/utils/entrypoint.sh index 2109d85..9e726e8 100755 --- a/data_handler/utils/entrypoint.sh +++ b/data_handler/utils/entrypoint.sh @@ -20,7 +20,15 @@ php /opt/init_db.php echo "Prescripts done" #################################################################################################### -### Run cmd +### Run script once immediately +#################################################################################################### + +echo "Running update once initially..." +sh /opt/update_camera.sh >> /var/log/update_camera_$(date +\%Y\%m\%d\%H\%M\%S).log 2>&1 +echo "Initial update done" + +#################################################################################################### +### Run cron to schedule periodic task #################################################################################################### # see: https://github.com/dubiousjim/dcron/issues/13 From 73e9c279df72d8d3ce3fc52a9a2fd792bb67dc30 Mon Sep 17 00:00:00 2001 From: Vincent Mahnke Date: Sat, 25 Oct 2025 21:21:06 +0200 Subject: [PATCH 4/5] feat: Adds healthcheck that restarts `data_handler`, when any error is printed to log files --- docker-compose.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index 7c43cda..befbc6d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -57,6 +57,13 @@ services: db: condition: service_healthy restart: true + # if the latest `update_camera_*.log` contains "error", fail the healthcheck + healthcheck: + test: ["CMD", "sh", "-c", "ls /var/log | grep '^update_camera_' | xargs -I {} sh -c 'grep -q error /var/log/{} || exit 0; exit 1'"] + interval: 10s + timeout: 5s + start_period: 30s + retries: 5 volumes: mariadb: \ No newline at end of file From 82b41342fc6a0d03928f5ecf59a10c0ba1efbfb8 Mon Sep 17 00:00:00 2001 From: Vincent Mahnke Date: Sat, 25 Oct 2025 21:22:23 +0200 Subject: [PATCH 5/5] fix: Restarts any container unless stopped by user --- docker-compose.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index befbc6d..0224ddf 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,6 +1,7 @@ services: db: image: mariadb:12.0.2 + restart: unless-stopped command: --max_allowed_packet=3250585600 environment: MYSQL_ROOT_PASSWORD: rootpassword # ${{secrets.MYSQL_ROOT_PASSWORD}} @@ -18,6 +19,7 @@ services: web: image: git.hamburg.ccc.de/ccchh/sunders/web:latest + restart: unless-stopped environment: MYSQL_HOST: db MYSQL_DB: camera # ${{secrets.MYSQL_DATABASE}} @@ -44,6 +46,7 @@ services: data_handler: image: git.hamburg.ccc.de/ccchh/sunders/data_handler:latest + restart: unless-stopped environment: MYSQL_HOST: db MYSQL_DB: camera # ${{secrets.MYSQL_DATABASE}}