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.
- package/README.md +166 -0
- package/dist/__tests__/fakes/FakeDockerManager.d.ts +115 -0
- package/dist/__tests__/fakes/FakeDockerManager.d.ts.map +1 -0
- package/dist/__tests__/fakes/FakeDockerManager.js +203 -0
- package/dist/__tests__/fakes/FakeDockerManager.js.map +1 -0
- package/dist/acceptanceChecker.d.ts +26 -0
- package/dist/acceptanceChecker.d.ts.map +1 -0
- package/dist/acceptanceChecker.js +64 -0
- package/dist/acceptanceChecker.js.map +1 -0
- package/dist/advancedAgent.d.ts +161 -0
- package/dist/advancedAgent.d.ts.map +1 -0
- package/dist/advancedAgent.js +604 -0
- package/dist/advancedAgent.js.map +1 -0
- package/dist/agent.d.ts +101 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +490 -0
- package/dist/agent.js.map +1 -0
- package/dist/api/jobStatusApi.d.ts +88 -0
- package/dist/api/jobStatusApi.d.ts.map +1 -0
- package/dist/api/jobStatusApi.js +240 -0
- package/dist/api/jobStatusApi.js.map +1 -0
- package/dist/autoUpdater.d.ts +135 -0
- package/dist/autoUpdater.d.ts.map +1 -0
- package/dist/autoUpdater.js +494 -0
- package/dist/autoUpdater.js.map +1 -0
- package/dist/cacheManager.d.ts +108 -0
- package/dist/cacheManager.d.ts.map +1 -0
- package/dist/cacheManager.js +300 -0
- package/dist/cacheManager.js.map +1 -0
- package/dist/cli.d.ts +11 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +749 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/index.d.ts +30 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +35 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +45 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +269 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/types.d.ts +193 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +90 -0
- package/dist/config/types.js.map +1 -0
- package/dist/config/validation.d.ts +28 -0
- package/dist/config/validation.d.ts.map +1 -0
- package/dist/config/validation.js +397 -0
- package/dist/config/validation.js.map +1 -0
- package/dist/docker.d.ts +96 -0
- package/dist/docker.d.ts.map +1 -0
- package/dist/docker.js +411 -0
- package/dist/docker.js.map +1 -0
- package/dist/enhancedJobExecutor.d.ts +81 -0
- package/dist/enhancedJobExecutor.d.ts.map +1 -0
- package/dist/enhancedJobExecutor.js +223 -0
- package/dist/enhancedJobExecutor.js.map +1 -0
- package/dist/executors/executorFactory.d.ts +46 -0
- package/dist/executors/executorFactory.d.ts.map +1 -0
- package/dist/executors/executorFactory.js +80 -0
- package/dist/executors/executorFactory.js.map +1 -0
- package/dist/executors/index.d.ts +7 -0
- package/dist/executors/index.d.ts.map +1 -0
- package/dist/executors/index.js +6 -0
- package/dist/executors/index.js.map +1 -0
- package/dist/executors/nativeExecutor.d.ts +60 -0
- package/dist/executors/nativeExecutor.d.ts.map +1 -0
- package/dist/executors/nativeExecutor.js +311 -0
- package/dist/executors/nativeExecutor.js.map +1 -0
- package/dist/executors/types.d.ts +38 -0
- package/dist/executors/types.d.ts.map +1 -0
- package/dist/executors/types.js +9 -0
- package/dist/executors/types.js.map +1 -0
- package/dist/healthMonitor.d.ts +213 -0
- package/dist/healthMonitor.d.ts.map +1 -0
- package/dist/healthMonitor.js +547 -0
- package/dist/healthMonitor.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/jobExecutor.d.ts +117 -0
- package/dist/jobExecutor.d.ts.map +1 -0
- package/dist/jobExecutor.js +458 -0
- package/dist/jobExecutor.js.map +1 -0
- package/dist/lifecycleExecutor.d.ts +54 -0
- package/dist/lifecycleExecutor.d.ts.map +1 -0
- package/dist/lifecycleExecutor.js +230 -0
- package/dist/lifecycleExecutor.js.map +1 -0
- package/dist/main.d.ts +15 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +77 -0
- package/dist/main.js.map +1 -0
- package/dist/metrics.d.ts +103 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +360 -0
- package/dist/metrics.js.map +1 -0
- package/dist/recipes/builtinRecipes.d.ts +11 -0
- package/dist/recipes/builtinRecipes.d.ts.map +1 -0
- package/dist/recipes/builtinRecipes.js +688 -0
- package/dist/recipes/builtinRecipes.js.map +1 -0
- package/dist/recipes/index.d.ts +18 -0
- package/dist/recipes/index.d.ts.map +1 -0
- package/dist/recipes/index.js +17 -0
- package/dist/recipes/index.js.map +1 -0
- package/dist/recipes/recipeRegistry.d.ts +49 -0
- package/dist/recipes/recipeRegistry.d.ts.map +1 -0
- package/dist/recipes/recipeRegistry.js +264 -0
- package/dist/recipes/recipeRegistry.js.map +1 -0
- package/dist/recipes/types.d.ts +116 -0
- package/dist/recipes/types.d.ts.map +1 -0
- package/dist/recipes/types.js +10 -0
- package/dist/recipes/types.js.map +1 -0
- package/dist/recovery.d.ts +133 -0
- package/dist/recovery.d.ts.map +1 -0
- package/dist/recovery.js +299 -0
- package/dist/recovery.js.map +1 -0
- package/dist/registration/apiClient.d.ts +44 -0
- package/dist/registration/apiClient.d.ts.map +1 -0
- package/dist/registration/apiClient.js +149 -0
- package/dist/registration/apiClient.js.map +1 -0
- package/dist/registration/index.d.ts +41 -0
- package/dist/registration/index.d.ts.map +1 -0
- package/dist/registration/index.js +141 -0
- package/dist/registration/index.js.map +1 -0
- package/dist/registration/machineId.d.ts +30 -0
- package/dist/registration/machineId.d.ts.map +1 -0
- package/dist/registration/machineId.js +89 -0
- package/dist/registration/machineId.js.map +1 -0
- package/dist/registration/types.d.ts +32 -0
- package/dist/registration/types.d.ts.map +1 -0
- package/dist/registration/types.js +9 -0
- package/dist/registration/types.js.map +1 -0
- package/dist/resourceGovernor.d.ts +57 -0
- package/dist/resourceGovernor.d.ts.map +1 -0
- package/dist/resourceGovernor.js +125 -0
- package/dist/resourceGovernor.js.map +1 -0
- package/dist/security/secretManager.d.ts +107 -0
- package/dist/security/secretManager.d.ts.map +1 -0
- package/dist/security/secretManager.js +361 -0
- package/dist/security/secretManager.js.map +1 -0
- package/dist/security.d.ts +134 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +470 -0
- package/dist/security.js.map +1 -0
- package/dist/storage/artifactUploader.d.ts +155 -0
- package/dist/storage/artifactUploader.d.ts.map +1 -0
- package/dist/storage/artifactUploader.js +554 -0
- package/dist/storage/artifactUploader.js.map +1 -0
- package/dist/types.d.ts +49 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/capabilities.d.ts +23 -0
- package/dist/utils/capabilities.d.ts.map +1 -0
- package/dist/utils/capabilities.js +200 -0
- package/dist/utils/capabilities.js.map +1 -0
- package/dist/utils/logger.d.ts +20 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +188 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/sdkScanner.d.ts +105 -0
- package/dist/utils/sdkScanner.d.ts.map +1 -0
- package/dist/utils/sdkScanner.js +459 -0
- package/dist/utils/sdkScanner.js.map +1 -0
- package/dist/websocketClient.d.ts +154 -0
- package/dist/websocketClient.d.ts.map +1 -0
- package/dist/websocketClient.js +422 -0
- package/dist/websocketClient.js.map +1 -0
- 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
|
package/dist/main.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
|
@@ -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"}
|