Skip to main content

socket_runner/
socket_runner.rs

1use rrq_runner::{ExecutionOutcome, Registry, RunnerRuntime, parse_tcp_socket};
2
3#[cfg(not(feature = "otel"))]
4use rrq_runner::telemetry::NoopTelemetry;
5#[cfg(feature = "otel")]
6use rrq_runner::telemetry::otel::{OtelTelemetry, init_tracing};
7use serde_json::json;
8
9fn read_arg_value(args: &[String], name: &str) -> Option<String> {
10    for (i, arg) in args.iter().enumerate() {
11        if arg == name {
12            return args.get(i + 1).cloned();
13        }
14    }
15    None
16}
17
18fn main() -> Result<(), Box<dyn std::error::Error>> {
19    let runtime = RunnerRuntime::new()?;
20
21    #[cfg(feature = "otel")]
22    {
23        let _guard = runtime.enter();
24        init_tracing("rrq-runner")?;
25    }
26
27    #[cfg(feature = "otel")]
28    let telemetry = OtelTelemetry;
29    #[cfg(not(feature = "otel"))]
30    let telemetry = NoopTelemetry;
31
32    let mut registry = Registry::new();
33    registry.register("echo", |request| async move {
34        ExecutionOutcome::success(
35            request.job_id.clone(),
36            request.request_id.clone(),
37            json!({
38                "job_id": request.job_id,
39                "params": request.params,
40            }),
41        )
42    });
43
44    let args: Vec<String> = std::env::args().skip(1).collect();
45    let tcp_socket = read_arg_value(&args, "--tcp-socket").ok_or_else(|| {
46        std::io::Error::new(
47            std::io::ErrorKind::InvalidInput,
48            "--tcp-socket must be provided",
49        )
50    })?;
51    let addr = parse_tcp_socket(&tcp_socket)?;
52    runtime.run_tcp_with(&registry, addr, &telemetry)
53}