pub struct EmergencyDiagnostics { /* private fields */ }Expand description
Startup owner: at most one independent writer per process. No join on Drop.
Implementations§
Source§impl EmergencyDiagnostics
impl EmergencyDiagnostics
Sourcepub fn start(config: &FileLoggingConfig) -> Result<Self, EmergencyInitError>
pub fn start(config: &FileLoggingConfig) -> Result<Self, EmergencyInitError>
Directory setup is performed by the worker, never the submitting request. Callers must check snapshot/written, not equate successful start with IO readiness.
Examples found in repository?
examples/diagnostic_source.rs (line 32)
29fn main() {
30 // The application must pass its already resolved logging.directory here.
31 let mut output =
32 EmergencyDiagnostics::start(&FileLoggingConfig::default()).expect("emergency worker");
33 let error = source_failure(&std::io::Error::from_raw_os_error(2));
34 if let Some(diagnostic) = error.diagnostic() {
35 let _admission_only = output.handle().submit(diagnostic);
36 }
37 // Illustrative bounded host wait; Runtime must use its EXISTING deadline.
38 let deadline = std::time::Instant::now() + std::time::Duration::from_secs(1);
39 while output.shutdown() == DiagnosticShutdown::Pending && std::time::Instant::now() < deadline {
40 std::thread::sleep(std::time::Duration::from_millis(1));
41 }
42 // Inspect written/first_failure + target; Enqueued alone never proves delivery.
43 let _status = output.snapshot();
44}Sourcepub fn handle(&self) -> EmergencyDiagnosticHandle
pub fn handle(&self) -> EmergencyDiagnosticHandle
Examples found in repository?
examples/diagnostic_source.rs (line 35)
29fn main() {
30 // The application must pass its already resolved logging.directory here.
31 let mut output =
32 EmergencyDiagnostics::start(&FileLoggingConfig::default()).expect("emergency worker");
33 let error = source_failure(&std::io::Error::from_raw_os_error(2));
34 if let Some(diagnostic) = error.diagnostic() {
35 let _admission_only = output.handle().submit(diagnostic);
36 }
37 // Illustrative bounded host wait; Runtime must use its EXISTING deadline.
38 let deadline = std::time::Instant::now() + std::time::Duration::from_secs(1);
39 while output.shutdown() == DiagnosticShutdown::Pending && std::time::Instant::now() < deadline {
40 std::thread::sleep(std::time::Duration::from_millis(1));
41 }
42 // Inspect written/first_failure + target; Enqueued alone never proves delivery.
43 let _status = output.snapshot();
44}pub fn target(&self) -> &Path
Sourcepub fn snapshot(&self) -> DiagnosticOutputSnapshot
pub fn snapshot(&self) -> DiagnosticOutputSnapshot
Examples found in repository?
examples/diagnostic_source.rs (line 43)
29fn main() {
30 // The application must pass its already resolved logging.directory here.
31 let mut output =
32 EmergencyDiagnostics::start(&FileLoggingConfig::default()).expect("emergency worker");
33 let error = source_failure(&std::io::Error::from_raw_os_error(2));
34 if let Some(diagnostic) = error.diagnostic() {
35 let _admission_only = output.handle().submit(diagnostic);
36 }
37 // Illustrative bounded host wait; Runtime must use its EXISTING deadline.
38 let deadline = std::time::Instant::now() + std::time::Duration::from_secs(1);
39 while output.shutdown() == DiagnosticShutdown::Pending && std::time::Instant::now() < deadline {
40 std::thread::sleep(std::time::Duration::from_millis(1));
41 }
42 // Inspect written/first_failure + target; Enqueued alone never proves delivery.
43 let _status = output.snapshot();
44}Sourcepub fn shutdown(&mut self) -> DiagnosticShutdown
pub fn shutdown(&mut self) -> DiagnosticShutdown
Call using the EXISTING lifecycle deadline; Pending is not a new budget.
Examples found in repository?
examples/diagnostic_source.rs (line 39)
29fn main() {
30 // The application must pass its already resolved logging.directory here.
31 let mut output =
32 EmergencyDiagnostics::start(&FileLoggingConfig::default()).expect("emergency worker");
33 let error = source_failure(&std::io::Error::from_raw_os_error(2));
34 if let Some(diagnostic) = error.diagnostic() {
35 let _admission_only = output.handle().submit(diagnostic);
36 }
37 // Illustrative bounded host wait; Runtime must use its EXISTING deadline.
38 let deadline = std::time::Instant::now() + std::time::Duration::from_secs(1);
39 while output.shutdown() == DiagnosticShutdown::Pending && std::time::Instant::now() < deadline {
40 std::thread::sleep(std::time::Duration::from_millis(1));
41 }
42 // Inspect written/first_failure + target; Enqueued alone never proves delivery.
43 let _status = output.snapshot();
44}Trait Implementations§
Source§impl Drop for EmergencyDiagnostics
impl Drop for EmergencyDiagnostics
Auto Trait Implementations§
impl !RefUnwindSafe for EmergencyDiagnostics
impl !UnwindSafe for EmergencyDiagnostics
impl Freeze for EmergencyDiagnostics
impl Send for EmergencyDiagnostics
impl Sync for EmergencyDiagnostics
impl Unpin for EmergencyDiagnostics
impl UnsafeUnpin for EmergencyDiagnostics
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more