@gazzehamine/armada-watch-agent 1.0.1 → 1.2.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.
Files changed (2) hide show
  1. package/dist/collector.js +67 -0
  2. package/package.json +1 -1
package/dist/collector.js CHANGED
@@ -9,6 +9,7 @@ exports.collectProcesses = collectProcesses;
9
9
  const systeminformation_1 = __importDefault(require("systeminformation"));
10
10
  const os_1 = __importDefault(require("os"));
11
11
  let lastNetworkStats = null;
12
+ let lastDiskStats = null;
12
13
  async function getSystemInfo() {
13
14
  const cpu = await systeminformation_1.default.cpu();
14
15
  return {
@@ -53,6 +54,57 @@ async function collectMetrics() {
53
54
  }
54
55
  // Uptime
55
56
  const uptime = os_1.default.uptime();
57
+ // Load Average (1, 5, 15 minutes)
58
+ const loadAvg = os_1.default.loadavg();
59
+ const loadAverage = [loadAvg[0], loadAvg[1], loadAvg[2]];
60
+ // Swap Usage
61
+ const swapTotal = mem.swaptotal;
62
+ const swapUsed = mem.swapused;
63
+ const swapUsage = swapTotal > 0 ? (swapUsed / swapTotal) * 100 : 0;
64
+ // Process Count
65
+ const processes = await systeminformation_1.default.processes();
66
+ const processCount = processes.all;
67
+ // Disk I/O (reads/writes per second)
68
+ const diskIO = await systeminformation_1.default.disksIO();
69
+ let diskReadPs = 0;
70
+ let diskWritePs = 0;
71
+ if (lastDiskStats) {
72
+ const timeDiff = (Date.now() - lastDiskStats.timestamp) / 1000; // seconds
73
+ diskReadPs = (diskIO.rIO - lastDiskStats.rIO) / timeDiff;
74
+ diskWritePs = (diskIO.wIO - lastDiskStats.wIO) / timeDiff;
75
+ }
76
+ lastDiskStats = {
77
+ rIO: diskIO.rIO,
78
+ wIO: diskIO.wIO,
79
+ timestamp: Date.now(),
80
+ };
81
+ // Phase 2: TCP Connections
82
+ const networkConnections = await systeminformation_1.default.networkConnections();
83
+ const tcpConnections = networkConnections.filter(c => c.protocol === 'tcp').length;
84
+ const tcpEstablished = networkConnections.filter(c => c.protocol === 'tcp' && c.state === 'ESTABLISHED').length;
85
+ const tcpTimeWait = networkConnections.filter(c => c.protocol === 'tcp' && c.state === 'TIME_WAIT').length;
86
+ // Phase 2: Network Errors and Drops
87
+ const networkErrorsRaw = mainInterface ? (mainInterface.rx_errors + mainInterface.tx_errors) : 0;
88
+ const networkDroppedRaw = mainInterface ? (mainInterface.rx_dropped + mainInterface.tx_dropped) : 0;
89
+ // Return totals (can be used to calculate rates if needed)
90
+ const networkErrors = networkErrorsRaw;
91
+ const networkDropped = networkDroppedRaw;
92
+ // Phase 2: Docker Containers (if Docker is available)
93
+ let dockerContainersRunning = 0;
94
+ let dockerContainersStopped = 0;
95
+ let dockerContainersTotal = 0;
96
+ try {
97
+ const dockerContainers = await systeminformation_1.default.dockerContainers();
98
+ dockerContainersTotal = dockerContainers.length;
99
+ dockerContainersRunning = dockerContainers.filter(c => c.state === 'running').length;
100
+ dockerContainersStopped = dockerContainers.filter(c => c.state !== 'running').length;
101
+ }
102
+ catch (error) {
103
+ // Docker not available or not running
104
+ dockerContainersTotal = 0;
105
+ dockerContainersRunning = 0;
106
+ dockerContainersStopped = 0;
107
+ }
56
108
  return {
57
109
  cpuUsage,
58
110
  memoryUsage,
@@ -64,6 +116,21 @@ async function collectMetrics() {
64
116
  networkRx,
65
117
  networkTx,
66
118
  uptime,
119
+ loadAverage,
120
+ swapUsage,
121
+ swapTotal,
122
+ swapUsed,
123
+ processCount,
124
+ diskReadPs,
125
+ diskWritePs,
126
+ tcpConnections,
127
+ tcpEstablished,
128
+ tcpTimeWait,
129
+ networkErrors,
130
+ networkDropped,
131
+ dockerContainersRunning,
132
+ dockerContainersStopped,
133
+ dockerContainersTotal,
67
134
  };
68
135
  }
69
136
  async function collectProcesses() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gazzehamine/armada-watch-agent",
3
- "version": "1.0.1",
3
+ "version": "1.2.0",
4
4
  "description": "Monitoring agent for Armada Watch - EC2 instance monitoring",
5
5
  "main": "dist/index.js",
6
6
  "bin": {