Skip to content

Commit c7e690a

Browse files
committed
Add admin failures panel
1 parent 8b4eae4 commit c7e690a

6 files changed

Lines changed: 471 additions & 238 deletions

File tree

apps/codebattle/lib/codebattle/code_check/checker.ex

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ defmodule Codebattle.CodeCheck.Checker do
88

99
require Logger
1010

11+
@failure_results ~w(error service_failure service_timeout timeout)
12+
1113
@spec call(Codebattle.Task.t(), String.t(), String.t(), CodeCheck.check_meta()) :: CodeCheck.check_result()
1214
def call(task, solution_text, lang_slug, meta \\ %{}) do
1315
lang_meta = Languages.meta(lang_slug)
@@ -53,7 +55,8 @@ defmodule Codebattle.CodeCheck.Checker do
5355
lang: token.lang_meta.slug,
5456
started_at: started_at,
5557
duration_ms: token.execution_time_msec,
56-
result: token.result.status
58+
result: token.result.status,
59+
error_description: run_error_description(token.result)
5760
})
5861
end
5962

@@ -71,6 +74,38 @@ defmodule Codebattle.CodeCheck.Checker do
7174

7275
defp maybe_emit_telemetry(_token, _meta), do: :ok
7376

77+
defp run_error_description(%{status: status} = result) when status in @failure_results do
78+
description =
79+
cond do
80+
is_binary(result[:output_error]) and String.trim(result[:output_error]) != "" ->
81+
result[:output_error]
82+
83+
is_binary(result[:output]) and String.trim(result[:output]) != "" ->
84+
result[:output]
85+
86+
status in ["service_timeout", "timeout"] ->
87+
"Code check execution timed out"
88+
89+
true ->
90+
nil
91+
end
92+
93+
normalize_error_description(description)
94+
end
95+
96+
defp run_error_description(_result), do: nil
97+
98+
defp normalize_error_description(nil), do: nil
99+
100+
defp normalize_error_description(description) when is_binary(description) do
101+
description
102+
|> String.trim()
103+
|> case do
104+
"" -> nil
105+
trimmed -> String.slice(trimmed, 0, 4_000)
106+
end
107+
end
108+
74109
defp get_executor do
75110
if FunWithFlags.enabled?(:use_remote_zig_executor) do
76111
Codebattle.CodeCheck.Executor.RemoteZig

apps/codebattle/lib/codebattle/code_check/run.ex

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,21 @@ defmodule Codebattle.CodeCheck.Run do
1717
field(:started_at, :utc_datetime_usec)
1818
field(:duration_ms, :integer)
1919
field(:result, :string)
20+
field(:error_description, :string)
2021
end
2122

2223
def changeset(%Run{} = run, attrs) do
2324
run
24-
|> cast(attrs, [:user_id, :game_id, :tournament_id, :lang, :started_at, :duration_ms, :result])
25+
|> cast(attrs, [
26+
:user_id,
27+
:game_id,
28+
:tournament_id,
29+
:lang,
30+
:started_at,
31+
:duration_ms,
32+
:result,
33+
:error_description
34+
])
2535
|> validate_required([:game_id, :lang, :started_at, :duration_ms, :result])
2636
|> validate_inclusion(:result, @results)
2737
|> validate_number(:duration_ms, greater_than_or_equal_to: 0)

0 commit comments

Comments
 (0)