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)
hits = increment_hits(subpath)
return {"hits": hits}
+
@app.route("/test/<int:num_requests>/", methods=["POST"])
def test(num_requests: int):
increment_hits("test")