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:
+78
-62
@@ -1,31 +1,46 @@
|
||||
#!/bin/bash
|
||||
################################################################################
|
||||
# Script Name: speedtest-metrics.sh
|
||||
# Description: Prometheus exporter for internet and LAN speed metrics
|
||||
#
|
||||
# Collects internet speed tests via Ookla Speedtest CLI against multiple
|
||||
# servers and local network tests via iperf3. Outputs Prometheus-formatted
|
||||
# metrics with per-server labels.
|
||||
#
|
||||
# Author: Phil Connor
|
||||
# Contact: contact@mylinux.work
|
||||
# Website: https://mylinux.work
|
||||
# License: MIT
|
||||
# Version: 3.0
|
||||
#
|
||||
# Usage:
|
||||
# # Output to stdout
|
||||
# ./speedtest-metrics.sh
|
||||
#
|
||||
# # Textfile collector mode (atomic write)
|
||||
# ./speedtest-metrics.sh --textfile
|
||||
#
|
||||
# # Custom output file
|
||||
# ./speedtest-metrics.sh -o /path/to/metrics.prom
|
||||
#
|
||||
# # HTTP server mode
|
||||
# ./speedtest-metrics.sh --http
|
||||
#
|
||||
################################################################################
|
||||
|
||||
#############################################################
|
||||
#### Speedtest Metrics Exporter ####
|
||||
#### Internet & LAN speed metrics for Prometheus ####
|
||||
#### ####
|
||||
#### Author: Phil Connor ####
|
||||
#### Contact: contact@mylinux.work ####
|
||||
#### License: MIT ####
|
||||
#### Version: 2.1 ####
|
||||
#### ####
|
||||
#### Usage: ./speedtest-metrics.sh [OPTIONS] ####
|
||||
#############################################################
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
#########################
|
||||
### Output Mode ###
|
||||
#########################
|
||||
# ============================================================================
|
||||
# CONFIGURATION VARIABLES
|
||||
# ============================================================================
|
||||
|
||||
LISTEN_PORT="${SPEEDTEST_EXPORTER_PORT:-9196}"
|
||||
TEXTFILE_DIR="/var/lib/node_exporter"
|
||||
OUTPUT_FILE=""
|
||||
HTTP_MODE=false
|
||||
HOSTNAME=$(hostname)
|
||||
|
||||
#########################
|
||||
### Parse Arguments ###
|
||||
#########################
|
||||
# ============================================================================
|
||||
# ARGUMENT PARSING
|
||||
# ============================================================================
|
||||
|
||||
show_help() {
|
||||
cat <<EOF
|
||||
@@ -122,14 +137,20 @@ parse_args() {
|
||||
|
||||
parse_args "$@"
|
||||
|
||||
#########################
|
||||
### Metrics Collection ###
|
||||
#########################
|
||||
# ============================================================================
|
||||
# METRICS COLLECTION
|
||||
# ============================================================================
|
||||
|
||||
TEMP_FILE="/tmp/speedtest_$$"
|
||||
|
||||
cleanup() {
|
||||
rm -f "$TEMP_FILE"
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
collect_metrics() {
|
||||
|
||||
# Configuration
|
||||
TEMP_FILE="/tmp/speedtest_$$"
|
||||
IPERF_SERVER="${IPERF_SERVER:-192.168.1.100}" # Set to your local iperf3 server IP
|
||||
IPERF_PORT="${IPERF_PORT:-9182}" # iperf3 port
|
||||
# Multiple speedtest servers - add/remove server IDs as needed
|
||||
@@ -138,11 +159,6 @@ IPERF_PORT="${IPERF_PORT:-9182}" # iperf3 port
|
||||
# New York: 3737 (Verizon), 11570 (Optimum), 17395 (Spectrum)
|
||||
SPEEDTEST_SERVERS="${SPEEDTEST_SERVERS:-auto}" # Comma-separated server IDs or "auto"
|
||||
|
||||
cleanup() {
|
||||
rm -f "$TEMP_FILE"
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
# Record script start time
|
||||
SCRIPT_START_TIME=$(date +%s.%N)
|
||||
|
||||
@@ -322,7 +338,7 @@ for i in "${!SERVER_IDS[@]}"; do
|
||||
result_url="${RESULT_URLS[$i]}"
|
||||
|
||||
cat <<EOF
|
||||
internet_speedtest_latency{server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${PING_LATENCIES[$i]}
|
||||
internet_speedtest_latency{hostname="$HOSTNAME",server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${PING_LATENCIES[$i]}
|
||||
EOF
|
||||
done
|
||||
|
||||
@@ -339,7 +355,7 @@ for i in "${!SERVER_IDS[@]}"; do
|
||||
server_country="${SERVER_COUNTRIES[$i]}"
|
||||
|
||||
cat <<EOF
|
||||
internet_speedtest_latency_low{server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${PING_LOWS[$i]}
|
||||
internet_speedtest_latency_low{hostname="$HOSTNAME",server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${PING_LOWS[$i]}
|
||||
EOF
|
||||
done
|
||||
|
||||
@@ -356,7 +372,7 @@ for i in "${!SERVER_IDS[@]}"; do
|
||||
server_country="${SERVER_COUNTRIES[$i]}"
|
||||
|
||||
cat <<EOF
|
||||
internet_speedtest_latency_high{server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${PING_HIGHS[$i]}
|
||||
internet_speedtest_latency_high{hostname="$HOSTNAME",server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${PING_HIGHS[$i]}
|
||||
EOF
|
||||
done
|
||||
|
||||
@@ -373,7 +389,7 @@ for i in "${!SERVER_IDS[@]}"; do
|
||||
server_country="${SERVER_COUNTRIES[$i]}"
|
||||
|
||||
cat <<EOF
|
||||
internet_speedtest_jitter{server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${PING_JITTERS[$i]}
|
||||
internet_speedtest_jitter{hostname="$HOSTNAME",server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${PING_JITTERS[$i]}
|
||||
EOF
|
||||
done
|
||||
|
||||
@@ -390,7 +406,7 @@ for i in "${!SERVER_IDS[@]}"; do
|
||||
server_country="${SERVER_COUNTRIES[$i]}"
|
||||
|
||||
cat <<EOF
|
||||
internet_speedtest_download{server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${DOWNLOAD_MBPS[$i]}
|
||||
internet_speedtest_download{hostname="$HOSTNAME",server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${DOWNLOAD_MBPS[$i]}
|
||||
EOF
|
||||
done
|
||||
|
||||
@@ -407,7 +423,7 @@ for i in "${!SERVER_IDS[@]}"; do
|
||||
server_country="${SERVER_COUNTRIES[$i]}"
|
||||
|
||||
cat <<EOF
|
||||
internet_speedtest_download_size{server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${DOWNLOAD_SIZES[$i]}
|
||||
internet_speedtest_download_size{hostname="$HOSTNAME",server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${DOWNLOAD_SIZES[$i]}
|
||||
EOF
|
||||
done
|
||||
|
||||
@@ -424,7 +440,7 @@ for i in "${!SERVER_IDS[@]}"; do
|
||||
server_country="${SERVER_COUNTRIES[$i]}"
|
||||
|
||||
cat <<EOF
|
||||
internet_speedtest_upload{server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${UPLOAD_MBPS[$i]}
|
||||
internet_speedtest_upload{hostname="$HOSTNAME",server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${UPLOAD_MBPS[$i]}
|
||||
EOF
|
||||
done
|
||||
|
||||
@@ -441,7 +457,7 @@ for i in "${!SERVER_IDS[@]}"; do
|
||||
server_country="${SERVER_COUNTRIES[$i]}"
|
||||
|
||||
cat <<EOF
|
||||
internet_speedtest_upload_size{server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${UPLOAD_SIZES[$i]}
|
||||
internet_speedtest_upload_size{hostname="$HOSTNAME",server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${UPLOAD_SIZES[$i]}
|
||||
EOF
|
||||
done
|
||||
|
||||
@@ -458,7 +474,7 @@ for i in "${!SERVER_IDS[@]}"; do
|
||||
server_country="${SERVER_COUNTRIES[$i]}"
|
||||
|
||||
cat <<EOF
|
||||
internet_speedtest_packet_loss{server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${PACKET_LOSSES[$i]}
|
||||
internet_speedtest_packet_loss{hostname="$HOSTNAME",server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${PACKET_LOSSES[$i]}
|
||||
EOF
|
||||
done
|
||||
|
||||
@@ -475,7 +491,7 @@ for i in "${!SERVER_IDS[@]}"; do
|
||||
server_country="${SERVER_COUNTRIES[$i]}"
|
||||
|
||||
cat <<EOF
|
||||
internet_speedtest_timestamp{server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${TEST_TIMESTAMPS[$i]}
|
||||
internet_speedtest_timestamp{hostname="$HOSTNAME",server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${TEST_TIMESTAMPS[$i]}
|
||||
EOF
|
||||
done
|
||||
|
||||
@@ -495,7 +511,7 @@ for i in "${!SERVER_IDS[@]}"; do
|
||||
result_url="${RESULT_URLS[$i]}"
|
||||
|
||||
cat <<EOF
|
||||
internet_speedtest_info{server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country",external_ip="$external_ip",isp="$isp",result_url="$result_url"} 1
|
||||
internet_speedtest_info{hostname="$HOSTNAME",server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country",external_ip="$external_ip",isp="$isp",result_url="$result_url"} 1
|
||||
EOF
|
||||
done
|
||||
|
||||
@@ -512,7 +528,7 @@ for i in "${!SERVER_IDS[@]}"; do
|
||||
server_country="${SERVER_COUNTRIES[$i]}"
|
||||
|
||||
cat <<EOF
|
||||
internet_speedtest_success{server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${SUCCESSES[$i]}
|
||||
internet_speedtest_success{hostname="$HOSTNAME",server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${SUCCESSES[$i]}
|
||||
EOF
|
||||
done
|
||||
|
||||
@@ -520,82 +536,82 @@ cat <<EOF
|
||||
|
||||
# HELP local_network_download Local network download speed in Mbps
|
||||
# TYPE local_network_download gauge
|
||||
local_network_download $local_download_mbps
|
||||
local_network_download{hostname="$HOSTNAME"} $local_download_mbps
|
||||
|
||||
# HELP local_network_upload Local network upload speed in Mbps
|
||||
# TYPE local_network_upload gauge
|
||||
local_network_upload $local_upload_mbps
|
||||
local_network_upload{hostname="$HOSTNAME"} $local_upload_mbps
|
||||
|
||||
# HELP local_network_download_bytes Total bytes downloaded in local network test
|
||||
# TYPE local_network_download_bytes gauge
|
||||
local_network_download_bytes $local_download_bytes
|
||||
local_network_download_bytes{hostname="$HOSTNAME"} $local_download_bytes
|
||||
|
||||
# HELP local_network_upload_bytes Total bytes uploaded in local network test
|
||||
# TYPE local_network_upload_bytes gauge
|
||||
local_network_upload_bytes $local_upload_bytes
|
||||
local_network_upload_bytes{hostname="$HOSTNAME"} $local_upload_bytes
|
||||
|
||||
# HELP local_network_download_retransmits TCP retransmissions during download test
|
||||
# TYPE local_network_download_retransmits gauge
|
||||
local_network_download_retransmits $local_download_retransmits
|
||||
local_network_download_retransmits{hostname="$HOSTNAME"} $local_download_retransmits
|
||||
|
||||
# HELP local_network_upload_retransmits TCP retransmissions during upload test
|
||||
# TYPE local_network_upload_retransmits gauge
|
||||
local_network_upload_retransmits $local_upload_retransmits
|
||||
local_network_upload_retransmits{hostname="$HOSTNAME"} $local_upload_retransmits
|
||||
|
||||
# HELP local_network_download_rtt Mean round-trip time during download test in milliseconds
|
||||
# TYPE local_network_download_rtt gauge
|
||||
local_network_download_rtt $local_download_rtt
|
||||
local_network_download_rtt{hostname="$HOSTNAME"} $local_download_rtt
|
||||
|
||||
# HELP local_network_upload_rtt Mean round-trip time during upload test in milliseconds
|
||||
# TYPE local_network_upload_rtt gauge
|
||||
local_network_upload_rtt $local_upload_rtt
|
||||
local_network_upload_rtt{hostname="$HOSTNAME"} $local_upload_rtt
|
||||
|
||||
# HELP local_network_download_rtt_variance RTT variance during download test in milliseconds
|
||||
# TYPE local_network_download_rtt_variance gauge
|
||||
local_network_download_rtt_variance $local_download_rtt_var
|
||||
local_network_download_rtt_variance{hostname="$HOSTNAME"} $local_download_rtt_var
|
||||
|
||||
# HELP local_network_upload_rtt_variance RTT variance during upload test in milliseconds
|
||||
# TYPE local_network_upload_rtt_variance gauge
|
||||
local_network_upload_rtt_variance $local_upload_rtt_var
|
||||
local_network_upload_rtt_variance{hostname="$HOSTNAME"} $local_upload_rtt_var
|
||||
|
||||
# HELP local_network_download_cpu_local Local CPU utilization during download test (percentage)
|
||||
# TYPE local_network_download_cpu_local gauge
|
||||
local_network_download_cpu_local $local_download_cpu_local
|
||||
local_network_download_cpu_local{hostname="$HOSTNAME"} $local_download_cpu_local
|
||||
|
||||
# HELP local_network_upload_cpu_local Local CPU utilization during upload test (percentage)
|
||||
# TYPE local_network_upload_cpu_local gauge
|
||||
local_network_upload_cpu_local $local_upload_cpu_local
|
||||
local_network_upload_cpu_local{hostname="$HOSTNAME"} $local_upload_cpu_local
|
||||
|
||||
# HELP local_network_download_cpu_remote Remote CPU utilization during download test (percentage)
|
||||
# TYPE local_network_download_cpu_remote gauge
|
||||
local_network_download_cpu_remote $local_download_cpu_remote
|
||||
local_network_download_cpu_remote{hostname="$HOSTNAME"} $local_download_cpu_remote
|
||||
|
||||
# HELP local_network_upload_cpu_remote Remote CPU utilization during upload test (percentage)
|
||||
# TYPE local_network_upload_cpu_remote gauge
|
||||
local_network_upload_cpu_remote $local_upload_cpu_remote
|
||||
local_network_upload_cpu_remote{hostname="$HOSTNAME"} $local_upload_cpu_remote
|
||||
|
||||
# HELP local_network_download_congestion_window Maximum TCP congestion window size during download test in bytes
|
||||
# TYPE local_network_download_congestion_window gauge
|
||||
local_network_download_congestion_window $local_download_congestion_window
|
||||
local_network_download_congestion_window{hostname="$HOSTNAME"} $local_download_congestion_window
|
||||
|
||||
# HELP local_network_upload_congestion_window Maximum TCP congestion window size during upload test in bytes
|
||||
# TYPE local_network_upload_congestion_window gauge
|
||||
local_network_upload_congestion_window $local_upload_congestion_window
|
||||
local_network_upload_congestion_window{hostname="$HOSTNAME"} $local_upload_congestion_window
|
||||
|
||||
# HELP local_network_test_success Whether local network test succeeded (1=success, 0=failed)
|
||||
# TYPE local_network_test_success gauge
|
||||
local_network_test_success $((local_download_success && local_upload_success))
|
||||
local_network_test_success{hostname="$HOSTNAME"} $((local_download_success && local_upload_success))
|
||||
|
||||
# HELP speedtest_script_runtime_seconds Total script execution time in seconds
|
||||
# TYPE speedtest_script_runtime_seconds gauge
|
||||
speedtest_script_runtime_seconds $SCRIPT_RUNTIME
|
||||
speedtest_script_runtime_seconds{hostname="$HOSTNAME"} $SCRIPT_RUNTIME
|
||||
EOF
|
||||
|
||||
}
|
||||
|
||||
#########################
|
||||
### Output Handling ###
|
||||
#########################
|
||||
# ============================================================================
|
||||
# OUTPUT HANDLING
|
||||
# ============================================================================
|
||||
|
||||
write_output() {
|
||||
local metrics
|
||||
|
||||
Reference in New Issue
Block a user