buildhive-agent 1.0.0-beta.1

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 (170) hide show
  1. package/README.md +166 -0
  2. package/dist/__tests__/fakes/FakeDockerManager.d.ts +115 -0
  3. package/dist/__tests__/fakes/FakeDockerManager.d.ts.map +1 -0
  4. package/dist/__tests__/fakes/FakeDockerManager.js +203 -0
  5. package/dist/__tests__/fakes/FakeDockerManager.js.map +1 -0
  6. package/dist/acceptanceChecker.d.ts +26 -0
  7. package/dist/acceptanceChecker.d.ts.map +1 -0
  8. package/dist/acceptanceChecker.js +64 -0
  9. package/dist/acceptanceChecker.js.map +1 -0
  10. package/dist/advancedAgent.d.ts +161 -0
  11. package/dist/advancedAgent.d.ts.map +1 -0
  12. package/dist/advancedAgent.js +604 -0
  13. package/dist/advancedAgent.js.map +1 -0
  14. package/dist/agent.d.ts +101 -0
  15. package/dist/agent.d.ts.map +1 -0
  16. package/dist/agent.js +490 -0
  17. package/dist/agent.js.map +1 -0
  18. package/dist/api/jobStatusApi.d.ts +88 -0
  19. package/dist/api/jobStatusApi.d.ts.map +1 -0
  20. package/dist/api/jobStatusApi.js +240 -0
  21. package/dist/api/jobStatusApi.js.map +1 -0
  22. package/dist/autoUpdater.d.ts +135 -0
  23. package/dist/autoUpdater.d.ts.map +1 -0
  24. package/dist/autoUpdater.js +494 -0
  25. package/dist/autoUpdater.js.map +1 -0
  26. package/dist/cacheManager.d.ts +108 -0
  27. package/dist/cacheManager.d.ts.map +1 -0
  28. package/dist/cacheManager.js +300 -0
  29. package/dist/cacheManager.js.map +1 -0
  30. package/dist/cli.d.ts +11 -0
  31. package/dist/cli.d.ts.map +1 -0
  32. package/dist/cli.js +749 -0
  33. package/dist/cli.js.map +1 -0
  34. package/dist/config/index.d.ts +30 -0
  35. package/dist/config/index.d.ts.map +1 -0
  36. package/dist/config/index.js +35 -0
  37. package/dist/config/index.js.map +1 -0
  38. package/dist/config/loader.d.ts +45 -0
  39. package/dist/config/loader.d.ts.map +1 -0
  40. package/dist/config/loader.js +269 -0
  41. package/dist/config/loader.js.map +1 -0
  42. package/dist/config/types.d.ts +193 -0
  43. package/dist/config/types.d.ts.map +1 -0
  44. package/dist/config/types.js +90 -0
  45. package/dist/config/types.js.map +1 -0
  46. package/dist/config/validation.d.ts +28 -0
  47. package/dist/config/validation.d.ts.map +1 -0
  48. package/dist/config/validation.js +397 -0
  49. package/dist/config/validation.js.map +1 -0
  50. package/dist/docker.d.ts +96 -0
  51. package/dist/docker.d.ts.map +1 -0
  52. package/dist/docker.js +411 -0
  53. package/dist/docker.js.map +1 -0
  54. package/dist/enhancedJobExecutor.d.ts +81 -0
  55. package/dist/enhancedJobExecutor.d.ts.map +1 -0
  56. package/dist/enhancedJobExecutor.js +223 -0
  57. package/dist/enhancedJobExecutor.js.map +1 -0
  58. package/dist/executors/executorFactory.d.ts +46 -0
  59. package/dist/executors/executorFactory.d.ts.map +1 -0
  60. package/dist/executors/executorFactory.js +80 -0
  61. package/dist/executors/executorFactory.js.map +1 -0
  62. package/dist/executors/index.d.ts +7 -0
  63. package/dist/executors/index.d.ts.map +1 -0
  64. package/dist/executors/index.js +6 -0
  65. package/dist/executors/index.js.map +1 -0
  66. package/dist/executors/nativeExecutor.d.ts +60 -0
  67. package/dist/executors/nativeExecutor.d.ts.map +1 -0
  68. package/dist/executors/nativeExecutor.js +311 -0
  69. package/dist/executors/nativeExecutor.js.map +1 -0
  70. package/dist/executors/types.d.ts +38 -0
  71. package/dist/executors/types.d.ts.map +1 -0
  72. package/dist/executors/types.js +9 -0
  73. package/dist/executors/types.js.map +1 -0
  74. package/dist/healthMonitor.d.ts +213 -0
  75. package/dist/healthMonitor.d.ts.map +1 -0
  76. package/dist/healthMonitor.js +547 -0
  77. package/dist/healthMonitor.js.map +1 -0
  78. package/dist/index.d.ts +16 -0
  79. package/dist/index.d.ts.map +1 -0
  80. package/dist/index.js +16 -0
  81. package/dist/index.js.map +1 -0
  82. package/dist/jobExecutor.d.ts +117 -0
  83. package/dist/jobExecutor.d.ts.map +1 -0
  84. package/dist/jobExecutor.js +458 -0
  85. package/dist/jobExecutor.js.map +1 -0
  86. package/dist/lifecycleExecutor.d.ts +54 -0
  87. package/dist/lifecycleExecutor.d.ts.map +1 -0
  88. package/dist/lifecycleExecutor.js +230 -0
  89. package/dist/lifecycleExecutor.js.map +1 -0
  90. package/dist/main.d.ts +15 -0
  91. package/dist/main.d.ts.map +1 -0
  92. package/dist/main.js +77 -0
  93. package/dist/main.js.map +1 -0
  94. package/dist/metrics.d.ts +103 -0
  95. package/dist/metrics.d.ts.map +1 -0
  96. package/dist/metrics.js +360 -0
  97. package/dist/metrics.js.map +1 -0
  98. package/dist/recipes/builtinRecipes.d.ts +11 -0
  99. package/dist/recipes/builtinRecipes.d.ts.map +1 -0
  100. package/dist/recipes/builtinRecipes.js +688 -0
  101. package/dist/recipes/builtinRecipes.js.map +1 -0
  102. package/dist/recipes/index.d.ts +18 -0
  103. package/dist/recipes/index.d.ts.map +1 -0
  104. package/dist/recipes/index.js +17 -0
  105. package/dist/recipes/index.js.map +1 -0
  106. package/dist/recipes/recipeRegistry.d.ts +49 -0
  107. package/dist/recipes/recipeRegistry.d.ts.map +1 -0
  108. package/dist/recipes/recipeRegistry.js +264 -0
  109. package/dist/recipes/recipeRegistry.js.map +1 -0
  110. package/dist/recipes/types.d.ts +116 -0
  111. package/dist/recipes/types.d.ts.map +1 -0
  112. package/dist/recipes/types.js +10 -0
  113. package/dist/recipes/types.js.map +1 -0
  114. package/dist/recovery.d.ts +133 -0
  115. package/dist/recovery.d.ts.map +1 -0
  116. package/dist/recovery.js +299 -0
  117. package/dist/recovery.js.map +1 -0
  118. package/dist/registration/apiClient.d.ts +44 -0
  119. package/dist/registration/apiClient.d.ts.map +1 -0
  120. package/dist/registration/apiClient.js +149 -0
  121. package/dist/registration/apiClient.js.map +1 -0
  122. package/dist/registration/index.d.ts +41 -0
  123. package/dist/registration/index.d.ts.map +1 -0
  124. package/dist/registration/index.js +141 -0
  125. package/dist/registration/index.js.map +1 -0
  126. package/dist/registration/machineId.d.ts +30 -0
  127. package/dist/registration/machineId.d.ts.map +1 -0
  128. package/dist/registration/machineId.js +89 -0
  129. package/dist/registration/machineId.js.map +1 -0
  130. package/dist/registration/types.d.ts +32 -0
  131. package/dist/registration/types.d.ts.map +1 -0
  132. package/dist/registration/types.js +9 -0
  133. package/dist/registration/types.js.map +1 -0
  134. package/dist/resourceGovernor.d.ts +57 -0
  135. package/dist/resourceGovernor.d.ts.map +1 -0
  136. package/dist/resourceGovernor.js +125 -0
  137. package/dist/resourceGovernor.js.map +1 -0
  138. package/dist/security/secretManager.d.ts +107 -0
  139. package/dist/security/secretManager.d.ts.map +1 -0
  140. package/dist/security/secretManager.js +361 -0
  141. package/dist/security/secretManager.js.map +1 -0
  142. package/dist/security.d.ts +134 -0
  143. package/dist/security.d.ts.map +1 -0
  144. package/dist/security.js +470 -0
  145. package/dist/security.js.map +1 -0
  146. package/dist/storage/artifactUploader.d.ts +155 -0
  147. package/dist/storage/artifactUploader.d.ts.map +1 -0
  148. package/dist/storage/artifactUploader.js +554 -0
  149. package/dist/storage/artifactUploader.js.map +1 -0
  150. package/dist/types.d.ts +49 -0
  151. package/dist/types.d.ts.map +1 -0
  152. package/dist/types.js +7 -0
  153. package/dist/types.js.map +1 -0
  154. package/dist/utils/capabilities.d.ts +23 -0
  155. package/dist/utils/capabilities.d.ts.map +1 -0
  156. package/dist/utils/capabilities.js +200 -0
  157. package/dist/utils/capabilities.js.map +1 -0
  158. package/dist/utils/logger.d.ts +20 -0
  159. package/dist/utils/logger.d.ts.map +1 -0
  160. package/dist/utils/logger.js +188 -0
  161. package/dist/utils/logger.js.map +1 -0
  162. package/dist/utils/sdkScanner.d.ts +105 -0
  163. package/dist/utils/sdkScanner.d.ts.map +1 -0
  164. package/dist/utils/sdkScanner.js +459 -0
  165. package/dist/utils/sdkScanner.js.map +1 -0
  166. package/dist/websocketClient.d.ts +154 -0
  167. package/dist/websocketClient.d.ts.map +1 -0
  168. package/dist/websocketClient.js +422 -0
  169. package/dist/websocketClient.js.map +1 -0
  170. package/package.json +64 -0
