#!/bin/sh # Only ordinary console commands: no /c, /sc, Lua, mods, or achievement changes. set -eu trap 'exit 0' TERM INT metrics_dir=${METRICS_DIR:-/metrics} mkdir -p "$metrics_dir" while :; do now=$(date +%s) up=0 players='' if response=$(timeout 8 rcon /players online 2>/dev/null); then players=$(printf '%s\n' "$response" | sed -n 's/^Online players (\([0-9][0-9]*\)):.*/\1/p' | head -1) [ -z "$players" ] || up=1 fi { echo '# HELP factorio_server_up Authenticated non-Lua RCON player query succeeded.' echo '# TYPE factorio_server_up gauge' echo "factorio_server_up $up" echo '# HELP factorio_players_online Connected players; omitted if the query fails.' echo '# TYPE factorio_players_online gauge' [ -z "$players" ] || echo "factorio_players_online $players" echo '# HELP factorio_collector_last_poll_timestamp_seconds Last completed polling attempt.' echo '# TYPE factorio_collector_last_poll_timestamp_seconds gauge' echo "factorio_collector_last_poll_timestamp_seconds $now" } > "$metrics_dir/factorio.prom.tmp" mv "$metrics_dir/factorio.prom.tmp" "$metrics_dir/factorio.prom" sleep 15 done