ic_memory/runtime/
diagnostics.rs1use super::{MemoryRuntime, RuntimeDiagnosticError};
2use crate::{DiagnosticExport, RecoveredLedger, physical::CommitSnapshotDiagnostic};
3use ic_platform::stable_structures::Memory;
4
5impl<M: Memory> MemoryRuntime<M> {
6 pub fn diagnostic_export(&self) -> Result<DiagnosticExport, RuntimeDiagnosticError> {
8 if !self.is_bootstrapped() {
9 return Err(RuntimeDiagnosticError::NotBootstrapped);
10 }
11 let recovered = self.ledger_record_from_memory()?.recover()?;
12 Ok(self.recovered_diagnostic_export(recovered))
13 }
14
15 pub fn commit_recovery_diagnostic(
20 &self,
21 ) -> Result<CommitSnapshotDiagnostic, RuntimeDiagnosticError> {
22 let record = self.ledger_record_from_memory()?;
23 Ok(record.diagnostic())
24 }
25
26 fn recovered_diagnostic_export(&self, recovered: RecoveredLedger) -> DiagnosticExport {
27 DiagnosticExport::from_owned_ledger(recovered.into_ledger())
28 .with_memory_sizes(|record| self.memory_size_pages(record.slot().id()))
29 }
30}