From 757f283eea70d74365f0245266e4f472d7bf0e2b Mon Sep 17 00:00:00 2001 From: Saqib Ansari Date: Mon, 20 Apr 2026 13:16:43 +0530 Subject: [PATCH] feat: add `get_stats` function to retrieve concurrency limits --- frappe/__init__.py | 2 +- frappe/concurrency_limiter.py | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/frappe/__init__.py b/frappe/__init__.py index 8151db5edb..3866880e50 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -34,7 +34,6 @@ import orjson from werkzeug.datastructures import Headers import frappe -from frappe.concurrency_limiter import concurrent_limit from frappe.query_builder.utils import ( get_query, get_query_builder, @@ -1595,6 +1594,7 @@ from frappe.utils.error import log_error from frappe.utils.formatters import format_value from frappe.utils.print_utils import get_print, attach_print from frappe.email import sendmail +from frappe.concurrency_limiter import concurrent_limit # for backwards compatibility format = format_value diff --git a/frappe/concurrency_limiter.py b/frappe/concurrency_limiter.py index 2ad61552e0..e0973e7593 100644 --- a/frappe/concurrency_limiter.py +++ b/frappe/concurrency_limiter.py @@ -112,3 +112,14 @@ def concurrent_limit(limit: int | None = None, wait_timeout: int = _DEFAULT_WAIT return wrapper return decorator + + +@frappe.whitelist() +def get_stats() -> dict: + frappe.only_for("System Manager") + cached_limit = _default_limit() + gunicorn_limit = gunicorn_max_concurrency() + return { + "cached_limit": cached_limit, + "gunicorn_limit": gunicorn_limit, + }