Skip to main content

Crate metrickit

Crate metrickit 

Source
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, including MXMetricManager, typed MXMetricPayload / MXDiagnosticPayload models, MXCallStackTree, MetricKit signpost emission, statistical helpers, metadata, signpost metrics / records, and crash / hang / CPU / disk-write diagnostics. iOS-only APIs are documented in COVERAGE.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, MetricKit signpost log handles, and extended-launch helpers.
  • Typed MetricPayload, DiagnosticPayload, Diagnostic, MetaData, and CallStackTree wrappers.
  • 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)"; done

Notable examples:

  • 01_smokeMXMetricManager shared-manager, cached payload, subscription, and log-handle smoke test.
  • 05_signpost_emit — emits MetricKit signpost 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
MetricKit average and measurement models.
call_stack_tree
MetricKit call-stack tree models.
cpu_exception_diagnostic
MetricKit CPU exception diagnostic models.
crash_diagnostic
MetricKit crash diagnostic models.
diagnostic
Shared MetricKit diagnostic context models.
diagnostic_payload
MetricKit diagnostic payload models.
disk_write_exception_diagnostic
MetricKit disk-write exception diagnostic models.
error
Error types returned by the MetricKit wrapper.
ffi
Low-level FFI bindings backing the MetricKit wrapper.
hang_diagnostic
MetricKit hang diagnostic models.
histogram
MetricKit histogram models.
manager
Re-exports for MetricKit manager types.
meta_data
MetricKit metadata models.
metric
MetricKit metric models.
metric_manager
MetricKit manager and subscriber APIs.
metric_payload
MetricKit metric payload models.
metrics
Aggregated MetricKit model re-exports.
prelude
Common imports.
signpost
MetricKit signpost models and helpers.