@@ -0,0 +1,230 @@
1
+ /**
2
+ * Lifecycle Executor - Setup/Execute/Teardown job phases
3
+ *
4
+ * Manages the full lifecycle of a job execution:
5
+ * 1. Setup steps run sequentially
6
+ * 2. Main build command executes
7
+ * 3. Teardown steps ALWAYS run (even on failure)
8
+ */
9
+ import { spawn } from 'child_process';
10
+ // ---------------------------------------------------------------------------
11
+ // Constants
12
+ // ---------------------------------------------------------------------------
13
+ const DEFAULT_STEP_TIMEOUT_S = 300;
14
+ const SIGKILL_GRACE_MS = 5000;
15
+ // ---------------------------------------------------------------------------
16
+ // LifecycleExecutor
17
+ // ---------------------------------------------------------------------------
18
+ export class LifecycleExecutor {
19
+ /**
20
+ * Execute full lifecycle: setup -> main command -> teardown
21
+ *
22
+ * CRITICAL BEHAVIORS:
23
+ * 1. Setup steps run sequentially. If a step fails and continueOnError=false,
24
+ * skip remaining setup + main command, but STILL run teardown.
25
+ * 2. Main command runs only if all required setup steps succeed.
26
+ * 3. Teardown ALWAYS runs, even if setup or main command failed.
27
+ * 4. Each step has its own timeout (default 300s).
28
+ * 5. If abortSignal fires, terminate current step and run teardown.
29
+ */
30
+ async execute(setupSteps, mainCommand, teardownSteps, options) {
31
+ const totalStart = Date.now();
32
+ const setupResults = [];
33
+ let executeResult;
34
+ const teardownResults = [];
35
+ let setupFailed = false;
36
+ let aborted = this.isAborted(options);
37
+ // ---- SETUP PHASE (0-30%) ----
38
+ const setupCount = setupSteps.length;
39
+ for (let i = 0; i < setupCount; i++) {
40
+ const step = setupSteps[i];
41
+ const progressBase = (i / Math.max(setupCount, 1)) * 30;
42
+ if (aborted || setupFailed) {
43
+ setupResults.push(this.skippedResult('setup', step.name));
44
+ continue;
45
+ }
46
+ options.onProgress?.('setup', step.name, Math.round(progressBase));
47
+ const result = await this.executeStep(step, 'setup', options);
48
+ setupResults.push(result);
49
+ if (result.exitCode !== 0 && !step.continueOnError) {
50
+ setupFailed = true;
51
+ }
52
+ aborted = this.isAborted(options);
53
+ }
54
+ options.onProgress?.('setup', 'complete', 30);
55
+ // ---- EXECUTE PHASE (30-90%) ----
56
+ if (setupFailed || aborted) {
57
+ executeResult = this.skippedResult('execute', mainCommand);
58
+ }
59
+ else {
60
+ options.onProgress?.('execute', mainCommand, 30);
61
+ const mainStep = {
62
+ name: mainCommand,
63
+ command: mainCommand,
64
+ timeout: DEFAULT_STEP_TIMEOUT_S,
65
+ continueOnError: false,
66
+ };
67
+ executeResult = await this.executeStep(mainStep, 'execute', options);
68
+ options.onProgress?.('execute', mainCommand, 90);
69
+ }
70
+ aborted = this.isAborted(options);
71
+ // ---- TEARDOWN PHASE (90-100%) ----
72
+ // Teardown ALWAYS runs fully — strip abortSignal so it cannot be cancelled.
73
+ const teardownOptions = { ...options, abortSignal: undefined };
74
+ const teardownCount = teardownSteps.length;
75
+ for (let i = 0; i < teardownCount; i++) {
76
+ const step = teardownSteps[i];
77
+ const progressBase = 90 + ((i / Math.max(teardownCount, 1)) * 10);
78
+ teardownOptions.onProgress?.('teardown', step.name, Math.round(progressBase));
79
+ const result = await this.executeStep(step, 'teardown', teardownOptions);
80
+ teardownResults.push(result);
81
+ }
82
+ options.onProgress?.('teardown', 'complete', 100);
83
+ const totalDurationMs = Date.now() - totalStart;
84
+ const overallSuccess = !setupFailed &&
85
+ executeResult.exitCode === 0 &&
86
+ !executeResult.skipped;
87
+ return {
88
+ setupResults,
89
+ executeResult,
90
+ teardownResults,
91
+ overallSuccess,
92
+ totalDurationMs,
93
+ };
94
+ }
95
+ /**
96
+ * Execute a single lifecycle step using child_process.spawn.
97
+ */
98
+ executeStep(step, phase, options) {
99
+ return new Promise((resolve) => {
100
+ const start = Date.now();
101
+ const timeoutMs = (step.timeout ?? DEFAULT_STEP_TIMEOUT_S) * 1000;
102
+ let stdout = '';
103
+ let stderr = '';
104
+ let settled = false;
105
+ let proc;
106
+ const finish = (exitCode, error) => {
107
+ if (settled)
108
+ return;
109
+ settled = true;
110
+ clearTimeout(timer);
111
+ removeAbortListener();
112
+ resolve({
113
+ phase: phase,
114
+ stepName: step.name,
115
+ exitCode,
116
+ stdout,
117
+ stderr,
118
+ durationMs: Date.now() - start,
119
+ skipped: false,
120
+ error,
121
+ });
122
+ };
123
+ const killProc = (reason) => {
124
+ if (settled)
125
+ return;
126
+ try {
127
+ proc.kill('SIGTERM');
128
+ }
129
+ catch { /* already dead */ }
130
+ setTimeout(() => {
131
+ if (!settled) {
132
+ try {
133
+ proc.kill('SIGKILL');
134
+ }
135
+ catch { /* already dead */ }
136
+ }
137
+ }, SIGKILL_GRACE_MS);
138
+ // Don't finish here; let the 'close' event handle it.
139
+ // But set error so close handler knows what happened.
140
+ stderr += `\n[lifecycle] ${reason}`;
141
+ };
142
+ // Timeout handler
143
+ const timer = setTimeout(() => {
144
+ killProc(`Step timed out after ${step.timeout ?? DEFAULT_STEP_TIMEOUT_S}s`);
145
+ // If process doesn't close in grace period + 1s, force-resolve
146
+ setTimeout(() => {
147
+ finish(124, `Step timed out after ${step.timeout ?? DEFAULT_STEP_TIMEOUT_S}s`);
148
+ }, SIGKILL_GRACE_MS + 1000);
149
+ }, timeoutMs);
150
+ // Abort signal handler
151
+ const onAbort = () => {
152
+ killProc('Aborted by signal');
153
+ setTimeout(() => {
154
+ finish(130, 'Aborted by signal');
155
+ }, SIGKILL_GRACE_MS + 1000);
156
+ };
157
+ let removeAbortListener = () => { };
158
+ if (options.abortSignal) {
159
+ if (options.abortSignal.aborted) {
160
+ settled = true;
161
+ resolve({
162
+ phase: phase,
163
+ stepName: step.name,
164
+ exitCode: 130,
165
+ stdout: '',
166
+ stderr: '',
167
+ durationMs: 0,
168
+ skipped: false,
169
+ error: 'Aborted by signal',
170
+ });
171
+ return;
172
+ }
173
+ options.abortSignal.addEventListener('abort', onAbort, { once: true });
174
+ removeAbortListener = () => {
175
+ options.abortSignal?.removeEventListener('abort', onAbort);
176
+ };
177
+ }
178
+ // Merge environment
179
+ const env = {
180
+ ...process.env,
181
+ ...(options.environment ?? {}),
182
+ };
183
+ try {
184
+ proc = spawn('sh', ['-c', step.command], {
185
+ cwd: options.workDir,
186
+ env,
187
+ stdio: ['ignore', 'pipe', 'pipe'],
188
+ });
189
+ }
190
+ catch (err) {
191
+ finish(1, err instanceof Error ? err.message : String(err));
192
+ return;
193
+ }
194
+ proc.stdout?.on('data', (data) => {
195
+ const text = data.toString();
196
+ stdout += text;
197
+ options.onLog?.(phase, step.name, text);
198
+ });
199
+ proc.stderr?.on('data', (data) => {
200
+ const text = data.toString();
201
+ stderr += text;
202
+ options.onLog?.(phase, step.name, text);
203
+ });
204
+ proc.on('close', (code) => {
205
+ finish(code ?? 1);
206
+ });
207
+ proc.on('error', (err) => {
208
+ finish(1, err.message);
209
+ });
210
+ });
211
+ }
212
+ // ---------------------------------------------------------------------------
213
+ // Helpers
214
+ // ---------------------------------------------------------------------------
215
+ skippedResult(phase, stepName) {
216
+ return {
217
+ phase,
218
+ stepName,
219
+ exitCode: -1,
220
+ stdout: '',
221
+ stderr: '',
222
+ durationMs: 0,
223
+ skipped: true,
224
+ };
225
+ }
226
+ isAborted(options) {
227
+ return options.abortSignal?.aborted ?? false;
228
+ }
229
+ }
230
+ //# sourceMappingURL=lifecycleExecutor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycleExecutor.js","sourceRoot":"","sources":["../src/lifecycleExecutor.ts"],"names":[],"mappings":"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"}
package/dist/main.d.ts ADDED
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * BuildHive Agent - Main Entry Point
4
+ *
5
+ * Main entry point for the BuildHive agent that coordinates with the platform
6
+ * to execute CI jobs in isolated Docker containers.
7
+ *
8
+ * Requirements: 1.1, 1.2, 1.5, 1.6, 4.1, 4.2, 4.3, 4.4, 4.5
9
+ */
10
+ /**
11
+ * Main function to start the BuildHive agent
12
+ */
13
+ declare function main(): Promise<void>;
14
+ export { main };
15
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AAEA;;;;;;;GAOG;AASH;;GAEG;AACH,iBAAe,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAyDnC;AAUD,OAAO,EAAE,IAAI,EAAE,CAAC"}
package/dist/main.js ADDED
@@ -0,0 +1,77 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * BuildHive Agent - Main Entry Point
4
+ *
5
+ * Main entry point for the BuildHive agent that coordinates with the platform
6
+ * to execute CI jobs in isolated Docker containers.
7
+ *
8
+ * Requirements: 1.1, 1.2, 1.5, 1.6, 4.1, 4.2, 4.3, 4.4, 4.5
9
+ */
10
+ import { BuildHiveAgent } from './agent.js';
11
+ import { loadConfig } from './config/index.js';
12
+ import { createLogger } from './utils/logger.js';
13
+ import { checkStartupVersion } from './autoUpdater.js';
14
+ const logger = createLogger('main');
15
+ /**
16
+ * Main function to start the BuildHive agent
17
+ */
18
+ async function main() {
19
+ try {
20
+ logger.info('Starting BuildHive Agent...');
21
+ // Load configuration
22
+ const config = await loadConfig();
23
+ logger.info(`Loaded configuration for agent: ${config.name}`);
24
+ // Check for updates before starting (Task 2.1.3)
25
+ // Reads version from package.json; auto-update only if config opts in
26
+ const { createRequire } = await import('module');
27
+ const require = createRequire(import.meta.url);
28
+ const pkg = require('../package.json');
29
+ await checkStartupVersion({
30
+ localVersion: pkg.version,
31
+ autoUpdate: config.enableAutoUpdates,
32
+ });
33
+ // Create and start agent with capability detection
34
+ const agent = await BuildHiveAgent.create(config);
35
+ // Handle graceful shutdown
36
+ const shutdown = async (signal) => {
37
+ logger.info(`Received ${signal}, shutting down gracefully...`);
38
+ try {
39
+ await agent.stop();
40
+ logger.info('Agent stopped successfully');
41
+ process.exit(0);
42
+ }
43
+ catch (error) {
44
+ logger.error('Error during shutdown:', error);
45
+ process.exit(1);
46
+ }
47
+ };
48
+ process.on('SIGINT', () => shutdown('SIGINT'));
49
+ process.on('SIGTERM', () => shutdown('SIGTERM'));
50
+ process.on('SIGQUIT', () => shutdown('SIGQUIT'));
51
+ // Handle uncaught exceptions
52
+ process.on('uncaughtException', (error) => {
53
+ logger.error('Uncaught exception:', error);
54
+ shutdown('uncaughtException').catch(() => process.exit(1));
55
+ });
56
+ process.on('unhandledRejection', (reason, promise) => {
57
+ logger.error('Unhandled rejection at:', promise, 'reason:', reason);
58
+ shutdown('unhandledRejection').catch(() => process.exit(1));
59
+ });
60
+ // Start the agent
61
+ await agent.start();
62
+ logger.info('BuildHive Agent started successfully');
63
+ }
64
+ catch (error) {
65
+ logger.error('Failed to start BuildHive Agent:', error);
66
+ process.exit(1);
67
+ }
68
+ }
69
+ // Run main function if this file is executed directly
70
+ if (import.meta.url === `file://${process.argv[1]}`) {
71
+ main().catch((error) => {
72
+ console.error('Fatal error:', error);
73
+ process.exit(1);
74
+ });
75
+ }
76
+ export { main };
77
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AAEA;;;;;;;GAOG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;AAEpC;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAE3C,qBAAqB;QACrB,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,mCAAmC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAE9D,iDAAiD;QACjD,sEAAsE;QACtE,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;QAC9D,MAAM,mBAAmB,CAAC;YACxB,YAAY,EAAE,GAAG,CAAC,OAAO;YACzB,UAAU,EAAE,MAAM,CAAC,iBAAiB;SACrC,CAAC,CAAC;QAEH,mDAAmD;QACnD,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAElD,2BAA2B;QAC3B,MAAM,QAAQ,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;YACxC,MAAM,CAAC,IAAI,CAAC,YAAY,MAAM,+BAA+B,CAAC,CAAC;YAC/D,IAAI,CAAC;gBACH,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;gBAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;gBAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC,CAAC;QAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QACjD,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QAEjD,6BAA6B;QAC7B,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE;YACxC,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;YAC3C,QAAQ,CAAC,mBAAmB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;YACnD,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YACpE,QAAQ,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,kBAAkB;QAClB,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IAEtD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,sDAAsD;AACtD,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,UAAU,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACpD,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACrB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,OAAO,EAAE,IAAI,EAAE,CAAC"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Metrics Collector - System metrics collection and reporting
3
+ *
4
+ * Collects system performance metrics including CPU, memory, disk usage,
5
+ * and network statistics for monitoring and load balancing decisions.
6
+ *
7
+ * Requirements: 1.5, 1.6, 5.1, 5.2
8
+ */
9
+ import { AgentConfig } from './config/types.js';
10
+ export interface SystemMetrics {
11
+ cpuUsage: number;
12
+ memoryUsage: number;
13
+ diskUsage: number;
14
+ networkIn: number;
15
+ networkOut: number;
16
+ activeJobs: number;
17
+ queuedJobs: number;
18
+ completedJobs: number;
19
+ failedJobs: number;
20
+ timestamp: Date;
21
+ }
22
+ export declare class MetricsCollector {
23
+ private config;
24
+ private isRunning;
25
+ private metricsHistory;
26
+ private maxHistorySize;
27
+ private lastNetworkStats;
28
+ private jobStats;
29
+ constructor(config: AgentConfig);
30
+ /**
31
+ * Start metrics collection
32
+ */
33
+ start(): Promise<void>;
34
+ /**
35
+ * Stop metrics collection
36
+ */
37
+ stop(): Promise<void>;
38
+ /**
39
+ * Get current system metrics
40
+ */
41
+ getCurrentMetrics(): Promise<SystemMetrics>;
42
+ /**
43
+ * Get metrics history
44
+ */
45
+ getMetricsHistory(): SystemMetrics[];
46
+ /**
47
+ * Update job statistics
48
+ */
49
+ updateJobStats(stats: Partial<typeof this.jobStats>): void;
50
+ /**
51
+ * Get CPU usage percentage
52
+ */
53
+ private getCpuUsage;
54
+ /**
55
+ * Get CPU times for usage calculation
56
+ */
57
+ private getCpuTimes;
58
+ /**
59
+ * Get memory usage percentage
60
+ */
61
+ private getMemoryUsage;
62
+ /**
63
+ * Get disk usage percentage
64
+ */
65
+ private getDiskUsage;
66
+ /**
67
+ * Get disk usage on Unix-like systems
68
+ */
69
+ private getDiskUsageUnix;
70
+ /**
71
+ * Get disk usage on Windows
72
+ */
73
+ private getDiskUsageWindows;
74
+ /**
75
+ * Initialize network statistics
76
+ */
77
+ private initializeNetworkStats;
78
+ /**
79
+ * Get network statistics
80
+ */
81
+ private getNetworkStats;
82
+ /**
83
+ * Read network statistics from system
84
+ */
85
+ private readNetworkStats;
86
+ /**
87
+ * Read network stats on Linux
88
+ */
89
+ private readNetworkStatsLinux;
90
+ /**
91
+ * Read network stats on macOS
92
+ */
93
+ private readNetworkStatsMacOS;
94
+ /**
95
+ * Read network stats on Windows
96
+ */
97
+ private readNetworkStatsWindows;
98
+ /**
99
+ * Add metrics to history
100
+ */
101
+ private addToHistory;
102
+ }
103
+ //# sourceMappingURL=metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAUhD,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,cAAc,CAAO;IAC7B,OAAO,CAAC,gBAAgB,CAAyE;IACjG,OAAO,CAAC,QAAQ,CAKd;gBAEU,MAAM,EAAE,WAAW;IAI/B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAa5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAU3B;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,aAAa,CAAC;IAyBjD;;OAEG;IACH,iBAAiB,IAAI,aAAa,EAAE;IAIpC;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI;IAI1D;;OAEG;YACW,WAAW;IAwBzB;;OAEG;IACH,OAAO,CAAC,WAAW;IAenB;;OAEG;YACW,cAAc;IAc5B;;OAEG;YACW,YAAY;IAgB1B;;OAEG;YACW,gBAAgB;IAmB9B;;OAEG;YACW,mBAAmB;IAiCjC;;OAEG;YACW,sBAAsB;IAapC;;OAEG;YACW,eAAe;IAwC7B;;OAEG;YACW,gBAAgB;IAc9B;;OAEG;YACW,qBAAqB;IAwBnC;;OAEG;YACW,qBAAqB;IAwBnC;;OAEG;YACW,uBAAuB;IAwBrC;;OAEG;IACH,OAAO,CAAC,YAAY;CAQrB"}