summaryrefslogtreecommitdiff
path: root/runtime/metrics.rs
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/metrics.rs')
-rw-r--r--runtime/metrics.rs45
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>,