Add more posthog analytics (privacy aware) (#6122)

This commit is contained in:
Zane
2025-12-16 08:59:14 -08:00
committed by GitHub
parent 036f4f74d9
commit 8a91f15731
34 changed files with 1339 additions and 48 deletions
+2
View File
@@ -397,6 +397,7 @@ derive_utoipa!(Icon as IconSchema);
super::routes::tunnel::start_tunnel,
super::routes::tunnel::stop_tunnel,
super::routes::tunnel::get_tunnel_status,
super::routes::telemetry::send_telemetry_event,
),
components(schemas(
super::routes::config_management::UpsertConfigQuery,
@@ -529,6 +530,7 @@ derive_utoipa!(Icon as IconSchema);
super::routes::setup::SetupResponse,
super::tunnel::TunnelInfo,
super::tunnel::TunnelState,
super::routes::telemetry::TelemetryEventRequest,
))
)]
pub struct ApiDoc;
+2
View File
@@ -11,6 +11,7 @@ pub mod schedule;
pub mod session;
pub mod setup;
pub mod status;
pub mod telemetry;
pub mod tunnel;
pub mod utils;
@@ -31,6 +32,7 @@ pub fn configure(state: Arc<crate::state::AppState>, secret_key: String) -> Rout
.merge(session::routes(state.clone()))
.merge(schedule::routes(state.clone()))
.merge(setup::routes(state.clone()))
.merge(telemetry::routes(state.clone()))
.merge(tunnel::routes(state.clone()))
.merge(mcp_ui_proxy::routes(secret_key))
}
@@ -0,0 +1,45 @@
use axum::{extract::State, http::StatusCode, routing::post, Json, Router};
use goose::posthog::emit_event;
use serde::Deserialize;
use std::collections::HashMap;
use std::sync::Arc;
use utoipa::ToSchema;
use crate::state::AppState;
#[derive(Debug, Deserialize, ToSchema)]
pub struct TelemetryEventRequest {
pub event_name: String,
#[serde(default)]
pub properties: HashMap<String, serde_json::Value>,
}
#[utoipa::path(
post,
path = "/telemetry/event",
request_body = TelemetryEventRequest,
responses(
(status = 202, description = "Event accepted for processing")
)
)]
async fn send_telemetry_event(
State(_state): State<Arc<AppState>>,
Json(request): Json<TelemetryEventRequest>,
) -> StatusCode {
let event_name = request.event_name;
let properties = request.properties;
tokio::spawn(async move {
if let Err(e) = emit_event(&event_name, properties).await {
tracing::debug!("Failed to send telemetry event: {}", e);
}
});
StatusCode::ACCEPTED
}
pub fn routes(state: Arc<AppState>) -> Router {
Router::new()
.route("/telemetry/event", post(send_telemetry_event))
.with_state(state)
}