move Server code into more services and use them into blueprints or server
This commit is contained in:
@@ -23,10 +23,10 @@ def create_battlesnake_blueprint(server:'Server') -> Blueprint:
|
||||
@blueprint.post('/start')
|
||||
async def on_start():
|
||||
server.metrics_collector.record_http_request('start')
|
||||
await server._prune_stale_games()
|
||||
await server.game_runtime.prune_stale_games()
|
||||
game_state = await request.get_json()
|
||||
await server._create_game_board(game_state)
|
||||
await server._record_gameplay_start(game_state)
|
||||
await server.game_runtime.create_game_board(game_state, snake_builder=server.snake_builder)
|
||||
await server.gameplay_tracking.record_gameplay_start(game_state)
|
||||
await await_log(server.logger.info(f'GAME START: {game_state['game']}'))
|
||||
return 'ok'
|
||||
|
||||
@@ -35,10 +35,10 @@ def create_battlesnake_blueprint(server:'Server') -> Blueprint:
|
||||
server.metrics_collector.record_http_request('move')
|
||||
game_state = await request.get_json()
|
||||
move_started = time.perf_counter()
|
||||
game_board = cast(GameBoard, await server._get_game_board(game_state))
|
||||
game_board = cast(GameBoard, await server.game_runtime.get_game_board(game_state, snake_builder=server.snake_builder))
|
||||
next_move = game_board.snake_neat_make_a_move()
|
||||
await server._persist_game_board(game_state['game']['id'], game_board)
|
||||
await server._record_gameplay_turn(game_state, next_move, game_board)
|
||||
await server.game_runtime.persist_game_board(game_state['game']['id'], game_board)
|
||||
await server.gameplay_tracking.record_gameplay_turn(game_state, next_move, game_board)
|
||||
elapsed_ms = (time.perf_counter() - move_started) * 1000.0
|
||||
await server.metrics_collector.record_move(next_move, elapsed_ms)
|
||||
|
||||
@@ -50,10 +50,10 @@ def create_battlesnake_blueprint(server:'Server') -> Blueprint:
|
||||
@blueprint.post('/end')
|
||||
async def on_end():
|
||||
server.metrics_collector.record_http_request('end')
|
||||
await server._prune_stale_games()
|
||||
await server.game_runtime.prune_stale_games()
|
||||
game_state = await request.get_json()
|
||||
if server.store_game_state:
|
||||
game_board = cast(GameBoard, await server._get_game_board(game_state, end=True))
|
||||
game_board = cast(GameBoard, await server.game_runtime.get_game_board(game_state, snake_builder=server.snake_builder, end=True))
|
||||
if server.check_tls_security:
|
||||
await game_board.save(
|
||||
StorageLoader.build(server.storage_type),
|
||||
@@ -68,14 +68,14 @@ def create_battlesnake_blueprint(server:'Server') -> Blueprint:
|
||||
database=os.getenv('EDGEDB_DATABASE', None),
|
||||
)
|
||||
|
||||
await server._record_gameplay_end(game_state)
|
||||
await server._push_dashboard_games_update(game_state)
|
||||
await server.gameplay_tracking.record_gameplay_end(game_state)
|
||||
await server.dashboard_query.push_dashboard_games_update(game_state)
|
||||
await await_log(server.logger.info(f'GAME ENDED: Winner is {[x['name'] for x in game_state['board']['snakes']]}'))
|
||||
await server._delete_game_board(game_state)
|
||||
await server.game_runtime.delete_game_board(game_state)
|
||||
await server.metrics_collector.record_game_end(game_state)
|
||||
return 'ok'
|
||||
|
||||
@blueprint.get("/cleanup")
|
||||
@blueprint.get('/cleanup')
|
||||
async def cleanup():
|
||||
results = server._cleanup_database()
|
||||
return jsonify(data=json.loads(results), status=200)
|
||||
|
||||
@@ -18,8 +18,8 @@ def create_dashboard_blueprint(server:'Server') -> Blueprint:
|
||||
@blueprint.get('/dashboard')
|
||||
async def dashboard_view():
|
||||
initial_game_id = request.args.get('game_id', '')
|
||||
initial_summary = await server._get_dashboard_summary()
|
||||
initial_games = await server._get_dashboard_games(limit=100)
|
||||
initial_summary = await server.dashboard_query.get_dashboard_summary()
|
||||
initial_games = await server.dashboard_query.get_dashboard_games(limit=100)
|
||||
return await render_template(
|
||||
'dashboard.html',
|
||||
initial_game_id=initial_game_id,
|
||||
@@ -42,12 +42,12 @@ def create_dashboard_blueprint(server:'Server') -> Blueprint:
|
||||
ws_hub = server.dashboard_ws_hub
|
||||
websocket_task = asyncio.current_task()
|
||||
if websocket_task is not None:
|
||||
await server._register_dashboard_ws_task(websocket_task)
|
||||
await ws_hub.register_task(websocket_task)
|
||||
|
||||
subscriber_queue:asyncio.Queue[str] = asyncio.Queue(maxsize=20)
|
||||
await server._register_dashboard_game_subscriber(subscriber_queue)
|
||||
await ws_hub.register_subscriber(subscriber_queue)
|
||||
try:
|
||||
initial_payload = await server._build_dashboard_games_event()
|
||||
initial_payload = await server.dashboard_query.build_dashboard_games_event()
|
||||
await asyncio.wait_for(
|
||||
websocket.send(json.dumps(initial_payload)), timeout=1.5
|
||||
)
|
||||
@@ -76,7 +76,7 @@ def create_dashboard_blueprint(server:'Server') -> Blueprint:
|
||||
except Exception:
|
||||
break
|
||||
|
||||
response_event = await server._handle_dashboard_ws_request(request_payload_raw)
|
||||
response_event = await server.dashboard_query.handle_dashboard_ws_request(request_payload_raw)
|
||||
if response_event is not None:
|
||||
await asyncio.wait_for(
|
||||
websocket.send(json.dumps(response_event)),
|
||||
@@ -112,8 +112,8 @@ def create_dashboard_blueprint(server:'Server') -> Blueprint:
|
||||
except Exception:
|
||||
pass
|
||||
finally:
|
||||
await server._unregister_dashboard_game_subscriber(subscriber_queue)
|
||||
await ws_hub.unregister_subscriber(subscriber_queue)
|
||||
if websocket_task is not None:
|
||||
await server._unregister_dashboard_ws_task(websocket_task)
|
||||
await ws_hub.unregister_task(websocket_task)
|
||||
|
||||
return blueprint
|
||||
|
||||
@@ -4,27 +4,27 @@ from typing import TYPE_CHECKING
|
||||
if TYPE_CHECKING:
|
||||
from server.Server import Server
|
||||
|
||||
def create_metrics_blueprint(server:"Server") -> Blueprint:
|
||||
blueprint = Blueprint("metrics", __name__)
|
||||
def create_metrics_blueprint(server:'Server') -> Blueprint:
|
||||
blueprint = Blueprint('metrics', __name__)
|
||||
|
||||
@blueprint.get("/metrics")
|
||||
@blueprint.get('/metrics')
|
||||
async def metrics():
|
||||
snapshot = await server.metrics_collector.build_snapshot(
|
||||
server.game_last_seen_unix,
|
||||
server.game_move_counts,
|
||||
server.game_runtime.game_last_seen_unix,
|
||||
server.game_runtime.game_move_counts,
|
||||
)
|
||||
return jsonify(snapshot)
|
||||
|
||||
@blueprint.get("/metrics/prometheus")
|
||||
@blueprint.get('/metrics/prometheus')
|
||||
async def metrics_prometheus():
|
||||
snapshot = await server.metrics_collector.build_snapshot(
|
||||
server.game_last_seen_unix,
|
||||
server.game_move_counts,
|
||||
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"},
|
||||
{'Content-Type': 'text/plain; version=0.0.4; charset=utf-8'},
|
||||
)
|
||||
|
||||
return blueprint
|
||||
|
||||
Reference in New Issue
Block a user