diff options
Diffstat (limited to 'runtime/metrics.rs')
-rw-r--r-- | runtime/metrics.rs | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/runtime/metrics.rs b/runtime/metrics.rs index a80ec5e21..efc2cb457 100644 --- a/runtime/metrics.rs +++ b/runtime/metrics.rs @@ -1,6 +1,51 @@ // Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. +use crate::ops::UnstableChecker; +use deno_core::error::AnyError; +use deno_core::op_sync; use deno_core::serde::Serialize; +use deno_core::serde_json::json; +use deno_core::serde_json::Value; +use deno_core::Extension; +use deno_core::OpState; +use deno_core::ZeroCopyBuf; + +pub fn init() -> Extension { + Extension::new( + None, + Some(vec![("op_metrics", op_sync(op_metrics))]), + Some(Box::new(|state| { + state.put(RuntimeMetrics::default()); + Ok(()) + })), + Some(Box::new(metrics_op)), + ) +} + +#[derive(serde::Serialize)] +struct MetricsReturn { + combined: OpMetrics, + ops: Value, +} +#[allow(clippy::unnecessary_wraps)] +fn op_metrics( + state: &mut OpState, + _args: (), + _zero_copy: Option<ZeroCopyBuf>, +) -> Result<MetricsReturn, AnyError> { + let m = state.borrow::<RuntimeMetrics>(); + let combined = m.combined_metrics(); + let unstable_checker = state.borrow::<UnstableChecker>(); + let maybe_ops = if unstable_checker.unstable { + Some(&m.ops) + } else { + None + }; + Ok(MetricsReturn { + combined, + ops: json!(maybe_ops), + }) +} #[derive(Default, Debug)] pub struct RuntimeMetrics { pub ops: HashMap<&'static str, OpMetrics>, |