@@ -251,15 +251,35 @@ async fn daemon_project_status(project_path: &Path) -> crate::errors::Result<ser
251251 ) ?;
252252 let result = crate :: daemon:: call_default_tool (
253253 & handshake,
254- "tracedecay_status " ,
254+ "tracedecay_runtime " ,
255255 serde_json:: json!( { "format" : "json" } ) ,
256256 )
257257 . await ?;
258- daemon_tool_json ( & result)
258+ daemon_runtime_status ( & result)
259259}
260260
261- fn daemon_tool_json ( result : & serde_json:: Value ) -> crate :: errors:: Result < serde_json:: Value > {
262- crate :: daemon:: tool_json_payload ( result, "tracedecay_status" )
261+ fn daemon_runtime_status ( result : & serde_json:: Value ) -> crate :: errors:: Result < serde_json:: Value > {
262+ let runtime = crate :: daemon:: tool_json_payload ( result, "tracedecay_runtime" ) ?;
263+ let mut storage =
264+ runtime
265+ . get ( "database" )
266+ . cloned ( )
267+ . ok_or_else ( || crate :: errors:: TraceDecayError :: Config {
268+ message : "daemon runtime response omitted database telemetry" . to_string ( ) ,
269+ } ) ?;
270+ let storage =
271+ storage
272+ . as_object_mut ( )
273+ . ok_or_else ( || crate :: errors:: TraceDecayError :: Config {
274+ message : "daemon runtime database telemetry was not an object" . to_string ( ) ,
275+ } ) ?;
276+ if let Some ( pid) = runtime. pointer ( "/process/pid" ) . cloned ( ) {
277+ storage. insert ( "daemon_owner_pid" . to_string ( ) , pid) ;
278+ }
279+ if let Some ( version) = runtime. get ( "tracedecay_version" ) . cloned ( ) {
280+ storage. insert ( "daemon_version" . to_string ( ) , version) ;
281+ }
282+ Ok ( serde_json:: json!( { "storage_health" : storage } ) )
263283}
264284
265285fn check_database ( dc : & mut DoctorCounters , status : & serde_json:: Value ) -> bool {
@@ -423,12 +443,23 @@ fn check_stale_stores(dc: &mut DoctorCounters, status: Option<&serde_json::Value
423443 . get ( "daemon_owner_pid" )
424444 . and_then ( serde_json:: Value :: as_u64)
425445 . map_or_else ( || "unknown" . to_string ( ) , |pid| pid. to_string ( ) ) ;
426- let generation = storage
446+ let identity = storage
427447 . get ( "daemon_generation" )
428448 . and_then ( serde_json:: Value :: as_str)
429- . unwrap_or ( "unknown" ) ;
449+ . map_or_else (
450+ || {
451+ storage
452+ . get ( "daemon_version" )
453+ . and_then ( serde_json:: Value :: as_str)
454+ . map_or_else (
455+ || "identity=unknown" . to_string ( ) ,
456+ |version| format ! ( "version={version}" ) ,
457+ )
458+ } ,
459+ |generation| format ! ( "generation={generation}" ) ,
460+ ) ;
430461 dc. pass ( & format ! (
431- "Registry/database inspection delegated to daemon owner pid={owner}, generation={generation }"
462+ "Registry/database inspection delegated to daemon owner pid={owner}, {identity }"
432463 ) ) ;
433464 } else {
434465 dc. warn ( "Registry diagnostics unavailable because the daemon owner did not answer; doctor did not open the global DB" ) ;
0 commit comments