From 8b8c381a49efdb4183d8704e3abfdd271c4b2ea7 Mon Sep 17 00:00:00 2001 From: Jacob Date: Sun, 7 Sep 2025 13:34:29 -0500 Subject: [PATCH] Move stats to sorted set, and return in decreasing order --- main.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/main.py b/main.py index f9cdaa0..836ba1e 100644 --- a/main.py +++ b/main.py @@ -3,27 +3,28 @@ import json from typing import Optional +import redis from flask import Flask, Response, request -from redis import Redis -redis_client = Redis(host="redis", port=6379, decode_responses=True) +redis_client = redis.Redis(host="redis", port=6379, decode_responses=True) logging.basicConfig(level=logging.DEBUG) app = Flask(__name__) + def increment_hits(url: str) -> int: - return redis_client.incr(f"hits:{url}") + return redis_client.zincrby(f"hits", 1, url) @app.route("/stats/", methods=["GET"]) def stats(): increment_hits("stats") try: - stats = redis_client.scan_iter(match="hits:*") + stats = redis_client.zscan_iter("hits") if stats is None: app.logger.debug("Uninitialized stats object") return {} - return {"stats": [{stat: redis_client.get(stat)} for stat in stats]} + return {"stats": [{stat[0]: stat[1]} for stat in stats][::-1]} except redis.exceptions.ConnectionError as e: app.logger.exception(e) return Response("Internal Server Error", 500) @@ -59,6 +60,7 @@ def api(subpath: Optional[str] = None): hits = increment_hits(subpath) return {"hits": hits} + @app.route("/test//", methods=["POST"]) def test(num_requests: int): increment_hits("test") -- 2.30.2