Skip to main content

DevelopmentNodeEnvironment_MicrosoftVSCodeDependency_22NodeVersion_Bundle_Clean_Debug_ElectronProfile_EsbuildCompiler_Mountain/Binary/Build/PostHogPlugin/
Initialize.rs

1//! Bring up the global PostHog client and emit
2//! `land:mountain:session:start`. Must be called once during boot;
3//! re-entrancy is safe because the underlying `OnceLock::set` returns
4//! `Err` on subsequent attempts.
5//!
6//! Note: posthog-rs 0.5 renamed `api_endpoint` → `host` on
7//! `ClientOptionsBuilder` to match the JS/Python SDK vocabulary; keep
8//! `host(...)` here.
9
10use crate::{
11	Binary::Build::PostHogPlugin::{CaptureAllowed, CaptureEvent, Client, Constants},
12	dev_log,
13};
14
15pub async fn Fn() {
16	if !CaptureAllowed::Fn() {
17		return;
18	}
19
20	let Options = posthog_rs::ClientOptionsBuilder::default()
21		.api_key(Constants::POSTHOG_API_KEY.to_string())
22		.host(Constants::POSTHOG_HOST.to_string())
23		.build()
24		.expect("PostHog client options");
25
26	let PostHogClient = posthog_rs::client(Options).await;
27
28	let _ = Client::CLIENT.set(PostHogClient);
29
30	dev_log!(
31		"lifecycle",
32		"[PostHog] Initialized (host={}, debug mode)",
33		Constants::POSTHOG_HOST
34	);
35
36	CaptureEvent::Fn(
37		"land:mountain:session:start",
38		Some(vec![
39			("pid", Box::leak(format!("{}", std::process::id()).into_boxed_str())),
40			("os", std::env::consts::OS),
41			("arch", std::env::consts::ARCH),
42		]),
43	);
44}