|
|
|
@ -1,6 +1,6 @@
|
|
|
|
#!/bin/bash
|
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
|
|
|
|
### version: 1.10.8
|
|
|
|
### version: 1.11.0
|
|
|
|
|
|
|
|
|
|
|
|
# ~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.#
|
|
|
|
# ~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.#
|
|
|
|
# Nightscout Mikr.us setup script #
|
|
|
|
# Nightscout Mikr.us setup script #
|
|
|
|
@ -16,7 +16,7 @@
|
|
|
|
# This file is automatically generated. Do not modify it directly!
|
|
|
|
# This file is automatically generated. Do not modify it directly!
|
|
|
|
# Instead, modify the source files in the src directory and run the build script!
|
|
|
|
# Instead, modify the source files in the src directory and run the build script!
|
|
|
|
#
|
|
|
|
#
|
|
|
|
# Build time: 2026.01.06 19:11
|
|
|
|
# Build time: 2026.03.09 16:28
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -46,6 +46,8 @@ WATCHDOG_TIME_FILE=/srv/nightscout/data/watchdog_time
|
|
|
|
WATCHDOG_LOG_FILE=/srv/nightscout/data/watchdog.log
|
|
|
|
WATCHDOG_LOG_FILE=/srv/nightscout/data/watchdog.log
|
|
|
|
WATCHDOG_FAILURES_FILE=/srv/nightscout/data/watchdog-failures.log
|
|
|
|
WATCHDOG_FAILURES_FILE=/srv/nightscout/data/watchdog-failures.log
|
|
|
|
WATCHDOG_CRON_LOG=/srv/nightscout/data/watchdog-cron.log
|
|
|
|
WATCHDOG_CRON_LOG=/srv/nightscout/data/watchdog-cron.log
|
|
|
|
|
|
|
|
DOMAIN_NAME_FILE=/srv/nightscout/data/domain_name
|
|
|
|
|
|
|
|
DOMAIN_UPDATE_TIMESTAMP=/srv/nightscout/data/domain_update_timestamp
|
|
|
|
SUPPORT_LOG=/srv/nightscout/data/support.log
|
|
|
|
SUPPORT_LOG=/srv/nightscout/data/support.log
|
|
|
|
EVENTS_DB=/srv/nightscout/data/events.env
|
|
|
|
EVENTS_DB=/srv/nightscout/data/events.env
|
|
|
|
UPDATE_CHANNEL_FILE=/srv/nightscout/data/update_channel
|
|
|
|
UPDATE_CHANNEL_FILE=/srv/nightscout/data/update_channel
|
|
|
|
@ -61,8 +63,8 @@ DISK_LOW_MAIL=5184000 # == 60 days in seconds
|
|
|
|
DISK_CRITICAL_WARNING=104857600 # == 100 MiB
|
|
|
|
DISK_CRITICAL_WARNING=104857600 # == 100 MiB
|
|
|
|
DISK_CRITICAL_MAIL=604800 # == 7 days in seconds
|
|
|
|
DISK_CRITICAL_MAIL=604800 # == 7 days in seconds
|
|
|
|
DOCKER_DOWN_MAIL=604800 # == 7 days in seconds
|
|
|
|
DOCKER_DOWN_MAIL=604800 # == 7 days in seconds
|
|
|
|
SCRIPT_VERSION="1.10.8" #auto-update
|
|
|
|
SCRIPT_VERSION="1.11.0" #auto-update
|
|
|
|
SCRIPT_BUILD_TIME="2026.01.06" #auto-update
|
|
|
|
SCRIPT_BUILD_TIME="2026.03.09" #auto-update
|
|
|
|
FORCE_DEBUG_LOG=""
|
|
|
|
FORCE_DEBUG_LOG=""
|
|
|
|
NONINTERACTIVE_MODE="false"
|
|
|
|
NONINTERACTIVE_MODE="false"
|
|
|
|
EXECUTED="true"
|
|
|
|
EXECUTED="true"
|
|
|
|
@ -1529,6 +1531,15 @@ get_watchdog_status() {
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
watchdog_run() {
|
|
|
|
|
|
|
|
local host_hash
|
|
|
|
|
|
|
|
host_hash=$(printf '%s' "$(hostname)" | md5sum | awk '{print $1}' | cut -c1-8 | xargs printf '%d' 16 16)
|
|
|
|
|
|
|
|
local offset=$(( host_hash % 300 ))
|
|
|
|
|
|
|
|
echo "Watchdog delay: sleeping ${offset}s (host-based offset)"
|
|
|
|
|
|
|
|
sleep "$offset"
|
|
|
|
|
|
|
|
watchdog_check
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
watchdog_check() {
|
|
|
|
watchdog_check() {
|
|
|
|
echo "---------------------------"
|
|
|
|
echo "---------------------------"
|
|
|
|
echo " Nightscout Watchdog mode"
|
|
|
|
echo " Nightscout Watchdog mode"
|
|
|
|
@ -1630,6 +1641,7 @@ watchdog_check() {
|
|
|
|
|
|
|
|
|
|
|
|
else
|
|
|
|
else
|
|
|
|
WATCHDOG_STATUS="domain_failed"
|
|
|
|
WATCHDOG_STATUS="domain_failed"
|
|
|
|
|
|
|
|
invalidate_domain_cache
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
else
|
|
|
|
else
|
|
|
|
@ -2259,7 +2271,7 @@ update_logto() {
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
get_td_domain() {
|
|
|
|
get_td_domain_from_api() {
|
|
|
|
local MHOST=$(hostname)
|
|
|
|
local MHOST=$(hostname)
|
|
|
|
if ! [[ "$MHOST" =~ [a-zA-Z]{2,16}[0-9]{3} ]]; then
|
|
|
|
if ! [[ "$MHOST" =~ [a-zA-Z]{2,16}[0-9]{3} ]]; then
|
|
|
|
MIKRUS_APIKEY=$(cat "/klucz_api")
|
|
|
|
MIKRUS_APIKEY=$(cat "/klucz_api")
|
|
|
|
@ -2272,6 +2284,63 @@ get_td_domain() {
|
|
|
|
curl -sd "srv=$MHOST&key=$APIKEY" https://api.mikr.us/domain | jq -r ".[].name" | grep ".ns.techdiab.pl" | head -n 1
|
|
|
|
curl -sd "srv=$MHOST&key=$APIKEY" https://api.mikr.us/domain | jq -r ".[].name" | grep ".ns.techdiab.pl" | head -n 1
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
invalidate_domain_cache() {
|
|
|
|
|
|
|
|
echo "" >"$DOMAIN_UPDATE_TIMESTAMP"
|
|
|
|
|
|
|
|
echo "" >"$DOMAIN_NAME_FILE"
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
get_td_domain() {
|
|
|
|
|
|
|
|
local domain=""
|
|
|
|
|
|
|
|
local cache_age=999999
|
|
|
|
|
|
|
|
local now
|
|
|
|
|
|
|
|
now=$(date +%s)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Check if we have a valid timestamp and cached domain
|
|
|
|
|
|
|
|
if [[ -f "$DOMAIN_UPDATE_TIMESTAMP" && -f "$DOMAIN_NAME_FILE" ]]; then
|
|
|
|
|
|
|
|
local last_update
|
|
|
|
|
|
|
|
last_update=$(cat "$DOMAIN_UPDATE_TIMESTAMP" | tr -d '[:space:]')
|
|
|
|
|
|
|
|
if [[ -n "$last_update" && "$last_update" =~ ^[0-9]+$ ]]; then
|
|
|
|
|
|
|
|
cache_age=$((now - last_update))
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Use cache if it's less than 24 hours old and contains a valid (non-empty) domain
|
|
|
|
|
|
|
|
if ((cache_age < 86400)); then
|
|
|
|
|
|
|
|
local cached_domain
|
|
|
|
|
|
|
|
cached_domain=$(cat "$DOMAIN_NAME_FILE" 2>/dev/null | tr -d '[:space:]')
|
|
|
|
|
|
|
|
if [[ -n "$cached_domain" ]]; then
|
|
|
|
|
|
|
|
if [[ "$UPDATE_CHANNEL" == "develop" || "$FORCE_DEBUG_LOG" == "1" ]]; then
|
|
|
|
|
|
|
|
echo "domain: from cache (${cache_age}s old): $cached_domain" >>"$DEBUG_LOG_FILE"
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
echo "$cached_domain"
|
|
|
|
|
|
|
|
return
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Cache miss, stale, or empty cached value - fetch from API
|
|
|
|
|
|
|
|
local raw_domain
|
|
|
|
|
|
|
|
raw_domain=$(get_td_domain_from_api)
|
|
|
|
|
|
|
|
domain=$(echo "$raw_domain" | tr -d '[:space:]')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Save result to cache; empty result is also saved so it can be detected as
|
|
|
|
|
|
|
|
# "unknown" - empty cached value causes re-check on every subsequent call
|
|
|
|
|
|
|
|
echo "$domain" >"$DOMAIN_NAME_FILE"
|
|
|
|
|
|
|
|
if [[ -n "$domain" ]]; then
|
|
|
|
|
|
|
|
echo "$now" >"$DOMAIN_UPDATE_TIMESTAMP"
|
|
|
|
|
|
|
|
if [[ "$UPDATE_CHANNEL" == "develop" || "$FORCE_DEBUG_LOG" == "1" ]]; then
|
|
|
|
|
|
|
|
echo "domain: freshly retrieved from API: $domain" >>"$DEBUG_LOG_FILE"
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
# Clear timestamp so next call always retries the API when domain is empty
|
|
|
|
|
|
|
|
echo "" >"$DOMAIN_UPDATE_TIMESTAMP"
|
|
|
|
|
|
|
|
if [[ "$UPDATE_CHANNEL" == "develop" || "$FORCE_DEBUG_LOG" == "1" ]]; then
|
|
|
|
|
|
|
|
echo "domain: API returned empty result, cache cleared" >>"$DEBUG_LOG_FILE"
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
echo "$domain"
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
get_domain_status() {
|
|
|
|
get_domain_status() {
|
|
|
|
local domain=$(get_td_domain)
|
|
|
|
local domain=$(get_td_domain)
|
|
|
|
local domainLen=${#domain}
|
|
|
|
local domainLen=${#domain}
|
|
|
|
@ -2989,7 +3058,7 @@ parse_commandline_args() {
|
|
|
|
if [ "$WATCHDOGMODE" = "true" ]; then
|
|
|
|
if [ "$WATCHDOGMODE" = "true" ]; then
|
|
|
|
startup_version
|
|
|
|
startup_version
|
|
|
|
startup_debug
|
|
|
|
startup_debug
|
|
|
|
watchdog_check
|
|
|
|
watchdog_run
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ -3265,6 +3334,8 @@ uninstall_menu() {
|
|
|
|
version_menu
|
|
|
|
version_menu
|
|
|
|
;;
|
|
|
|
;;
|
|
|
|
"E)")
|
|
|
|
"E)")
|
|
|
|
|
|
|
|
cachedMenuDomain=''
|
|
|
|
|
|
|
|
invalidate_domain_cache
|
|
|
|
|
|
|
|
|
|
|
|
if ! [[ "$0" =~ .*"/usr/bin/nightscout-tool" ]]; then
|
|
|
|
if ! [[ "$0" =~ .*"/usr/bin/nightscout-tool" ]]; then
|
|
|
|
okdlg "Opcja niedostępna" \
|
|
|
|
okdlg "Opcja niedostępna" \
|
|
|
|
@ -3734,6 +3805,8 @@ main_menu() {
|
|
|
|
|
|
|
|
|
|
|
|
case $CHOICE in
|
|
|
|
case $CHOICE in
|
|
|
|
"S)")
|
|
|
|
"S)")
|
|
|
|
|
|
|
|
cachedMenuDomain=''
|
|
|
|
|
|
|
|
invalidate_domain_cache
|
|
|
|
status_menu
|
|
|
|
status_menu
|
|
|
|
;;
|
|
|
|
;;
|
|
|
|
"P)")
|
|
|
|
"P)")
|
|
|
|
|