1use haproxy_api::{Action, Core};
2use mlua::prelude::{Lua, LuaExternalResult as _, LuaResult, LuaTable};
3
4pub(crate) use cache::{get_context, remove_context, store_context};
5
6pub fn register(lua: &Lua, options: LuaTable) -> LuaResult<()> {
7 let core = Core::new(lua)?;
8
9 let service_name = (options.get::<String>("name")).unwrap_or_else(|_| "haproxy".to_string());
10 let sampler = (options.get::<Option<String>>("sampler")).unwrap_or_default();
11 let propagator = (options.get::<Option<String>>("propagator")).unwrap_or_default();
12 let otlp = (options.get::<LuaTable>("otlp")).unwrap_or_else(|_| lua.create_table().unwrap());
13 let endpoint = (otlp.get::<Option<String>>("endpoint")).unwrap_or_default();
14 let protocol = (otlp.get::<Option<String>>("protocol")).unwrap_or_default();
15
16 let options = exporter::Options {
17 service_name: service_name.clone(),
18 sampler: sampler.clone(),
19 propagator: propagator.clone(),
20 endpoint: endpoint.clone(),
21 protocol: protocol.clone(),
22 };
23 lua.set_app_data(options.clone());
24
25 if core.thread()? <= 1 {
26 core.register_task(move |_lua| exporter::init(options.clone()).into_lua_err())?;
27 }
28
29 #[rustfmt::skip]
30 core.register_action("start_server_span", &[Action::HttpReq], 0, span::start_server_span)?;
31 core.register_action(
32 "set_span_attribute_var",
33 &[Action::HttpReq, Action::HttpRes, Action::HttpAfterRes],
34 2,
35 span::set_span_attribute,
36 )?;
37 core.register_filter::<filter::TraceFilter>("opentelemetry-trace")?;
38
39 Ok(())
40}
41
42mod cache;
43mod exporter;
44mod filter;
45mod runtime;
46mod span;