diff --git a/cli/diagnostics.rs b/cli/diagnostics.rs index 419d89a97c9f20..33e6c0aa67eaba 100644 --- a/cli/diagnostics.rs +++ b/cli/diagnostics.rs @@ -81,6 +81,7 @@ const UNSTABLE_DENO_PROPS: &[&str] = &[ "umask", "utime", "utimeSync", + "uptime", ]; lazy_static! { diff --git a/cli/dts/lib.deno.unstable.d.ts b/cli/dts/lib.deno.unstable.d.ts index 667b1fbbacc323..b22bdcf1f97a0d 100644 --- a/cli/dts/lib.deno.unstable.d.ts +++ b/cli/dts/lib.deno.unstable.d.ts @@ -115,6 +115,8 @@ declare namespace Deno { */ export function loadavg(): number[]; + export function uptime(): { uptime: number }; + /** **Unstable** new API. yet to be vetted. Under consideration to possibly move to * Deno.build or Deno.versions and if it should depend sys-info, which may not * be desireable. diff --git a/cli/ops/os.rs b/cli/ops/os.rs index 6fd404a2365323..73703571b28db6 100644 --- a/cli/ops/os.rs +++ b/cli/ops/os.rs @@ -14,6 +14,7 @@ use std::env; pub fn init(rt: &mut deno_core::JsRuntime) { super::reg_json_sync(rt, "op_exit", op_exit); + super::reg_json_sync(rt, "op_uptime", op_uptime); super::reg_json_sync(rt, "op_env", op_env); super::reg_json_sync(rt, "op_exec_path", op_exec_path); super::reg_json_sync(rt, "op_set_env", op_set_env); @@ -131,6 +132,22 @@ fn op_loadavg( } } +fn op_uptime( + state: &mut OpState, + _args: Value, + _zero_copy: &mut [ZeroCopyBuf], +) -> Result { + super::check_unstable(state, "Deno.uptime"); + state.borrow::().check_env()?; + + match sys_info::boottime() { + Ok(uptime) => Ok(json!({ + "uptime": uptime.tv_sec + })), + Err(_) => Ok(json!({})), + } +} + fn op_hostname( state: &mut OpState, _args: Value, diff --git a/cli/rt/30_os.js b/cli/rt/30_os.js index ebc4e89164743b..c1c34b6af415b6 100644 --- a/cli/rt/30_os.js +++ b/cli/rt/30_os.js @@ -7,6 +7,10 @@ return core.jsonOpSync("op_loadavg"); } + function uptime() { + return core.jsonOpSync("op_uptime"); + } + function hostname() { return core.jsonOpSync("op_hostname"); } @@ -62,5 +66,6 @@ systemCpuInfo, hostname, loadavg, + uptime, }; })(this); diff --git a/cli/rt/90_deno_ns.js b/cli/rt/90_deno_ns.js index 9188788ec75f16..5b278931980269 100644 --- a/cli/rt/90_deno_ns.js +++ b/cli/rt/90_deno_ns.js @@ -127,6 +127,7 @@ linkSync: __bootstrap.fs.linkSync, futime: __bootstrap.fs.futime, futimeSync: __bootstrap.fs.futimeSync, + uptime: __bootstrap.os.uptime, utime: __bootstrap.fs.utime, utimeSync: __bootstrap.fs.utimeSync, symlink: __bootstrap.fs.symlink,