Add domain cache invalidation and new domain fetching logic

- Implemented `invalidate_domain_cache` function to clear cached domain data.
- Updated `get_td_domain` to utilize caching for domain retrieval.
- Modified `main_menu` and `uninstall_menu` to invalidate cache when necessary.
- Enhanced watchdog logic to clear domain cache on failure.
develop
Dominik Dzienia 5 days ago
parent 0021aa5668
commit 8e0be92834

@ -108,6 +108,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" \

@ -95,6 +95,8 @@ main_menu() {
case $CHOICE in case $CHOICE in
"S)") "S)")
cachedMenuDomain=''
invalidate_domain_cache
status_menu status_menu
;; ;;
"P)") "P)")

@ -24,6 +24,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

@ -22,7 +22,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")
@ -35,6 +35,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}

@ -261,6 +261,7 @@ watchdog_check() {
else else
WATCHDOG_STATUS="domain_failed" WATCHDOG_STATUS="domain_failed"
invalidate_domain_cache
fi fi
else else

Loading…
Cancel
Save