-
Notifications
You must be signed in to change notification settings - Fork 55
Expand file tree
/
Copy pathdeno-runtime.ts
More file actions
54 lines (48 loc) · 1.78 KB
/
Copy pathdeno-runtime.ts
File metadata and controls
54 lines (48 loc) · 1.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import {
type Attributes,
type ObservableGauge,
type ObservableResult,
type ObservableUpDownCounter,
ValueType,
} from "../../../deps.ts";
import { meter } from "../metrics.ts";
const memoryUsage: ObservableGauge<Attributes> = meter
.createObservableGauge("deno.memory_usage", {
unit: "By",
valueType: ValueType.DOUBLE,
description: "Deno process memory usage in bytes.",
});
const openResources: ObservableUpDownCounter<Attributes> = meter
.createObservableUpDownCounter("deno.open_resources", {
valueType: ValueType.DOUBLE,
description: "Number of open resources of a particular type.",
});
const gatherMemoryUsage = (x: ObservableResult<Attributes>) => {
const usage = Deno.memoryUsage();
x.observe(usage.rss, { "deno.memory.type": "rss" });
x.observe(usage.heapTotal, { "deno.memory.type": "heap_total" });
x.observe(usage.heapUsed, { "deno.memory.type": "heap_used" });
x.observe(usage.external, { "deno.memory.type": "external" });
};
const gatherOpenResources = (x: ObservableResult<Attributes>) => {
try {
// deno-lint-ignore no-explicit-any
const resources = (Deno as any).resources?.() as
| Record<string, string>
| undefined;
if (!resources) return;
const counts: Record<string, number> = {};
for (const type of Object.values(resources)) {
counts[type] = (counts[type] ?? 0) + 1;
}
for (const [type, count] of Object.entries(counts)) {
x.observe(count, { "deno.resource.type": type });
}
} catch {
// Deno.resources() may not be available in all environments
}
};
memoryUsage.addCallback(gatherMemoryUsage);
openResources.addCallback(gatherOpenResources);
// Kept for backward compatibility — no longer needed but exported to avoid import errors
export class DenoRuntimeInstrumentation {}