From: Jacob Date: Sun, 7 Sep 2025 18:34:29 +0000 (-0500) Subject: Move stats to sorted set, and return in decreasing order X-Git-Url: https://git.jacobcasper.com/?a=commitdiff_plain;h=8b8c381a49efdb4183d8704e3abfdd271c4b2ea7;p=close-be.git Move stats to sorted set, and return in decreasing order --- 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")