Sync all scripts from website downloads — 352 scripts total

Includes updated JS challenge scripts with Claude-User whitelist,
same-site referer bypass, Blackbox-Exporter allowed bot, and all
new exporters, cheat sheets, and automation scripts.
This commit is contained in:
2026-05-25 03:31:08 +02:00
parent dbd6bf0324
commit a1a17e81a1
332 changed files with 174509 additions and 1106 deletions
+224
View File
@@ -0,0 +1,224 @@
#!/bin/bash
################################################
#### Container Health Prometheus Exporter ####
#### for node_exporter textfile collector ####
#### ####
#### Author: Phil Connor ####
#### Contact: contact@mylinux.work ####
#### Version: 1.0.0.20260309 ####
################################################
set -o pipefail
SCRIPT_NAME=$(basename "$0")
readonly SCRIPT_NAME
# Default configuration
readonly DEFAULT_NODE_DIR="/var/lib/node_exporter"
readonly DEFAULT_COLLECTION_INTERVAL=60
# Configuration variables (can be overridden by environment)
NODE_DIR=${NODE_DIR:-$DEFAULT_NODE_DIR}
COLLECTION_INTERVAL=${COLLECTION_INTERVAL:-$DEFAULT_COLLECTION_INTERVAL}
DEBUG=${DEBUG:-}
# Runtime flags
RUN_MODE="once"
handle_error() {
local exit_code=$1
local line_number=$2
echo "Error: $SCRIPT_NAME failed at line $line_number with exit code $exit_code" >&2
exit "$exit_code"
}
trap 'handle_error $? $LINENO' ERR
debug_echo() {
if [[ -n "$DEBUG" ]]; then
echo "[DEBUG] $*" >&2
fi
}
show_help() {
cat << EOF
Usage: $SCRIPT_NAME [OPTIONS]
Container health metrics collector for Prometheus node_exporter textfile directory.
Collects per-container health check status, image age, restart counts, exit codes,
and running state via docker inspect and writes them as Prometheus metrics.
OPTIONS:
--once Run collection once and exit (default)
--daemon Run continuously at COLLECTION_INTERVAL
--help, -h Show this help message
ENVIRONMENT VARIABLES:
NODE_DIR Node exporter textfile directory (default: $DEFAULT_NODE_DIR)
COLLECTION_INTERVAL Seconds between collections in daemon mode (default: $DEFAULT_COLLECTION_INTERVAL)
DEBUG Enable debug output
EXAMPLES:
$SCRIPT_NAME --once
$SCRIPT_NAME --daemon
COLLECTION_INTERVAL=30 $SCRIPT_NAME --daemon
OUTPUT:
Writes metrics to \$NODE_DIR/textfile_collector/container_health.prom
EOF
exit 0
}
# Parse arguments
while [[ $# -gt 0 ]]; do
case "$1" in
--once) RUN_MODE="once"; shift ;;
--daemon) RUN_MODE="daemon"; shift ;;
--help|-h) show_help ;;
*) echo "Unknown option: $1" >&2; show_help ;;
esac
done
# Validate configuration
validate_config() {
if ! command -v docker &>/dev/null; then
echo "Error: docker is not installed or not in PATH" >&2
exit 1
fi
local textfile_dir="${NODE_DIR}/textfile_collector"
if [[ ! -d "$textfile_dir" ]]; then
echo "Error: Textfile collector directory not found: $textfile_dir" >&2
echo "Create it: sudo mkdir -p $textfile_dir" >&2
exit 1
fi
}
# Collect metrics for all containers
collect_all() {
local output_dir="${NODE_DIR}/textfile_collector"
local output_file="${output_dir}/container_health.prom"
local temp_file
temp_file=$(mktemp "${output_file}.XXXXXX")
local start_time
start_time=$(date +%s%N)
local success=1
debug_echo "Starting collection..."
{
local containers
containers=$(docker ps -a --format '{{.Names}}')
if [[ -z "$containers" ]]; then
debug_echo "No containers found"
fi
# Per-container metrics headers
echo "# HELP container_health_status Health check status of the container (1 for current status)."
echo "# TYPE container_health_status gauge"
echo "# HELP container_image_age_seconds Age of the container image in seconds."
echo "# TYPE container_image_age_seconds gauge"
echo "# HELP container_restart_count Number of container restarts."
echo "# TYPE container_restart_count gauge"
echo "# HELP container_exit_code Exit code of the container."
echo "# TYPE container_exit_code gauge"
echo "# HELP container_running Whether the container is running (1=running, 0=stopped)."
echo "# TYPE container_running gauge"
local now
now=$(date +%s)
while IFS= read -r container_name; do
[[ -z "$container_name" ]] && continue
debug_echo "Inspecting container: $container_name"
# Extract all fields in a single docker inspect call
local inspect_data
inspect_data=$(docker inspect --format \
'{{.Config.Image}}|{{if .State.Health}}{{.State.Health.Status}}{{else}}none{{end}}|{{.Created}}|{{.RestartCount}}|{{.State.ExitCode}}|{{.State.Running}}' \
"$container_name" 2>/dev/null) || {
debug_echo "Failed to inspect container: $container_name"
success=0
continue
}
local image health_status created restart_count exit_code running_raw
IFS='|' read -r image health_status created restart_count exit_code running_raw <<< "$inspect_data"
# Calculate image age in seconds
local created_epoch image_age
created_epoch=$(date -d "$created" +%s 2>/dev/null) || created_epoch=0
image_age=$((now - created_epoch))
# Convert running boolean to 0/1
local running=0
if [[ "$running_raw" == "true" ]]; then
running=1
fi
# Health status — emit a 1 for the current status, 0 for others
for status in healthy unhealthy starting none; do
if [[ "$health_status" == "$status" ]]; then
echo "container_health_status{name=\"${container_name}\",image=\"${image}\",status=\"${status}\"} 1"
else
echo "container_health_status{name=\"${container_name}\",image=\"${image}\",status=\"${status}\"} 0"
fi
done
echo "container_image_age_seconds{name=\"${container_name}\",image=\"${image}\"} ${image_age}"
echo "container_restart_count{name=\"${container_name}\",image=\"${image}\"} ${restart_count}"
echo "container_exit_code{name=\"${container_name}\",image=\"${image}\"} ${exit_code}"
echo "container_running{name=\"${container_name}\",image=\"${image}\"} ${running}"
done <<< "$containers"
# Exporter metadata
local end_time duration
end_time=$(date +%s%N)
duration=$(awk "BEGIN {printf \"%.4f\", ($end_time - $start_time) / 1000000000}")
echo ""
echo "# HELP container_health_exporter_duration_seconds Time taken to collect metrics."
echo "# TYPE container_health_exporter_duration_seconds gauge"
echo "container_health_exporter_duration_seconds ${duration}"
echo ""
echo "# HELP container_health_exporter_last_run_timestamp Unix timestamp of last collection."
echo "# TYPE container_health_exporter_last_run_timestamp gauge"
echo "container_health_exporter_last_run_timestamp $(date +%s)"
echo ""
echo "# HELP container_health_exporter_success Whether the last collection succeeded (1=success, 0=failure)."
echo "# TYPE container_health_exporter_success gauge"
echo "container_health_exporter_success ${success}"
} > "$temp_file" 2>/dev/null
mv "$temp_file" "$output_file"
debug_echo "Collection complete. Wrote to $output_file"
}
# Main
main() {
validate_config
case "$RUN_MODE" in
once)
collect_all
;;
daemon)
echo "$SCRIPT_NAME running in daemon mode (interval: ${COLLECTION_INTERVAL}s)"
while true; do
collect_all
sleep "$COLLECTION_INTERVAL"
done
;;
esac
}
main