forked from exceptionless/Exceptionless.JavaScript
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathNodeEnvironmentInfoPlugin.ts
More file actions
116 lines (99 loc) · 2.76 KB
/
NodeEnvironmentInfoPlugin.ts
File metadata and controls
116 lines (99 loc) · 2.76 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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import {
argv,
memoryUsage,
pid,
title,
version
} from "process";
import {
arch,
cpus,
endianness,
freemem,
hostname,
loadavg,
networkInterfaces,
platform,
release,
tmpdir,
totalmem,
type,
uptime,
} from "os";
import {
EnvironmentInfo,
EventPluginContext,
IEventPlugin,
KnownEventDataKeys
} from "@exceptionless/core";
export class NodeEnvironmentInfoPlugin implements IEventPlugin {
public priority: number = 80;
public name: string = "NodeEnvironmentInfoPlugin";
private _environmentInfo: EnvironmentInfo | undefined;
public run(context: EventPluginContext): Promise<void> {
if (context.event.data && !context.event.data[KnownEventDataKeys.EnvironmentInfo]) {
const info: EnvironmentInfo | undefined = this.getEnvironmentInfo(context);
if (info) {
context.event.data[KnownEventDataKeys.EnvironmentInfo] = info;
}
}
return Promise.resolve();
}
private getEnvironmentInfo(context: EventPluginContext): EnvironmentInfo | undefined {
function getIpAddresses(): string {
const ips: string[] = [];
for (const ni of Object.values(networkInterfaces())) {
for (const network of ni || []) {
if (!network.internal && "IPv4" === network.family) {
ips.push(network.address);
}
}
}
return ips.join(", ");
}
function populateMemoryAndUptimeInfo(ei: EnvironmentInfo) {
ei.process_memory_size = memoryUsage().heapTotal;
ei.total_physical_memory = totalmem();
ei.available_physical_memory = freemem();
(ei.data as Record<string, unknown>).loadavg = loadavg();
(ei.data as Record<string, unknown>).uptime = uptime();
}
if (!cpus) {
return;
}
if (this._environmentInfo) {
populateMemoryAndUptimeInfo(this._environmentInfo);
return this._environmentInfo;
}
const info: EnvironmentInfo = {
processor_count: cpus().length,
command_line: argv.join(" "),
process_name: (title || "").replace(/[\uE000-\uF8FF]/g, ""),
process_id: pid + "",
process_memory_size: memoryUsage().heapTotal,
// thread_id: "",
architecture: arch(),
o_s_name: type(),
o_s_version: release(),
// install_id: "",
runtime_version: version,
data: {
platform: platform(),
tmpdir: tmpdir()
},
};
const config = context.client.config;
if (config.includeMachineName) {
info.machine_name = hostname();
}
if (config.includeIpAddress) {
info.ip_address = getIpAddresses();
}
if (endianness) {
(info.data as Record<string, unknown>).endianness = endianness();
}
populateMemoryAndUptimeInfo(info);
this._environmentInfo = info;
return this._environmentInfo;
}
}