Skip to content

Commit 8a66267

Browse files
Shutdown websocket connection after game ended (#1206)
* Timeout ws connections when game ends * Add os_mon dependency to monitor OS values * Add new telemetry events for OS memory and cpu metrics * Update grafana dashboard: add cpu and memory panels * replace old request code and comment issue with creating bot mid game * remove extra stuff * Fix todo comment to restore bots replacing disconnected players * Add new LOADTEST_ALONE_MODE env-var --------- Co-authored-by: Nicolas Sanchez <[email protected]>
1 parent 93cbde3 commit 8a66267

16 files changed

+320
-44
lines changed

.github/workflows/arena-argentina-testing-deploy.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ jobs:
5555
JWT_PRIVATE_KEY_BASE_64: ${{ secrets.JWT_PRIVATE_KEY_BASE_64 }}
5656
NEWRELIC_APP_NAME: ${{ vars.NEWRELIC_APP_NAME }}
5757
NEWRELIC_KEY: ${{ secrets.NEWRELIC_KEY }}
58+
LOADTEST_ALONE_MODE: ${{ vars.LOADTEST_ALONE_MODE }}
5859
BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
5960
run: |
6061
set -ex
@@ -73,4 +74,5 @@ jobs:
7374
JWT_PRIVATE_KEY_BASE_64=${JWT_PRIVATE_KEY_BASE_64} \
7475
NEWRELIC_APP_NAME=${NEWRELIC_APP_NAME} \
7576
NEWRELIC_KEY=${NEWRELIC_KEY} \
77+
LOADTEST_ALONE_MODE=${LOADTEST_ALONE_MODE} \
7678
/Users/${SSH_USERNAME}/deploy-script/deploy-macos.sh

.github/workflows/arena-chile-testing-deploy.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ jobs:
5252
SECRET_KEY_BASE: ${{ secrets.SECRET_KEY_BASE }}
5353
NEWRELIC_APP_NAME: ${{ vars.NEWRELIC_APP_NAME }}
5454
NEWRELIC_KEY: ${{ secrets.NEWRELIC_KEY }}
55+
LOADTEST_ALONE_MODE: ${{ vars.LOADTEST_ALONE_MODE }}
5556
DBUS_SESSION_BUS_ADDRESS: ${{ vars.DBUS_SESSION_BUS_ADDRESS }}
5657
XDG_RUNTIME_DIR: ${{ vars.XDG_RUNTIME_DIR }}
5758
BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
@@ -71,6 +72,7 @@ jobs:
7172
SECRET_KEY_BASE=${SECRET_KEY_BASE} \
7273
NEWRELIC_APP_NAME=${NEWRELIC_APP_NAME} \
7374
NEWRELIC_KEY=${NEWRELIC_KEY} \
75+
LOADTEST_ALONE_MODE=${LOADTEST_ALONE_MODE} \
7476
DBUS_SESSION_BUS_ADDRESS=${DBUS_SESSION_BUS_ADDRESS} \
7577
XDG_RUNTIME_DIR=${XDG_RUNTIME_DIR} \
7678
/home/${SSH_USERNAME}/deploy-script/deploy.sh

.github/workflows/arena-europe-testing-deploy.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ jobs:
5555
SECRET_KEY_BASE: ${{ secrets.SECRET_KEY_BASE }}
5656
NEWRELIC_APP_NAME: ${{ vars.NEWRELIC_APP_NAME }}
5757
NEWRELIC_KEY: ${{ secrets.NEWRELIC_KEY }}
58+
LOADTEST_ALONE_MODE: ${{ vars.LOADTEST_ALONE_MODE }}
5859
DBUS_SESSION_BUS_ADDRESS: ${{ vars.DBUS_SESSION_BUS_ADDRESS }}
5960
BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
6061
run: |
@@ -73,5 +74,6 @@ jobs:
7374
SECRET_KEY_BASE=${SECRET_KEY_BASE} \
7475
NEWRELIC_APP_NAME=${NEWRELIC_APP_NAME} \
7576
NEWRELIC_KEY=${NEWRELIC_KEY} \
77+
LOADTEST_ALONE_MODE=${LOADTEST_ALONE_MODE} \
7678
DBUS_SESSION_BUS_ADDRESS=${DBUS_SESSION_BUS_ADDRESS} \
7779
/home/${SSH_USERNAME}/deploy-script/deploy.sh

.github/workflows/arena-usa-testing-deploy.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ jobs:
5555
SECRET_KEY_BASE: ${{ secrets.SECRET_KEY_BASE }}
5656
NEWRELIC_APP_NAME: ${{ vars.NEWRELIC_APP_NAME }}
5757
NEWRELIC_KEY: ${{ secrets.NEWRELIC_KEY }}
58+
LOADTEST_ALONE_MODE: ${{ vars.LOADTEST_ALONE_MODE }}
5859
DBUS_SESSION_BUS_ADDRESS: ${{ vars.DBUS_SESSION_BUS_ADDRESS }}
5960
BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
6061
run: |
@@ -73,5 +74,6 @@ jobs:
7374
SECRET_KEY_BASE=${SECRET_KEY_BASE} \
7475
NEWRELIC_APP_NAME=${NEWRELIC_APP_NAME} \
7576
NEWRELIC_KEY=${NEWRELIC_KEY} \
77+
LOADTEST_ALONE_MODE=${LOADTEST_ALONE_MODE} \
7678
DBUS_SESSION_BUS_ADDRESS=${DBUS_SESSION_BUS_ADDRESS} \
7779
/home/${SSH_USERNAME}/deploy-script/deploy.sh

.github/workflows/bot-manager-deploy.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ jobs:
5353
SECRET_KEY_BASE: ${{ secrets.SECRET_KEY_BASE }}
5454
NEWRELIC_APP_NAME: ${{ vars.NEWRELIC_APP_NAME }}
5555
NEWRELIC_KEY: ${{ secrets.NEWRELIC_KEY }}
56+
LOADTEST_ALONE_MODE: ${{ vars.LOADTEST_ALONE_MODE }}
5657
DBUS_SESSION_BUS_ADDRESS: ${{ vars.DBUS_SESSION_BUS_ADDRESS }}
5758
BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
5859
run: |
@@ -69,5 +70,6 @@ jobs:
6970
SECRET_KEY_BASE=${SECRET_KEY_BASE} \
7071
NEWRELIC_APP_NAME=${NEWRELIC_APP_NAME} \
7172
NEWRELIC_KEY=${NEWRELIC_KEY} \
73+
LOADTEST_ALONE_MODE=${LOADTEST_ALONE_MODE} \
7274
DBUS_SESSION_BUS_ADDRESS=${DBUS_SESSION_BUS_ADDRESS} \
7375
/home/${SSH_USERNAME}/deploy-script/deploy.sh

.github/workflows/central-europe-staging-deploy.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ jobs:
5858
JWT_PRIVATE_KEY_BASE_64: ${{ secrets.JWT_PRIVATE_KEY_BASE_64 }}
5959
NEWRELIC_APP_NAME: ${{ vars.NEWRELIC_APP_NAME_STAGING }}
6060
NEWRELIC_KEY: ${{ secrets.NEWRELIC_KEY }}
61+
LOADTEST_ALONE_MODE: ${{ vars.LOADTEST_ALONE_MODE }}
6162
DBUS_SESSION_BUS_ADDRESS: ${{ vars.DBUS_SESSION_BUS_ADDRESS }}
6263
BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
6364
run: |
@@ -79,5 +80,6 @@ jobs:
7980
JWT_PRIVATE_KEY_BASE_64=${JWT_PRIVATE_KEY_BASE_64} \
8081
NEWRELIC_APP_NAME=${NEWRELIC_APP_NAME} \
8182
NEWRELIC_KEY=${NEWRELIC_KEY} \
83+
LOADTEST_ALONE_MODE=${LOADTEST_ALONE_MODE} \
8284
DBUS_SESSION_BUS_ADDRESS=${DBUS_SESSION_BUS_ADDRESS} \
8385
/home/${SSH_USERNAME}/deploy-script/deploy.sh

.github/workflows/central-europe-testing-deploy.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ jobs:
5858
JWT_PRIVATE_KEY_BASE_64: ${{ secrets.JWT_PRIVATE_KEY_BASE_64 }}
5959
NEWRELIC_APP_NAME: ${{ vars.NEWRELIC_APP_NAME_TESTING }}
6060
NEWRELIC_KEY: ${{ secrets.NEWRELIC_KEY }}
61+
LOADTEST_ALONE_MODE: ${{ vars.LOADTEST_ALONE_MODE }}
6162
DBUS_SESSION_BUS_ADDRESS: ${{ vars.DBUS_SESSION_BUS_ADDRESS }}
6263
BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
6364
run: |
@@ -79,5 +80,6 @@ jobs:
7980
JWT_PRIVATE_KEY_BASE_64=${JWT_PRIVATE_KEY_BASE_64} \
8081
NEWRELIC_APP_NAME=${NEWRELIC_APP_NAME} \
8182
NEWRELIC_KEY=${NEWRELIC_KEY} \
83+
LOADTEST_ALONE_MODE=${LOADTEST_ALONE_MODE} \
8284
DBUS_SESSION_BUS_ADDRESS=${DBUS_SESSION_BUS_ADDRESS} \
8385
/home/${SSH_USERNAME}/deploy-script/deploy.sh

.github/workflows/deploy-new-arena-server.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,14 @@ jobs:
6363
DATABASE_URL: ${{ secrets.DATABASE_URL }}
6464
SECRET_KEY_BASE: ${{ secrets.SECRET_KEY_BASE }}
6565
NEWRELIC_KEY: ${{ secrets.NEWRELIC_KEY }}
66+
LOADTEST_ALONE_MODE: ${{ vars.LOADTEST_ALONE_MODE }}
6667
run: |
6768
ssh ${SSH_USERNAME}@${SSH_HOST} \
6869
SSH_APP_USERNAME=${SSH_APP_USERNAME} \
6970
DATABASE_URL=${DATABASE_URL} \
7071
SECRET_KEY_BASE=${SECRET_KEY_BASE} \
7172
NEWRELIC_KEY=${NEWRELIC_KEY} \
73+
LOADTEST_ALONE_MODE=${LOADTEST_ALONE_MODE} \
7274
/home/${SSH_USERNAME}/mirra_backend/devops/setup-admin-deps.sh
7375
7476
- name: Tailscale

.github/workflows/loadtest-europe-client-deploy.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ jobs:
6464
SECRET_KEY_BASE: ${{ secrets.SECRET_KEY_BASE }}
6565
NEWRELIC_APP_NAME: ${{ vars.NEWRELIC_APP_NAME_LOADTEST_CLIENT }}
6666
NEWRELIC_KEY: ${{ secrets.NEWRELIC_KEY }}
67+
LOADTEST_ALONE_MODE: ${{ vars.LOADTEST_ALONE_MODE }}
6768
DBUS_SESSION_BUS_ADDRESS: ${{ vars.DBUS_SESSION_BUS_ADDRESS }}
6869
BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
6970
run: |
@@ -84,5 +85,6 @@ jobs:
8485
SECRET_KEY_BASE=${SECRET_KEY_BASE} \
8586
NEWRELIC_APP_NAME=${NEWRELIC_APP_NAME} \
8687
NEWRELIC_KEY=${NEWRELIC_KEY} \
88+
LOADTEST_ALONE_MODE=${LOADTEST_ALONE_MODE} \
8789
DBUS_SESSION_BUS_ADDRESS=${DBUS_SESSION_BUS_ADDRESS} \
8890
/home/${SSH_USERNAME}/deploy-script/deploy.sh

apps/arena/lib/arena/game_socket_handler.ex

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ defmodule Arena.GameSocketHandler do
55
require Logger
66
alias Arena.Authentication.GatewaySigner
77
alias Arena.Authentication.GatewayTokenManager
8-
alias Arena.Utils
98
alias Arena.Serialization
109
alias Arena.GameUpdater
1110
alias Arena.Serialization.GameEvent
@@ -108,6 +107,7 @@ defmodule Arena.GameSocketHandler do
108107
@impl true
109108
def websocket_info({:game_finished, game_state}, state) do
110109
# Logger.info("Websocket info, Message: GAME FINISHED")
110+
Process.send_after(self(), :terminate_connection, 10_000)
111111
{:reply, {:binary, game_state}, state}
112112
end
113113

@@ -172,29 +172,28 @@ defmodule Arena.GameSocketHandler do
172172
end
173173
end
174174

175+
def websocket_info(:terminate_connection, state) do
176+
{:stop, state}
177+
end
178+
175179
@impl true
176180
def websocket_info(message, state) do
177181
Logger.info("You should not be here: #{inspect(message)}")
178182
{:reply, {:binary, Jason.encode!(%{})}, state}
179183
end
180184

181185
@impl true
182-
def terminate(_reason, _req, %{game_finished: false, player_alive: true} = state) do
186+
def terminate(reason, _req, %{game_finished: false, player_alive: true} = state) do
183187
:telemetry.execute([:arena, :clients], %{count: -1})
188+
Logger.error("Player #{state.player_id} terminating: #{inspect(reason)}")
184189

185-
if Application.get_env(:arena, :spawn_bots) do
186-
spawn(fn ->
187-
Finch.build(:get, Utils.get_bot_connection_url(state.game_id, state.client_id))
188-
|> Finch.request(Arena.Finch)
189-
end)
190-
end
191-
192-
:ok
190+
# TODO: We have to reconnect the bots here, we lost this behavior when moved the bots inside Arena.
191+
# https://github.com/lambdaclass/mirra_backend/issues/1128
193192
end
194193

195-
def terminate(_reason, _req, _state) do
194+
def terminate(reason, _req, state) do
196195
:telemetry.execute([:arena, :clients], %{count: -1})
197-
:ok
196+
Logger.error("Player #{state.player_id} terminating: #{inspect(reason)}")
198197
end
199198

200199
defp to_broadcast_config(config) do

0 commit comments

Comments
 (0)