from quart_common.web.decorators import restrict_ip_addresses from quart import Blueprint, jsonify from typing import TYPE_CHECKING if TYPE_CHECKING: from server.Server import Server def create_metrics_blueprint(server:'Server') -> Blueprint: blueprint = Blueprint('metrics', __name__) @blueprint.get('/metrics') @restrict_ip_addresses(allow=['192.168.188.0/24', '192.168.200.0/24'], abort_code=404) async def metrics(): snapshot = await server.metrics_collector.build_snapshot( server.game_runtime.game_last_seen_unix, server.game_runtime.game_move_counts, ) return jsonify(snapshot) @blueprint.get('/metrics/prometheus') @restrict_ip_addresses(allow=['192.168.188.0/24', '192.168.200.0/24'], abort_code=404) async def metrics_prometheus(): snapshot = await server.metrics_collector.build_snapshot( server.game_runtime.game_last_seen_unix, server.game_runtime.game_move_counts, ) return ( server.metrics_collector.build_prometheus_metrics(snapshot), 200, {'Content-Type': 'text/plain; version=0.0.4; charset=utf-8'}, ) return blueprint