launchlayer-apm-agent 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.collectDockerMetrics = collectDockerMetrics;
37
+ const http = __importStar(require("http"));
38
+ /**
39
+ * Collect Docker container metrics via the Docker Engine API over unix socket.
40
+ */
41
+ async function collectDockerMetrics(socketPath) {
42
+ try {
43
+ const containers = await dockerGet(socketPath, '/containers/json');
44
+ if (!containers || containers.length === 0)
45
+ return [];
46
+ const metrics = [];
47
+ for (const container of containers) {
48
+ try {
49
+ const stats = await dockerGet(socketPath, `/containers/${container.Id}/stats?stream=false`);
50
+ const cpuPct = calculateCpuPercent(stats);
51
+ const memUsedMb = (stats.memory_stats?.usage || 0) / (1024 * 1024);
52
+ const memLimitMb = (stats.memory_stats?.limit || 0) / (1024 * 1024);
53
+ const networks = stats.networks || {};
54
+ let netRx = 0;
55
+ let netTx = 0;
56
+ for (const iface of Object.values(networks)) {
57
+ netRx += iface.rx_bytes || 0;
58
+ netTx += iface.tx_bytes || 0;
59
+ }
60
+ metrics.push({
61
+ containerId: container.Id.substring(0, 12),
62
+ containerName: (container.Names?.[0] || '').replace(/^\//, ''),
63
+ image: container.Image || '',
64
+ cpuPct: Math.round(cpuPct * 10) / 10,
65
+ memUsedMb: Math.round(memUsedMb),
66
+ memLimitMb: Math.round(memLimitMb),
67
+ netInKbps: Math.round(netRx / 1024),
68
+ netOutKbps: Math.round(netTx / 1024),
69
+ restartCount: container.Restart?.Count || 0,
70
+ status: container.State || 'unknown',
71
+ });
72
+ }
73
+ catch {
74
+ // Skip individual container errors
75
+ }
76
+ }
77
+ return metrics;
78
+ }
79
+ catch (err) {
80
+ console.error('[docker] Failed to collect metrics:', err.message);
81
+ return [];
82
+ }
83
+ }
84
+ function calculateCpuPercent(stats) {
85
+ const cpuStats = stats.cpu_stats;
86
+ const preCpuStats = stats.precpu_stats;
87
+ if (!cpuStats?.cpu_usage || !preCpuStats?.cpu_usage)
88
+ return 0;
89
+ const cpuDelta = cpuStats.cpu_usage.total_usage - preCpuStats.cpu_usage.total_usage;
90
+ const systemDelta = cpuStats.system_cpu_usage - (preCpuStats.system_cpu_usage || 0);
91
+ if (systemDelta <= 0 || cpuDelta < 0)
92
+ return 0;
93
+ const numCpus = cpuStats.online_cpus || cpuStats.cpu_usage.percpu_usage?.length || 1;
94
+ return (cpuDelta / systemDelta) * numCpus * 100;
95
+ }
96
+ function dockerGet(socketPath, path) {
97
+ return new Promise((resolve, reject) => {
98
+ const req = http.request({ socketPath, path, method: 'GET', headers: { Host: 'localhost' } }, (res) => {
99
+ const chunks = [];
100
+ res.on('data', (chunk) => chunks.push(chunk));
101
+ res.on('end', () => {
102
+ try {
103
+ resolve(JSON.parse(Buffer.concat(chunks).toString()));
104
+ }
105
+ catch (err) {
106
+ reject(err);
107
+ }
108
+ });
109
+ });
110
+ req.on('error', reject);
111
+ req.setTimeout(5000, () => {
112
+ req.destroy();
113
+ reject(new Error('Docker API timeout'));
114
+ });
115
+ req.end();
116
+ });
117
+ }
118
+ //# sourceMappingURL=docker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker.js","sourceRoot":"","sources":["../../src/collectors/docker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export interface HostMetrics {
2
+ cpuPct: number;
3
+ memUsedMb: number;
4
+ memTotalMb: number;
5
+ diskReadKbps: number;
6
+ diskWriteKbps: number;
7
+ netInKbps: number;
8
+ netOutKbps: number;
9
+ loadAvg1m: number;
10
+ }
11
+ /**
12
+ * Collect host metrics from /proc filesystem.
13
+ */
14
+ export declare function collectHostMetrics(procPath: string): Promise<HostMetrics>;
15
+ //# sourceMappingURL=host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../src/collectors/host.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAgBD;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAiB/E"}
@@ -0,0 +1,179 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.collectHostMetrics = collectHostMetrics;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ let prevCpu = null;
40
+ let prevDisk = null;
41
+ let prevNet = null;
42
+ /**
43
+ * Collect host metrics from /proc filesystem.
44
+ */
45
+ async function collectHostMetrics(procPath) {
46
+ const cpuPct = await getCpuPercent(procPath);
47
+ const mem = getMemory(procPath);
48
+ const disk = getDiskIO(procPath);
49
+ const net = getNetworkIO(procPath);
50
+ const loadAvg = getLoadAvg(procPath);
51
+ return {
52
+ cpuPct: Math.round(cpuPct * 10) / 10,
53
+ memUsedMb: Math.round(mem.usedMb),
54
+ memTotalMb: Math.round(mem.totalMb),
55
+ diskReadKbps: Math.round(disk.readKbps),
56
+ diskWriteKbps: Math.round(disk.writeKbps),
57
+ netInKbps: Math.round(net.rxKbps),
58
+ netOutKbps: Math.round(net.txKbps),
59
+ loadAvg1m: loadAvg,
60
+ };
61
+ }
62
+ async function getCpuPercent(procPath) {
63
+ const stat = fs.readFileSync(path.join(procPath, 'stat'), 'utf-8');
64
+ const line = stat.split('\n').find((l) => l.startsWith('cpu '));
65
+ if (!line)
66
+ return 0;
67
+ const parts = line.split(/\s+/).slice(1).map(Number);
68
+ const current = {
69
+ user: parts[0],
70
+ nice: parts[1],
71
+ system: parts[2],
72
+ idle: parts[3],
73
+ iowait: parts[4] || 0,
74
+ irq: parts[5] || 0,
75
+ softirq: parts[6] || 0,
76
+ };
77
+ if (!prevCpu) {
78
+ prevCpu = current;
79
+ // Wait 1s for a second sample
80
+ await new Promise((r) => setTimeout(r, 1000));
81
+ return getCpuPercent(procPath);
82
+ }
83
+ const totalDelta = (current.user - prevCpu.user) +
84
+ (current.nice - prevCpu.nice) +
85
+ (current.system - prevCpu.system) +
86
+ (current.idle - prevCpu.idle) +
87
+ (current.iowait - prevCpu.iowait) +
88
+ (current.irq - prevCpu.irq) +
89
+ (current.softirq - prevCpu.softirq);
90
+ const idleDelta = current.idle - prevCpu.idle;
91
+ prevCpu = current;
92
+ if (totalDelta === 0)
93
+ return 0;
94
+ return ((totalDelta - idleDelta) / totalDelta) * 100;
95
+ }
96
+ function getMemory(procPath) {
97
+ const meminfo = fs.readFileSync(path.join(procPath, 'meminfo'), 'utf-8');
98
+ const lines = meminfo.split('\n');
99
+ const getValue = (key) => {
100
+ const line = lines.find((l) => l.startsWith(key));
101
+ if (!line)
102
+ return 0;
103
+ return parseInt(line.split(/\s+/)[1], 10) / 1024; // KB → MB
104
+ };
105
+ const totalMb = getValue('MemTotal:');
106
+ const availableMb = getValue('MemAvailable:');
107
+ return { usedMb: totalMb - availableMb, totalMb };
108
+ }
109
+ function getDiskIO(procPath) {
110
+ try {
111
+ const diskstats = fs.readFileSync(path.join(procPath, 'diskstats'), 'utf-8');
112
+ let totalRead = 0;
113
+ let totalWrite = 0;
114
+ for (const line of diskstats.split('\n')) {
115
+ const parts = line.trim().split(/\s+/);
116
+ if (parts.length < 14)
117
+ continue;
118
+ const name = parts[2];
119
+ // Only count physical disks (sda, vda, nvme0n1), not partitions
120
+ if (/^(sd|vd|nvme\d+n\d+)$/.test(name)) {
121
+ totalRead += parseInt(parts[5], 10) * 512; // sectors → bytes
122
+ totalWrite += parseInt(parts[9], 10) * 512;
123
+ }
124
+ }
125
+ const now = Date.now();
126
+ if (!prevDisk) {
127
+ prevDisk = { readBytes: totalRead, writeBytes: totalWrite, ts: now };
128
+ return { readKbps: 0, writeKbps: 0 };
129
+ }
130
+ const dtSec = (now - prevDisk.ts) / 1000;
131
+ const readKbps = (totalRead - prevDisk.readBytes) / 1024 / dtSec;
132
+ const writeKbps = (totalWrite - prevDisk.writeBytes) / 1024 / dtSec;
133
+ prevDisk = { readBytes: totalRead, writeBytes: totalWrite, ts: now };
134
+ return { readKbps: Math.max(0, readKbps), writeKbps: Math.max(0, writeKbps) };
135
+ }
136
+ catch {
137
+ return { readKbps: 0, writeKbps: 0 };
138
+ }
139
+ }
140
+ function getNetworkIO(procPath) {
141
+ try {
142
+ const netDev = fs.readFileSync(path.join(procPath, 'net/dev'), 'utf-8');
143
+ let totalRx = 0;
144
+ let totalTx = 0;
145
+ for (const line of netDev.split('\n').slice(2)) {
146
+ const parts = line.trim().split(/[\s:]+/);
147
+ if (parts.length < 10)
148
+ continue;
149
+ const iface = parts[0];
150
+ if (iface === 'lo')
151
+ continue; // Skip loopback
152
+ totalRx += parseInt(parts[1], 10);
153
+ totalTx += parseInt(parts[9], 10);
154
+ }
155
+ const now = Date.now();
156
+ if (!prevNet) {
157
+ prevNet = { rxBytes: totalRx, txBytes: totalTx, ts: now };
158
+ return { rxKbps: 0, txKbps: 0 };
159
+ }
160
+ const dtSec = (now - prevNet.ts) / 1000;
161
+ const rxKbps = (totalRx - prevNet.rxBytes) / 1024 / dtSec;
162
+ const txKbps = (totalTx - prevNet.txBytes) / 1024 / dtSec;
163
+ prevNet = { rxBytes: totalRx, txBytes: totalTx, ts: now };
164
+ return { rxKbps: Math.max(0, rxKbps), txKbps: Math.max(0, txKbps) };
165
+ }
166
+ catch {
167
+ return { rxKbps: 0, txKbps: 0 };
168
+ }
169
+ }
170
+ function getLoadAvg(procPath) {
171
+ try {
172
+ const loadavg = fs.readFileSync(path.join(procPath, 'loadavg'), 'utf-8');
173
+ return parseFloat(loadavg.split(' ')[0]);
174
+ }
175
+ catch {
176
+ return 0;
177
+ }
178
+ }
179
+ //# sourceMappingURL=host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.js","sourceRoot":"","sources":["../../src/collectors/host.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,gDAiBC;AAhDD,uCAAyB;AACzB,2CAA6B;AAuB7B,IAAI,OAAO,GAAoB,IAAI,CAAC;AACpC,IAAI,QAAQ,GAAiE,IAAI,CAAC;AAClF,IAAI,OAAO,GAA4D,IAAI,CAAC;AAE5E;;GAEG;AACI,KAAK,UAAU,kBAAkB,CAAC,QAAgB;IACvD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IAChC,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IACjC,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAErC,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE;QACpC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;QACjC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;QACnC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;QACvC,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;QACzC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;QACjC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;QAClC,SAAS,EAAE,OAAO;KACnB,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,QAAgB;IAC3C,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;IACnE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAChE,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,CAAC;IAEpB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACrD,MAAM,OAAO,GAAa;QACxB,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QACd,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QACd,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QAChB,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QACd,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QACrB,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QAClB,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;KACvB,CAAC;IAEF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,OAAO,CAAC;QAClB,8BAA8B;QAC9B,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAC9C,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,UAAU,GACd,CAAC,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QAC7B,CAAC,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QAC7B,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QACjC,CAAC,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QAC7B,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QACjC,CAAC,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QAC3B,CAAC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEtC,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC9C,OAAO,GAAG,OAAO,CAAC;IAElB,IAAI,UAAU,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAC/B,OAAO,CAAC,CAAC,UAAU,GAAG,SAAS,CAAC,GAAG,UAAU,CAAC,GAAG,GAAG,CAAC;AACvD,CAAC;AAED,SAAS,SAAS,CAAC,QAAgB;IACjC,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;IACzE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAU,EAAE;QACvC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI;YAAE,OAAO,CAAC,CAAC;QACpB,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,UAAU;IAC9D,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IACtC,MAAM,WAAW,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC9C,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,WAAW,EAAE,OAAO,EAAE,CAAC;AACpD,CAAC;AAED,SAAS,SAAS,CAAC,QAAgB;IACjC,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;QAC7E,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACvC,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE;gBAAE,SAAS;YAChC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,gEAAgE;YAChE,IAAI,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvC,SAAS,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,kBAAkB;gBAC7D,UAAU,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;YAC7C,CAAC;QACH,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,QAAQ,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;YACrE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;QACvC,CAAC;QAED,MAAM,KAAK,GAAG,CAAC,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;QACzC,MAAM,QAAQ,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC;QACjE,MAAM,SAAS,GAAG,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC;QAEpE,QAAQ,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;QACrE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC;IAChF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IACvC,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,QAAgB;IACpC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;QACxE,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC1C,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE;gBAAE,SAAS;YAChC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,KAAK,KAAK,IAAI;gBAAE,SAAS,CAAC,gBAAgB;YAC9C,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAClC,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACpC,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;YAC1D,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAClC,CAAC;QAED,MAAM,KAAK,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;QACxC,MAAM,MAAM,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC;QAC1D,MAAM,MAAM,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC;QAE1D,OAAO,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;QAC1D,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IAClC,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,QAAgB;IAClC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;QACzE,OAAO,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC"}
@@ -0,0 +1,46 @@
1
+ export interface DatabaseConfig {
2
+ name: string;
3
+ host: string;
4
+ port: number;
5
+ database: string;
6
+ username: string;
7
+ password: string;
8
+ ssl: boolean;
9
+ interval_seconds: number;
10
+ explain_enabled: boolean;
11
+ }
12
+ export interface AgentConfig {
13
+ agent: {
14
+ collector_url: string;
15
+ api_key: string;
16
+ instance_id: string;
17
+ hostname: string;
18
+ };
19
+ host: {
20
+ enabled: boolean;
21
+ interval_seconds: number;
22
+ proc_path: string;
23
+ };
24
+ docker: {
25
+ enabled: boolean;
26
+ interval_seconds: number;
27
+ socket: string;
28
+ };
29
+ databases: DatabaseConfig[];
30
+ receiver: {
31
+ enabled: boolean;
32
+ port: number;
33
+ bind: string;
34
+ };
35
+ }
36
+ /**
37
+ * Handle CLI subcommands (init).
38
+ * Returns true if a subcommand was handled.
39
+ */
40
+ export declare function handleCli(): boolean;
41
+ /**
42
+ * Load config from YAML file with environment variable expansion.
43
+ * Supports ${VAR} and ${VAR:-default} syntax.
44
+ */
45
+ export declare function loadConfig(configPath?: string): AgentConfig;
46
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,OAAO,CAAC;IACb,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE;QACL,aAAa,EAAE,MAAM,CAAC;QACtB,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,IAAI,EAAE;QACJ,OAAO,EAAE,OAAO,CAAC;QACjB,gBAAgB,EAAE,MAAM,CAAC;QACzB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,MAAM,EAAE;QACN,OAAO,EAAE,OAAO,CAAC;QACjB,gBAAgB,EAAE,MAAM,CAAC;QACzB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,QAAQ,EAAE;QACR,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AA0CD;;;GAGG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAmBnC;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,WAAW,CAe3D"}
package/dist/config.js ADDED
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.handleCli = handleCli;
37
+ exports.loadConfig = loadConfig;
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ const yaml = __importStar(require("js-yaml"));
41
+ /**
42
+ * Resolve config file path with search order:
43
+ * 1. --config CLI arg
44
+ * 2. AGENT_CONFIG_PATH env var
45
+ * 3. ./config.yaml (current directory)
46
+ * 4. /etc/launchlayer-agent/config.yaml
47
+ * 5. Bundled default (next to the binary)
48
+ */
49
+ function resolveConfigPath() {
50
+ // 1. CLI argument: --config <path>
51
+ const configIdx = process.argv.indexOf('--config');
52
+ if (configIdx !== -1 && process.argv[configIdx + 1]) {
53
+ const p = process.argv[configIdx + 1];
54
+ if (fs.existsSync(p))
55
+ return p;
56
+ throw new Error(`Config file not found: ${p}`);
57
+ }
58
+ // 2. Environment variable
59
+ if (process.env.AGENT_CONFIG_PATH && fs.existsSync(process.env.AGENT_CONFIG_PATH)) {
60
+ return process.env.AGENT_CONFIG_PATH;
61
+ }
62
+ // 3. Current working directory
63
+ const cwdConfig = path.join(process.cwd(), 'config.yaml');
64
+ if (fs.existsSync(cwdConfig))
65
+ return cwdConfig;
66
+ // 4. System-wide config (Linux)
67
+ const sysConfig = '/etc/launchlayer-agent/config.yaml';
68
+ if (fs.existsSync(sysConfig))
69
+ return sysConfig;
70
+ // 5. Bundled default (next to dist/)
71
+ const bundled = path.join(__dirname, '..', 'config.yaml');
72
+ if (fs.existsSync(bundled))
73
+ return bundled;
74
+ throw new Error('No config.yaml found. Run "launchlayer-agent init" to create one, ' +
75
+ 'or specify --config <path>');
76
+ }
77
+ /**
78
+ * Handle CLI subcommands (init).
79
+ * Returns true if a subcommand was handled.
80
+ */
81
+ function handleCli() {
82
+ const cmd = process.argv[2];
83
+ if (cmd === 'init') {
84
+ const bundled = path.join(__dirname, '..', 'config.yaml');
85
+ const dest = path.join(process.cwd(), 'config.yaml');
86
+ if (fs.existsSync(dest)) {
87
+ console.log('config.yaml already exists in current directory.');
88
+ return true;
89
+ }
90
+ if (!fs.existsSync(bundled)) {
91
+ console.error('Bundled config.yaml not found. Reinstall the package.');
92
+ process.exit(1);
93
+ }
94
+ fs.copyFileSync(bundled, dest);
95
+ console.log('Created config.yaml in current directory.');
96
+ console.log('Edit it with your collector URL and API key, then run: launchlayer-agent');
97
+ return true;
98
+ }
99
+ return false;
100
+ }
101
+ /**
102
+ * Load config from YAML file with environment variable expansion.
103
+ * Supports ${VAR} and ${VAR:-default} syntax.
104
+ */
105
+ function loadConfig(configPath) {
106
+ const filePath = configPath || resolveConfigPath();
107
+ let raw = fs.readFileSync(filePath, 'utf-8');
108
+ // Expand ${VAR} and ${VAR:-default} patterns
109
+ raw = raw.replace(/\$\{([^}]+)\}/g, (_match, expr) => {
110
+ const parts = expr.split(':-');
111
+ const envVar = parts[0].trim();
112
+ const defaultVal = parts.length > 1 ? parts.slice(1).join(':-') : '';
113
+ return process.env[envVar] || defaultVal;
114
+ });
115
+ const config = yaml.load(raw);
116
+ console.log(`[launchlayer-agent] Config loaded from ${filePath}`);
117
+ return config;
118
+ }
119
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare class Forwarder {
2
+ private client;
3
+ constructor(collectorUrl: string, apiKey: string);
4
+ sendHost(payload: unknown): Promise<void>;
5
+ sendContainers(payload: unknown): Promise<void>;
6
+ sendDatabase(payload: unknown): Promise<void>;
7
+ sendTraces(payload: unknown): Promise<void>;
8
+ }
9
+ //# sourceMappingURL=forwarder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forwarder.d.ts","sourceRoot":"","sources":["../src/forwarder.ts"],"names":[],"mappings":"AAEA,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAgB;gBAElB,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAW1C,QAAQ,CAAC,OAAO,EAAE,OAAO;IAQzB,cAAc,CAAC,OAAO,EAAE,OAAO;IAQ/B,YAAY,CAAC,OAAO,EAAE,OAAO;IAQ7B,UAAU,CAAC,OAAO,EAAE,OAAO;CAOlC"}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Forwarder = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ class Forwarder {
9
+ client;
10
+ constructor(collectorUrl, apiKey) {
11
+ this.client = axios_1.default.create({
12
+ baseURL: collectorUrl,
13
+ timeout: 10000,
14
+ headers: {
15
+ 'Content-Type': 'application/json',
16
+ Authorization: `Bearer ${apiKey}`,
17
+ },
18
+ });
19
+ }
20
+ async sendHost(payload) {
21
+ try {
22
+ await this.client.post('/ingest/host', payload);
23
+ }
24
+ catch (err) {
25
+ console.error('[forwarder] Failed to send host metrics:', err.message);
26
+ }
27
+ }
28
+ async sendContainers(payload) {
29
+ try {
30
+ await this.client.post('/ingest/containers', payload);
31
+ }
32
+ catch (err) {
33
+ console.error('[forwarder] Failed to send container metrics:', err.message);
34
+ }
35
+ }
36
+ async sendDatabase(payload) {
37
+ try {
38
+ await this.client.post('/ingest/database', payload);
39
+ }
40
+ catch (err) {
41
+ console.error('[forwarder] Failed to send database metrics:', err.message);
42
+ }
43
+ }
44
+ async sendTraces(payload) {
45
+ try {
46
+ await this.client.post('/ingest/traces', payload);
47
+ }
48
+ catch (err) {
49
+ console.error('[forwarder] Failed to forward traces:', err.message);
50
+ }
51
+ }
52
+ }
53
+ exports.Forwarder = Forwarder;
54
+ //# sourceMappingURL=forwarder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forwarder.js","sourceRoot":"","sources":["../src/forwarder.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA6C;AAE7C,MAAa,SAAS;IACZ,MAAM,CAAgB;IAE9B,YAAY,YAAoB,EAAE,MAAc;QAC9C,IAAI,CAAC,MAAM,GAAG,eAAK,CAAC,MAAM,CAAC;YACzB,OAAO,EAAE,YAAY;YACrB,OAAO,EAAE,KAAK;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,MAAM,EAAE;aAClC;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAgB;QAC7B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAAgB;QACnC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAAgB;QACjC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,8CAA8C,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAgB;QAC/B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;CACF;AA7CD,8BA6CC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}