From fdf50f0064e7fa7949a3acf0e94bea5ab00463b8 Mon Sep 17 00:00:00 2001 From: Jeremy Lin Date: Tue, 24 Mar 2020 19:57:10 -0700 Subject: [PATCH] Update healthcheck script to handle alternate base dir --- docker/healthcheck.sh | 58 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 51 insertions(+), 7 deletions(-) mode change 100644 => 100755 docker/healthcheck.sh diff --git a/docker/healthcheck.sh b/docker/healthcheck.sh old mode 100644 new mode 100755 index bd7e696..88c1091 --- a/docker/healthcheck.sh +++ b/docker/healthcheck.sh @@ -1,8 +1,52 @@ -#!/usr/bin/env sh +#!/bin/sh -if [ -z "$ROCKET_TLS"] -then - curl --fail http://localhost:${ROCKET_PORT:-"80"}/alive || exit 1 -else - curl --insecure --fail https://localhost:${ROCKET_PORT:-"80"}/alive || exit 1 -fi \ No newline at end of file +# Use the value of the corresponding env var (if present), +# or a default value otherwise. +: ${DATA_FOLDER:="data"} +: ${ROCKET_PORT:="80"} + +CONFIG_FILE="${DATA_FOLDER}"/config.json + +# Given a config key, return the corresponding config value from the +# config file. If the key doesn't exist, return an empty string. +get_config_val() { + local key="$1" + # Extract a line of the form: + # "domain": "https://bw.example.com/path", + grep "\"${key}\":" "${CONFIG_FILE}" | + # To extract just the value (https://bw.example.com/path), delete: + # (1) everything up to and including the first ':', + # (2) whitespace and '"' from the front, + # (3) ',' and '"' from the back. + sed -e 's/[^:]\+://' -e 's/^[ "]\+//' -e 's/[,"]\+$//' +} + +# Extract the base path from a domain URL. For example: +# - `` -> `` +# - `https://bw.example.com` -> `` +# - `https://bw.example.com/` -> `` +# - `https://bw.example.com/path` -> `/path` +# - `https://bw.example.com/multi/path` -> `/multi/path` +get_base_path() { + echo "$1" | + # Delete: + # (1) everything up to and including '://', + # (2) everything up to '/', + # (3) trailing '/' from the back. + sed -e 's|.*://||' -e 's|[^/]\+||' -e 's|/*$||' +} + +# Read domain URL from config.json, if present. +if [ -r "${CONFIG_FILE}" ]; then + domain="$(get_config_val 'domain')" + if [ -n "${domain}" ]; then + # config.json 'domain' overrides the DOMAIN env var. + DOMAIN="${domain}" + fi +fi + +base_path="$(get_base_path "${DOMAIN}")" +if [ -n "${ROCKET_TLS}" ]; then + s='s' +fi +curl --insecure --fail "http${s}://localhost:${ROCKET_PORT}${base_path}/alive" || exit 1