File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -58,9 +58,16 @@ pub(super) fn run_daemon_app(
5858 . spawn ( warp_logging:: rotate_log_files ( ) )
5959 . detach ( ) ;
6060
61+ use crate :: server:: telemetry:: context_provider:: NoopTelemetryContextProvider ;
6162 use repo_metadata:: repositories:: DetectedRepositories ;
6263 use repo_metadata:: watcher:: DirectoryWatcher ;
6364 use repo_metadata:: RepoMetadataModel ;
65+
66+ // Register a no-op telemetry context so that `send_telemetry_from_ctx!`
67+ // calls (e.g. from RepoMetadataModel on ExceededMaxFileLimit) don't
68+ // panic due to a missing TelemetryContextModel singleton.
69+ ctx. add_singleton_model ( NoopTelemetryContextProvider :: new_context_provider) ;
70+
6471 // Order matters: DetectedRepositories must be registered before
6572 // RepoMetadataModel because LocalRepoMetadataModel::new()
6673 // subscribes to DetectedRepositories::handle(ctx).
Original file line number Diff line number Diff line change @@ -24,3 +24,29 @@ impl TelemetryContextProvider for AppTelemetryContextProvider {
2424 auth_state. anonymous_id ( )
2525 }
2626}
27+
28+ /// A no-op telemetry context provider for headless contexts (e.g. the remote
29+ /// server daemon) that run without authentication. Telemetry events that
30+ /// require a user/anonymous ID will silently produce empty identifiers,
31+ /// preventing panics from an unregistered `TelemetryContextModel` singleton.
32+ #[ cfg_attr( target_family = "wasm" , allow( dead_code) ) ]
33+ pub struct NoopTelemetryContextProvider ;
34+
35+ impl NoopTelemetryContextProvider {
36+ #[ cfg_attr( target_family = "wasm" , allow( dead_code) ) ]
37+ pub fn new_context_provider (
38+ _ctx : & mut ModelContext < TelemetryContextModel > ,
39+ ) -> TelemetryContextModel {
40+ Box :: new ( Self )
41+ }
42+ }
43+
44+ impl TelemetryContextProvider for NoopTelemetryContextProvider {
45+ fn user_id ( & self , _ctx : & AppContext ) -> Option < String > {
46+ None
47+ }
48+
49+ fn anonymous_id ( & self , _ctx : & AppContext ) -> String {
50+ String :: new ( )
51+ }
52+ }
You can’t perform that action at this time.
0 commit comments