@blaxel/core 0.2.4-dev.65 → 0.2.4-dev.66
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/dist/jobs/index.d.ts +2 -0
- package/dist/jobs/index.js +2 -0
- package/dist/jobs/jobs.d.ts +10 -8
- package/dist/jobs/jobs.js +80 -40
- package/dist/jobs/start.d.ts +1 -0
- package/dist/jobs/start.js +73 -0
- package/dist/jobs/types.d.ts +3 -0
- package/dist/jobs/types.js +2 -0
- package/package.json +1 -1
package/dist/jobs/index.d.ts
CHANGED
package/dist/jobs/index.js
CHANGED
|
@@ -15,3 +15,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./jobs.js"), exports);
|
|
18
|
+
__exportStar(require("./start.js"), exports);
|
|
19
|
+
__exportStar(require("./types.js"), exports);
|
package/dist/jobs/jobs.d.ts
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
declare class BlJob {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
get
|
|
7
|
-
get
|
|
8
|
-
|
|
2
|
+
jobName: string;
|
|
3
|
+
constructor(jobName: string);
|
|
4
|
+
get fallbackUrl(): import("url").URL | null;
|
|
5
|
+
get externalUrl(): import("url").URL;
|
|
6
|
+
get internalUrl(): import("url").URL;
|
|
7
|
+
get forcedUrl(): import("url").URL | null;
|
|
8
|
+
get url(): import("url").URL;
|
|
9
|
+
call(url: URL, tasks: Record<string, unknown>[]): Promise<Response>;
|
|
10
|
+
run(tasks: Record<string, unknown>[]): Promise<string>;
|
|
9
11
|
}
|
|
10
|
-
export declare const blJob: BlJob;
|
|
12
|
+
export declare const blJob: (jobName: string) => BlJob;
|
|
11
13
|
export {};
|
package/dist/jobs/jobs.js
CHANGED
|
@@ -2,54 +2,94 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.blJob = void 0;
|
|
4
4
|
const env_js_1 = require("../common/env.js");
|
|
5
|
+
const internal_js_1 = require("../common/internal.js");
|
|
6
|
+
const logger_js_1 = require("../common/logger.js");
|
|
7
|
+
const settings_js_1 = require("../common/settings.js");
|
|
8
|
+
const telemetry_js_1 = require("../telemetry/telemetry.js");
|
|
5
9
|
class BlJob {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
+
jobName;
|
|
11
|
+
constructor(jobName) {
|
|
12
|
+
this.jobName = jobName;
|
|
13
|
+
}
|
|
14
|
+
get fallbackUrl() {
|
|
15
|
+
if (this.externalUrl != this.url) {
|
|
16
|
+
return this.externalUrl;
|
|
10
17
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
result[key] = value;
|
|
25
|
-
i++;
|
|
26
|
-
}
|
|
27
|
-
else {
|
|
28
|
-
result[key] = 'true';
|
|
29
|
-
}
|
|
30
|
-
}
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
get externalUrl() {
|
|
21
|
+
return new URL(`${settings_js_1.settings.runUrl}/${settings_js_1.settings.workspace}/jobs/${this.jobName}`);
|
|
22
|
+
}
|
|
23
|
+
get internalUrl() {
|
|
24
|
+
const hash = (0, internal_js_1.getGlobalUniqueHash)(settings_js_1.settings.workspace, "job", this.jobName);
|
|
25
|
+
return new URL(`${settings_js_1.settings.runInternalProtocol}://bl-${settings_js_1.settings.env}-${hash}.${settings_js_1.settings.runInternalHostname}`);
|
|
26
|
+
}
|
|
27
|
+
get forcedUrl() {
|
|
28
|
+
const envVar = this.jobName.replace(/-/g, "_").toUpperCase();
|
|
29
|
+
if (env_js_1.env[`BL_JOB_${envVar}_URL`]) {
|
|
30
|
+
return new URL(env_js_1.env[`BL_JOB_${envVar}_URL`]);
|
|
31
31
|
}
|
|
32
|
-
return
|
|
32
|
+
return null;
|
|
33
33
|
}
|
|
34
|
-
get
|
|
35
|
-
|
|
34
|
+
get url() {
|
|
35
|
+
if (this.forcedUrl)
|
|
36
|
+
return this.forcedUrl;
|
|
37
|
+
if (settings_js_1.settings.runInternalHostname)
|
|
38
|
+
return this.internalUrl;
|
|
39
|
+
return this.externalUrl;
|
|
36
40
|
}
|
|
37
|
-
|
|
38
|
-
|
|
41
|
+
async call(url, tasks) {
|
|
42
|
+
let body = {
|
|
43
|
+
tasks: tasks
|
|
44
|
+
};
|
|
45
|
+
const response = await fetch(url + "/executions", {
|
|
46
|
+
method: "POST",
|
|
47
|
+
headers: {
|
|
48
|
+
...settings_js_1.settings.headers,
|
|
49
|
+
"Content-Type": "application/json",
|
|
50
|
+
},
|
|
51
|
+
body: JSON.stringify(body),
|
|
52
|
+
});
|
|
53
|
+
return response;
|
|
39
54
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
55
|
+
async run(tasks) {
|
|
56
|
+
logger_js_1.logger.debug(`Job Calling: ${this.jobName}`);
|
|
57
|
+
const span = (0, telemetry_js_1.startSpan)(this.jobName, {
|
|
58
|
+
attributes: {
|
|
59
|
+
"job.name": this.jobName,
|
|
60
|
+
"span.type": "job.run",
|
|
61
|
+
},
|
|
62
|
+
isRoot: false,
|
|
63
|
+
});
|
|
44
64
|
try {
|
|
45
|
-
const
|
|
46
|
-
await
|
|
47
|
-
|
|
65
|
+
const response = await this.call(this.url, tasks);
|
|
66
|
+
return await response.text();
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
if (err instanceof Error) {
|
|
70
|
+
if (!this.fallbackUrl) {
|
|
71
|
+
span.setAttribute("job.run.error", err.stack);
|
|
72
|
+
throw err;
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
const response = await this.call(this.fallbackUrl, tasks);
|
|
76
|
+
return await response.text();
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
if (err instanceof Error) {
|
|
80
|
+
span.setAttribute("job.run.error", err.stack);
|
|
81
|
+
}
|
|
82
|
+
throw err;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
throw err;
|
|
48
86
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
process.exit(1);
|
|
87
|
+
finally {
|
|
88
|
+
span.end();
|
|
52
89
|
}
|
|
53
90
|
}
|
|
54
91
|
}
|
|
55
|
-
|
|
92
|
+
const blJob = (jobName) => {
|
|
93
|
+
return new BlJob(jobName);
|
|
94
|
+
};
|
|
95
|
+
exports.blJob = blJob;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const blStartJob: (func: (args: any) => Promise<void>) => void;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.blStartJob = void 0;
|
|
4
|
+
const env_js_1 = require("../common/env.js");
|
|
5
|
+
const telemetry_js_1 = require("../telemetry/telemetry.js");
|
|
6
|
+
class BlJobWrapper {
|
|
7
|
+
async getArguments() {
|
|
8
|
+
if (!env_js_1.env.BL_EXECUTION_DATA_URL) {
|
|
9
|
+
const args = this.parseCommandLineArgs();
|
|
10
|
+
return args;
|
|
11
|
+
}
|
|
12
|
+
const response = await fetch(env_js_1.env.BL_EXECUTION_DATA_URL);
|
|
13
|
+
const data = await response.json();
|
|
14
|
+
return data.tasks[this.index] ?? {};
|
|
15
|
+
}
|
|
16
|
+
parseCommandLineArgs() {
|
|
17
|
+
const args = process.argv.slice(2);
|
|
18
|
+
const result = {};
|
|
19
|
+
for (let i = 0; i < args.length; i++) {
|
|
20
|
+
const arg = args[i];
|
|
21
|
+
if (arg.startsWith('--')) {
|
|
22
|
+
const key = arg.slice(2);
|
|
23
|
+
const value = args[i + 1];
|
|
24
|
+
if (value && !value.startsWith('--')) {
|
|
25
|
+
result[key] = value;
|
|
26
|
+
i++;
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
result[key] = 'true';
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return result;
|
|
34
|
+
}
|
|
35
|
+
get indexKey() {
|
|
36
|
+
return env_js_1.env.BL_TASK_KEY ?? "TASK_INDEX";
|
|
37
|
+
}
|
|
38
|
+
get index() {
|
|
39
|
+
return env_js_1.env[this.indexKey] ? Number(env_js_1.env[this.indexKey]) ?? 0 : 0;
|
|
40
|
+
}
|
|
41
|
+
/*
|
|
42
|
+
Run a job defined in a function, it's run in the current process
|
|
43
|
+
*/
|
|
44
|
+
async start(func) {
|
|
45
|
+
let span = (0, telemetry_js_1.startSpan)(`blStartJob-${func.name}`, {
|
|
46
|
+
attributes: {
|
|
47
|
+
'job.name': func.name,
|
|
48
|
+
'job.index': this.index,
|
|
49
|
+
'job.args': JSON.stringify(this.getArguments()),
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
try {
|
|
53
|
+
const parsedArgs = await this.getArguments();
|
|
54
|
+
await func(parsedArgs);
|
|
55
|
+
span.setStatus('ok');
|
|
56
|
+
process.exit(0);
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
span.recordException(error);
|
|
60
|
+
span.setStatus('error', 'Job execution failed');
|
|
61
|
+
console.error('Job execution failed:', error);
|
|
62
|
+
process.exit(1);
|
|
63
|
+
}
|
|
64
|
+
finally {
|
|
65
|
+
span.end();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
const blStartJob = (func) => {
|
|
70
|
+
const job = new BlJobWrapper();
|
|
71
|
+
job.start(func);
|
|
72
|
+
};
|
|
73
|
+
exports.blStartJob = blStartJob;
|