Commit Graph

34 Commits

Author SHA1 Message Date
Maximilian Paß
89c18ad45c Refactor to WithoutCancel context.
With Go 1.21 the WithoutCancel context was introduced. This way we can keep the values passed in a new context without having the new context being canceled together with its parent. This behavior suits well for two occurrences where we explicitly had to copy one required value instead of implicitly keeping all values.
2023-08-16 15:13:05 +02:00
Maximilian Paß
90092c48c1 Fix incomplete debug message
that is created by sending SIGQUIT to the bash process
by not processing output after the the client disconnected / we have sent the SIGQUIT.
2023-08-14 11:37:51 +02:00
Maximilian Paß
d64d8995bd Refactor monitoring of runner and environment id. 2023-07-15 21:46:56 +02:00
Maximilian Paß
e7df777db4 Always log Runner and Environment ID.
Systematically log the runner id and the environment id by adding the information at the findRunnerMiddleware.
2023-07-15 21:46:56 +02:00
Maximilian Paß
2aa10a130f Introduce context for the codeOceanOutputWriter
that represents its lifespan.
2023-04-11 20:45:30 +01:00
Maximilian Paß
0c8fa9ccfa Add context to log statements. 2023-04-11 20:45:30 +01:00
Maximilian Paß
4550a4589e Dangerous Context Enrichment
by passing the Sentry Context down our abstraction stack.
This included changes in the complex context management of managing a Command Execution.
2023-02-03 10:29:18 +00:00
Maximilian Paß
2650efbb38 Sentry Tracing Identifier 2023-02-03 10:29:18 +00:00
Maximilian Paß
f2c205a8ed Add additional performance spans 2023-02-03 10:29:18 +00:00
Maximilian Paß
3469d0ce77 Specify http not found exit code
by replacing it with StatusGone (410) for a missing runner and StatusFailedDependency (424) for missing or not accessible files.
2022-10-05 12:11:47 +01:00
Maximilian Paß
d10b31a1fb Remove static (nil) return value. 2022-08-01 11:24:56 +02:00
Maximilian Paß
498e8f5ff5 #110 Refactor influxdb monitoring
to use it as singleton.
This enables the possibility to monitor processes that are independent of an incoming request.
2022-07-01 15:29:31 +02:00
Maximilian Paß
203d5a3a4f #155 refactor and synchronise writing to CodeOcean. (#174)
* #155 refactor and synchronise writing to CodeOcean.

* Reduce complexity of input parsing.

* Update typo in internal/api/ws/codeocean_writer.go

Co-authored-by: Sebastian Serth <MrSerth@users.noreply.github.com>
2022-06-26 20:19:23 +02:00
Maximilian Paß
3afe8ddb66 #155 Enable stopping of the CodeOcean WebSocket read independently of writing to CodeOcean. 2022-06-21 12:13:33 +02:00
Maximilian Paß
3d1ed7cb0f #155 Minimise timing issues with websocket close. 2022-06-21 12:13:33 +02:00
Maximilian Paß
79dc3a94da #155 Add log statement for further investigations (#164) 2022-06-12 11:10:57 +02:00
Maximilian Paß
ecce3c294f #155 Add log statement for further investigations 2022-06-09 22:34:43 +02:00
Maximilian Paß
1e59c1146e Fix CodeQL log injection warning
by removing newlines from logged user input.
2022-06-07 17:21:05 +02:00
Maximilian Paß
25f92e5f94 Add environment specific data to the influxdb data. 2022-04-18 13:17:49 +02:00
Maximilian Paß
eabe3a1b27 Add the Environment ID to the influxdb data.
Also move the interface of an execution environment into its own file, execution_environment.go.
2022-04-18 13:17:49 +02:00
Maximilian Paß
8feffdae3a Add initial structure of influxdb monitoring. 2022-04-18 13:17:49 +02:00
Sebastian Serth
e4ebb5b384 Add trace statements for WebSocket messages
* With `logger.level: TRACE`, the content of WebSocket messages is logged
  together with the corresponding timestamp.
* The input is not further sanitized as this log level
  is not intended for production use.
2022-04-15 12:39:03 +02:00
Maximilian Paß
f3929cbf50 Fix webSocket error
that was introduced by closing the WebSocket connection without stopping the inputLoop.
2021-12-16 15:05:47 +01:00
Maximilian Paß
feefe2c1ed Fix third goroutine leak and refactor proxy cancellation.
Fix goroutine leak in the Read function of the codeOceanToRawReader: Blocking Select statement.
2021-12-14 13:24:53 +01:00
Maximilian Paß
c565ca217e Fix goroutine leak when reading the client WebSocket 2021-12-14 13:24:53 +01:00
Maximilian Paß
e95e07e426 Catch the client connection "Close normal" error
* Catch the client connection "Close normal" error

* Reduce cognitive complexity of the input read loop
2021-12-09 10:02:26 +01:00
Maximilian Paß
a6eaa45097 Stop stdout & stderr after timeout
Co-authored-by: Sebastian Serth <MrSerth@users.noreply.github.com>
2021-11-25 21:08:56 +01:00
Maximilian Paß
c8c5357b8c Rename module for GitHub 2021-07-30 16:43:05 +02:00
sirkrypt0
36dc99f019 Don't embed the execution.Storer interface into a runner
Previously, the execution.Storer interface was embedded in the Runner interface.
However, this resulted in calls like runner.Add(...) to add an execution to the
store which is kind of ugly. Thus, we decided to add only the required functions to
the runner interface and make the execution.Storer a field of the implementation.
2021-07-30 14:28:06 +02:00
sirkrypt0
bd14b1e181 Move execution storage to new package 2021-07-30 14:26:44 +02:00
sirkrypt0
e2d71a11ad Avoid concurrent writes to the websocket connection
Previously, the server sometimes crashed due to concurrent writes
to the websocket connection. Now, we ensure that only one concurrent
function writes to the websocket at a time by enclosing the WriteMessage
function with a mutex.
2021-07-29 09:21:15 +00:00
Konrad Hanff
8d24bda61a Send SIGQUIT when cancelling an execution
When the context passed to Nomad Allocation Exec is cancelled, the
process is not terminated. Instead, just the WebSocket connection is
closed. In order to terminate long-running processes, a special
character is injected into the standard input stream. This character is
parsed by the tty line discipline (tty has to be true). The line
discipline sends a SIGQUIT signal to the process, terminating it and
producing a core dump (in a file called 'core'). The SIGQUIT signal can
be caught but isn't by default, which is why the runner is destroyed if
the program does not terminate during a grace period after the signal
was sent.
2021-07-29 10:28:47 +02:00
Konrad Hanff
23b726cef9 Correct behavior when WebSocket closes. 2021-07-26 06:47:55 +00:00
sirkrypt0
8b26ecbe5f Restructure project
We previously didn't really had any structure in our project apart
from creating a new folder for each package in our project root.
Now that we have accumulated some packages, we use the well-known
Golang project layout in order to clearly communicate our intent
with packages. See https://github.com/golang-standards/project-layout
2021-07-21 12:55:35 +02:00