Skip to main content

socket_runner/
socket_runner.rs

1use rrq_runner::{
2    ENV_RUNNER_TCP_SOCKET, ExecutionOutcome, Registry, RunnerRuntime, parse_tcp_socket,
3};
4
5#[cfg(not(feature = "otel"))]
6use rrq_runner::telemetry::NoopTelemetry;
7#[cfg(feature = "otel")]
8use rrq_runner::telemetry::otel::{OtelTelemetry, init_tracing};
9use serde_json::json;
10
11fn main() -> Result<(), Box<dyn std::error::Error>> {
12    let runtime = RunnerRuntime::new()?;
13
14    #[cfg(feature = "otel")]
15    {
16        let _guard = runtime.enter();
17        init_tracing("rrq-runner")?;
18    }
19
20    #[cfg(feature = "otel")]
21    let telemetry = OtelTelemetry;
22    #[cfg(not(feature = "otel"))]
23    let telemetry = NoopTelemetry;
24
25    let mut registry = Registry::new();
26    registry.register("echo", |request| async move {
27        ExecutionOutcome::success(
28            request.job_id.clone(),
29            request.request_id.clone(),
30            json!({
31                "job_id": request.job_id,
32                "params": request.params,
33            }),
34        )
35    });
36
37    let tcp_socket = std::env::var(ENV_RUNNER_TCP_SOCKET).map_err(|_| {
38        std::io::Error::new(
39            std::io::ErrorKind::InvalidInput,
40            "RRQ_RUNNER_TCP_SOCKET must be set",
41        )
42    })?;
43    let addr = parse_tcp_socket(&tcp_socket)?;
44    runtime.run_tcp_with(&registry, addr, &telemetry)
45}