mirror of
https://github.com/mempool/mempool.git
synced 2026-08-13 12:33:11 +02:00
223 lines
4.7 KiB
Bash
Executable file
223 lines
4.7 KiB
Bash
Executable file
#!/usr/bin/env zsh
|
|
delay=0.15
|
|
hostname=$(hostname)
|
|
#services_host=""
|
|
protocol="https"
|
|
base_domain="mempool.space"
|
|
list_refresh_interval=60
|
|
dry_run=0
|
|
|
|
if [[ "$1" == "--dry-run" ]]; then
|
|
dry_run=1
|
|
hostname="${2:-mempool.space}"
|
|
services_host="${3:-}"
|
|
protocol="http"
|
|
delay=0
|
|
fi
|
|
|
|
typeset -a custom_domains
|
|
typeset -a subdomain_names
|
|
last_refresh=0
|
|
|
|
warm()
|
|
{
|
|
local host_header="$2"
|
|
if [[ -n "$host_header" ]]; then
|
|
echo "${protocol}://${hostname}$1 (Host: $host_header)"
|
|
[[ $dry_run -eq 0 ]] && curl -o /dev/null -s -H "Host: $host_header" "${protocol}://${hostname}$1"
|
|
else
|
|
echo "${protocol}://$1"
|
|
[[ $dry_run -eq 0 ]] && curl -o /dev/null -s "${protocol}://$1"
|
|
fi
|
|
}
|
|
|
|
warmSip()
|
|
{
|
|
local host_header="$2"
|
|
if [[ -n "$host_header" ]]; then
|
|
echo "${protocol}://${hostname}$1 (Host: $host_header)"
|
|
[[ $dry_run -eq 0 ]] && curl -o /dev/null -s -H "Host: $host_header" -H 'User-Agent: Googlebot' "${protocol}://${hostname}$1"
|
|
else
|
|
echo "${protocol}://$1"
|
|
[[ $dry_run -eq 0 ]] && curl -o /dev/null -s -H 'User-Agent: Googlebot' "${protocol}://$1"
|
|
fi
|
|
}
|
|
|
|
warmUnfurl()
|
|
{
|
|
local host_header="$2"
|
|
if [[ -n "$host_header" ]]; then
|
|
echo "${protocol}://${hostname}$1 (Host: $host_header)"
|
|
[[ $dry_run -eq 0 ]] && curl -o /dev/null -s -H "Host: $host_header" -H 'User-Agent: Twitterbot' "${protocol}://${hostname}$1"
|
|
else
|
|
echo "${protocol}://$1"
|
|
[[ $dry_run -eq 0 ]] && curl -o /dev/null -s -H 'User-Agent: Twitterbot' "${protocol}://$1"
|
|
fi
|
|
}
|
|
|
|
sipURLs=(
|
|
'/'
|
|
'/mining'
|
|
'/lightning'
|
|
'/graphs'
|
|
'/docs'
|
|
'/docs/faq'
|
|
'/docs/api/rest'
|
|
'/about'
|
|
)
|
|
|
|
unfurlURLs=(
|
|
'/'
|
|
'/mining'
|
|
'/lightning'
|
|
)
|
|
|
|
staticImageTypes=(
|
|
'header'
|
|
'footer'
|
|
'unfurl'
|
|
'android_chrome_512'
|
|
'android_chrome_192'
|
|
'apple_touch'
|
|
'favicon_32'
|
|
'favicon_16'
|
|
'favicon'
|
|
'mstile'
|
|
'site.webmanifest'
|
|
'browserconfig.xml'
|
|
)
|
|
|
|
refresh_dynamic_endpoints()
|
|
{
|
|
echo "refreshing dynamic endpoint lists..."
|
|
custom_domains=()
|
|
subdomain_names=()
|
|
|
|
local api_host="${services_host:-$hostname}"
|
|
local dashboard_list
|
|
dashboard_list=$(curl -sSL "${protocol}://${api_host}/api/v1/internal/enterprise/dashboard/list" 2>/dev/null)
|
|
if [[ -n "$dashboard_list" && "$dashboard_list" != "null" ]]; then
|
|
local dashboards
|
|
dashboards=($(jq -r '.[]' <<< "$dashboard_list" 2>/dev/null))
|
|
for dashboard in $dashboards; do
|
|
local config
|
|
config=$(curl -sSL "${protocol}://${api_host}/api/v1/internal/enterprise/dashboard/${dashboard}" 2>/dev/null)
|
|
if [[ -n "$config" && "$config" != "null" ]]; then
|
|
local domains
|
|
domains=($(jq -r '.domains[]' <<< "$config" 2>/dev/null))
|
|
for domain in $domains; do
|
|
if [[ "$domain" != *.* ]]; then
|
|
domain="${domain}.${base_domain}"
|
|
fi
|
|
custom_domains+=("$domain")
|
|
done
|
|
fi
|
|
done
|
|
fi
|
|
|
|
local subdomains
|
|
subdomains=$(curl -sSL "${protocol}://${api_host}/api/v1/internal/enterprise/subdomains" 2>/dev/null)
|
|
if [[ -n "$subdomains" && "$subdomains" != "null" ]]; then
|
|
local names
|
|
names=($(jq -r '.[].name' <<< "$subdomains" 2>/dev/null))
|
|
for name in $names; do
|
|
local is_custom=0
|
|
for cd in $custom_domains; do
|
|
if [[ "$cd" == "$name" || "$cd" == "${name}.${base_domain}" ]]; then
|
|
is_custom=1
|
|
break
|
|
fi
|
|
done
|
|
if [[ $is_custom -eq 0 ]]; then
|
|
subdomain_names+=("$name")
|
|
fi
|
|
done
|
|
fi
|
|
|
|
echo "found ${#custom_domains[@]} custom dashboard domains and ${#subdomain_names[@]} subdomains"
|
|
last_refresh=$(date +%s)
|
|
}
|
|
|
|
if [[ $dry_run -eq 0 ]]; then
|
|
echo "waiting for mempool backend and SSR daemon to start..."
|
|
sleep 60
|
|
fi
|
|
|
|
refresh_dynamic_endpoints
|
|
|
|
while true
|
|
do
|
|
echo "starting SSR warm cache cycle..."
|
|
current_time=$(date +%s)
|
|
|
|
if (( current_time - last_refresh >= list_refresh_interval )); then
|
|
refresh_dynamic_endpoints
|
|
fi
|
|
|
|
for url in $sipURLs
|
|
do
|
|
warmSip "${hostname}${url}"
|
|
sleep $delay
|
|
done
|
|
|
|
for url in $unfurlURLs
|
|
do
|
|
warmUnfurl "${hostname}${url}"
|
|
sleep $delay
|
|
done
|
|
|
|
for domain in $custom_domains
|
|
do
|
|
warm "/" "$domain"
|
|
sleep $delay
|
|
for url in $sipURLs
|
|
do
|
|
warmSip "$url" "$domain"
|
|
sleep $delay
|
|
done
|
|
for url in $unfurlURLs
|
|
do
|
|
warmUnfurl "$url" "$domain"
|
|
sleep $delay
|
|
done
|
|
done
|
|
|
|
for name in $subdomain_names
|
|
do
|
|
local subdomain_host="${name}.${base_domain}"
|
|
warm "/" "$subdomain_host"
|
|
sleep $delay
|
|
for url in $sipURLs
|
|
do
|
|
warmSip "$url" "$subdomain_host"
|
|
sleep $delay
|
|
done
|
|
for url in $unfurlURLs
|
|
do
|
|
warmUnfurl "$url" "$subdomain_host"
|
|
sleep $delay
|
|
done
|
|
done
|
|
|
|
for domain in $custom_domains
|
|
do
|
|
for imageType in $staticImageTypes
|
|
do
|
|
warm "/ssr/static/${imageType}" "$domain"
|
|
sleep $delay
|
|
done
|
|
done
|
|
|
|
for name in $subdomain_names
|
|
do
|
|
local subdomain_host="${name}.${base_domain}"
|
|
for imageType in $staticImageTypes
|
|
do
|
|
warm "/ssr/static/${imageType}" "$subdomain_host"
|
|
sleep $delay
|
|
done
|
|
done
|
|
|
|
[[ $dry_run -eq 1 ]] && break
|
|
sleep 1
|
|
done
|