diff --git a/snikket_web/__init__.py b/snikket_web/__init__.py index b3c5015..78e5a8d 100644 --- a/snikket_web/__init__.py +++ b/snikket_web/__init__.py @@ -160,6 +160,7 @@ class AppConfig: # Future versions may change this default, and the standard deployment # tools may also very well override it. max_avatar_size = environ.var(1024*1024, converter=int) + show_metrics = environ.bool_var(True) _UPPER_CASE = "".join(map(chr, range(ord("A"), ord("Z")+1))) @@ -191,6 +192,7 @@ def create_app() -> quart.Quart: app.config["AVATAR_CACHE_TTL"] = config.avatar_cache_ttl app.config["APPLE_STORE_URL"] = config.apple_store_url app.config["MAX_AVATAR_SIZE"] = config.max_avatar_size + app.config["SHOW_METRICS"] = config.show_metrics app.context_processor(proc) app.register_error_handler( diff --git a/snikket_web/admin.py b/snikket_web/admin.py index d7ca471..65445a0 100644 --- a/snikket_web/admin.py +++ b/snikket_web/admin.py @@ -20,6 +20,7 @@ from quart import ( request, abort, flash, + current_app, ) from flask_babel import lazy_gettext as _l, _ @@ -33,7 +34,11 @@ bp = Blueprint("admin", __name__, url_prefix="/admin") @bp.route("/") @client.require_admin_session() async def index() -> str: - return await render_template("admin_home.html") + show_metrics = current_app.config["SHOW_METRICS"] + return await render_template( + "admin_home.html", + show_metrics=show_metrics, + ) class PasswordResetLinkPost(BaseForm): @@ -575,7 +580,9 @@ def get_system_stats() -> typing.MutableMapping[ (time.monotonic() - _MONOTONIC_EPOCH) ) + mem_total, mem_available = None, None load5: typing.Optional[float] = None + try: with open("/proc/loadavg") as f: stats = f.read().split() @@ -583,7 +590,6 @@ def get_system_stats() -> typing.MutableMapping[ except (ValueError, IndexError, TypeError, OSError): pass - mem_total, mem_available = None, None try: with open("/proc/meminfo") as f: for line in f: @@ -650,37 +656,43 @@ async def system() -> typing.Union[str, quart.Response]: # redirect only if not previewing return redirect(url_for(".system")) - version = await client.get_server_version() - now = time.time() - try: - prosody_metrics = await client.get_system_metrics() - except quart.exceptions.NotFound: - # server does not offer the endpoint for whatever reason -- ignore - prosody_metrics = {} + version = None + now = None + show_metrics = current_app.config["SHOW_METRICS"] + if show_metrics: + version = await client.get_server_version() + now = time.time() + try: + prosody_metrics = await client.get_system_metrics() + except quart.exceptions.NotFound: + # server does not offer the endpoint for whatever reason -- ignore + prosody_metrics = {} - metrics = get_system_stats() - try: - prosody_cpu_metrics = prosody_metrics["cpu"] - except KeyError: - pass + metrics = get_system_stats() + try: + prosody_cpu_metrics = prosody_metrics["cpu"] + except KeyError: + pass + else: + metrics["prosody_cpu"] = (prosody_cpu_metrics["value"] / + (now - prosody_cpu_metrics["since"])) + + try: + metrics["prosody_rss"] = prosody_metrics["memory"] + except KeyError: + pass + + try: + metrics["prosody_devices"] = prosody_metrics["c2s"] + except KeyError: + pass + + for k in list(metrics.keys()): + if metrics[k] is None: + # so that defaulting in jinja works + del metrics[k] else: - metrics["prosody_cpu"] = (prosody_cpu_metrics["value"] / - (now - prosody_cpu_metrics["since"])) - - try: - metrics["prosody_rss"] = prosody_metrics["memory"] - except KeyError: - pass - - try: - metrics["prosody_devices"] = prosody_metrics["c2s"] - except KeyError: - pass - - for k in list(metrics.keys()): - if metrics[k] is None: - # so that defaulting in jinja works - del metrics[k] + metrics = {} return await render_template( "admin_system.html", @@ -688,4 +700,5 @@ async def system() -> typing.Union[str, quart.Response]: version=_version.version, prosody_version=version, form=form, + show_metrics=show_metrics, ) diff --git a/snikket_web/templates/admin_home.html b/snikket_web/templates/admin_home.html index f76fc03..934b611 100644 --- a/snikket_web/templates/admin_home.html +++ b/snikket_web/templates/admin_home.html @@ -34,7 +34,11 @@
{% trans %}View the server status or send a broadcast message to all users.{% endtrans %}
+ {%- else -%} +{% trans %}Send a broadcast message to all users.{% endtrans %}
+ {%- endif -%} {#- -#}