@gazzehamine/armada-watch-agent 1.0.0 → 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.
package/README.md CHANGED
@@ -133,6 +133,3 @@ The agent needs permission to read system metrics. Run with appropriate user per
133
133
 
134
134
  MIT
135
135
 
136
- ## Repository
137
-
138
- https://github.com/gazzehamine/armada-watch
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 {
@@ -23,11 +24,11 @@ async function collectMetrics() {
23
24
  // CPU Usage
24
25
  const cpuLoad = await systeminformation_1.default.currentLoad();
25
26
  const cpuUsage = cpuLoad.currentLoad;
26
- // Memory Usage
27
+ // Memory Usage (excluding buffers/cache)
27
28
  const mem = await systeminformation_1.default.mem();
28
- const memoryUsage = (mem.used / mem.total) * 100;
29
+ const memoryUsage = ((mem.total - mem.available) / mem.total) * 100;
29
30
  const memoryTotal = mem.total;
30
- const memoryUsed = mem.used;
31
+ const memoryUsed = mem.total - mem.available;
31
32
  // Disk Usage
32
33
  const fsSize = await systeminformation_1.default.fsSize();
33
34
  const mainDisk = fsSize[0];
@@ -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.0",
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": {
@@ -24,7 +24,7 @@
24
24
  "license": "MIT",
25
25
  "repository": {
26
26
  "type": "git",
27
- "url": "https://github.com/gazzehamine/armada-watch.git",
27
+ "url": "https://github.com/armadadelivery/armada-watch.git",
28
28
  "directory": "agent"
29
29
  },
30
30
  "files": [