56 lines
1.9 KiB
Python
56 lines
1.9 KiB
Python
|
from prometheus_client import start_http_server, Gauge
|
||
|
import urllib.request
|
||
|
import re
|
||
|
import time
|
||
|
import yaml
|
||
|
|
||
|
# Create a metric to track the number of registered users per domain
|
||
|
registered_users_gauge = Gauge(
|
||
|
"registered_users", "Number of registered users", ["domain"]
|
||
|
)
|
||
|
|
||
|
headers = {
|
||
|
"User-Agent": "Mozilla/5.0 (compatible; prometheus-piped/dev; +https://git.private.coffee/PrivateCoffee/prometheus-piped)",
|
||
|
}
|
||
|
|
||
|
|
||
|
def fetch_registered_users(domain):
|
||
|
try:
|
||
|
# Construct the full API URL
|
||
|
api_url = f"https://{domain}/registered/badge"
|
||
|
# Fetch the badge URL
|
||
|
req = urllib.request.Request(api_url, headers=headers)
|
||
|
with urllib.request.urlopen(req) as response:
|
||
|
final_url = response.geturl()
|
||
|
# Extract the number of registered users from the redirect URL
|
||
|
match = re.search(r"Registered%20Users-(\d+)-blue", final_url)
|
||
|
if match:
|
||
|
return int(match.group(1))
|
||
|
except Exception as e:
|
||
|
print(f"Error fetching registered users from {domain}: {e}")
|
||
|
return 0
|
||
|
|
||
|
|
||
|
def update_registered_users(domains, update_interval):
|
||
|
while True:
|
||
|
for domain in domains:
|
||
|
# Fetch the number of registered users and update the gauge
|
||
|
registered_users = fetch_registered_users(domain)
|
||
|
registered_users_gauge.labels(domain=domain).set(registered_users)
|
||
|
# Sleep for a while before fetching the data again
|
||
|
time.sleep(update_interval)
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
# Load configuration from YAML file
|
||
|
with open("config.yaml", "r") as file:
|
||
|
config = yaml.safe_load(file)
|
||
|
|
||
|
domains = config["piped"]
|
||
|
update_interval = config.get("update_interval", 60)
|
||
|
|
||
|
# Start up the server to expose the metrics
|
||
|
start_http_server(8098)
|
||
|
# Update the registered users gauge periodically
|
||
|
update_registered_users(domains, update_interval)
|