diff --git a/app/metrics.py b/app/metrics.py index 9401d3d..dee610a 100644 --- a/app/metrics.py +++ b/app/metrics.py @@ -14,6 +14,9 @@ _paste_deleted_counter = None _rate_limit_counter = None _pow_counter = None _dedup_counter = None +_url_created_counter = None +_url_accessed_counter = None +_url_deleted_counter = None _request_duration_histogram = None @@ -23,7 +26,9 @@ def setup_custom_metrics(app: Flask) -> None: Should be called after prometheus_flask_exporter is set up. """ global _paste_created_counter, _paste_accessed_counter, _paste_deleted_counter - global _rate_limit_counter, _pow_counter, _dedup_counter, _request_duration_histogram + global _rate_limit_counter, _pow_counter, _dedup_counter + global _url_created_counter, _url_accessed_counter, _url_deleted_counter + global _request_duration_histogram if app.config.get("TESTING"): return @@ -70,6 +75,24 @@ def setup_custom_metrics(app: Flask) -> None: ["outcome"], ) + _url_created_counter = Counter( + "flaskpaste_url_created_total", + "Total number of short URL creation attempts", + ["auth_type", "outcome"], + ) + + _url_accessed_counter = Counter( + "flaskpaste_url_accessed_total", + "Total number of short URL accesses", + ["auth_type"], + ) + + _url_deleted_counter = Counter( + "flaskpaste_url_deleted_total", + "Total number of short URL deletion attempts", + ["auth_type", "outcome"], + ) + _request_duration_histogram = Histogram( "flaskpaste_request_duration_seconds", "Request duration in seconds", @@ -143,6 +166,24 @@ def record_dedup(outcome: str) -> None: _dedup_counter.labels(outcome=outcome).inc() +def record_url_created(auth_type: str, outcome: str) -> None: + """Record a short URL creation attempt.""" + if _url_created_counter: + _url_created_counter.labels(auth_type=auth_type, outcome=outcome).inc() + + +def record_url_accessed(auth_type: str) -> None: + """Record a short URL access.""" + if _url_accessed_counter: + _url_accessed_counter.labels(auth_type=auth_type).inc() + + +def record_url_deleted(auth_type: str, outcome: str) -> None: + """Record a short URL deletion attempt.""" + if _url_deleted_counter: + _url_deleted_counter.labels(auth_type=auth_type, outcome=outcome).inc() + + def observe_request_duration(method: str, endpoint: str, status: int, duration: float) -> None: """Record request duration.