Expand description
§metrickit-rs
Safe Rust bindings for Apple’s MetricKit framework on macOS.
Status: v0.2.0 covers the macOS MetricKit surface exposed by
MetricKit.framework, includingMXMetricManager, typedMXMetricPayload/MXDiagnosticPayloadmodels,MXCallStackTree, MetricKit signpost emission, statistical helpers, metadata, signpost metrics / records, and crash / hang / CPU / disk-write diagnostics. iOS-only APIs are documented inCOVERAGE.md.
§Quick start
use metrickit::{MetricManager, MetricSubscriberCallbacks};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let manager = MetricManager::shared_manager();
let log_handle = manager.make_log_handle("example.startup")?;
let signpost_id = log_handle.make_signpost_id()?;
log_handle.emit_event(signpost_id, "startup")?;
let subscription = manager.subscribe(
MetricSubscriberCallbacks::new().on_metric_payloads(|payloads| {
println!("received {} metric payload(s)", payloads.len());
}),
)?;
println!("cached payloads: {}", manager.past_payloads()?.len());
drop(subscription);
Ok(())
}§Highlights
MetricManager::shared_manager, cached payload access, RAII subscriber registration,MetricKitsignpost log handles, and extended-launch helpers.- Typed
MetricPayload,DiagnosticPayload,Diagnostic,MetaData, andCallStackTreewrappers. - Metric models for CPU, memory, GPU, animation, launch, responsiveness, runtime, location, network, disk I/O, display, cellular condition, application-exit, disk-space, and signpost metrics.
- Statistical helpers
Measurement,Average,Histogram, and histogram buckets. - Crash, hang, CPU-exception, and disk-write diagnostics with structured Objective-C exception reasons and signpost records.
- Twelve numbered examples and twelve integration test files covering every logical area listed in the v0.2.0 expansion.
§Delivery semantics
MetricKit typically delivers aggregated payloads roughly once per day when the app is running. The examples and tests use cached payload lookups plus deterministic sample models so they succeed on a headless development machine without waiting for MetricKit delivery.
§Examples
Run all examples with:
for ex in examples/*.rs; do cargo run --example "$(basename "$ex" .rs)"; doneNotable examples:
01_smoke—MXMetricManagershared-manager, cached payload, subscription, and log-handle smoke test.05_signpost_emit— emitsMetricKitsignpost events and intervals from Rust.06_metric_models— serializes the extended metric surface, including display, cellular, exit, and disk-space metrics.
§Coverage audit
See COVERAGE.md for the macOS MetricKit audit, including implemented APIs and the iOS-only APIs intentionally skipped by this macOS crate.
§License
Licensed under either of Apache-2.0 or MIT at your option.
§API documentation
Safe Rust bindings for Apple’s MetricKit framework.
Re-exports§
pub use average::Average;pub use average::Measurement;pub use call_stack_tree::CallStackTree;pub use cpu_exception_diagnostic::CpuExceptionDiagnostic;pub use crash_diagnostic::CrashDiagnostic;pub use crash_diagnostic::CrashDiagnosticObjectiveCExceptionReason;pub use diagnostic::Diagnostic;pub use diagnostic_payload::DiagnosticPayload;pub use disk_write_exception_diagnostic::DiskWriteExceptionDiagnostic;pub use error::MetricKitError;pub use hang_diagnostic::HangDiagnostic;pub use histogram::Histogram;pub use histogram::HistogramBucket;pub use manager::LaunchTaskId;pub use manager::MetricManager;pub use manager::MetricSubscriberCallbacks;pub use manager::MetricSubscriberDelegate;pub use manager::MetricSubscription;pub use meta_data::MetaData;pub use metric::AnimationMetric;pub use metric::ApplicationExitMetric;pub use metric::ApplicationLaunchMetric;pub use metric::ApplicationResponsivenessMetric;pub use metric::ApplicationTimeMetric;pub use metric::BackgroundExitData;pub use metric::CellularConditionMetric;pub use metric::CpuMetric;pub use metric::DiskIoMetric;pub use metric::DiskSpaceUsageMetric;pub use metric::DisplayMetric;pub use metric::ForegroundExitData;pub use metric::GpuMetric;pub use metric::LocationActivityMetric;pub use metric::MemoryMetric;pub use metric::NetworkTransferMetric;pub use metric::AVERAGE_PIXEL_LUMINANCE_UNIT_SYMBOL;pub use metric::SIGNAL_BARS_UNIT_SYMBOL;pub use metric_payload::MetricPayload;pub use signpost::MetricLogHandle;pub use signpost::SignpostId;pub use signpost::SignpostIntervalData;pub use signpost::SignpostMetric;pub use signpost::SignpostRecord;
Modules§
- average
MetricKitaverage and measurement models.- call_
stack_ tree MetricKitcall-stack tree models.- cpu_
exception_ diagnostic MetricKitCPU exception diagnostic models.- crash_
diagnostic MetricKitcrash diagnostic models.- diagnostic
- Shared
MetricKitdiagnostic context models. - diagnostic_
payload MetricKitdiagnostic payload models.- disk_
write_ exception_ diagnostic MetricKitdisk-write exception diagnostic models.- error
- Error types returned by the
MetricKitwrapper. - ffi
- Low-level FFI bindings backing the
MetricKitwrapper. - hang_
diagnostic MetricKithang diagnostic models.- histogram
MetricKithistogram models.- manager
- Re-exports for
MetricKitmanager types. - meta_
data MetricKitmetadata models.- metric
MetricKitmetric models.- metric_
manager MetricKitmanager and subscriber APIs.- metric_
payload MetricKitmetric payload models.- metrics
- Aggregated
MetricKitmodel re-exports. - prelude
- Common imports.
- signpost
MetricKitsignpost models and helpers.