socket_runner/
socket_runner.rs1use 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(®istry, addr, &telemetry)
53}