Add more posthog analytics (privacy aware) (#6122)
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
Reference in New Issue
Block a user