-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsequencer.ts
131 lines (122 loc) · 3.48 KB
/
sequencer.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
import { Handler, Context } from "aws-lambda";
import Sequencer from "./src/api/sequencer";
import { StepsData } from "./src/model/stepsData";
import Jobs from "./src/table/jobs";
import Steps from "./src/table/steps";
import { runStep } from "./src/api/step";
import { BackendPlugin } from "minanft";
import { getBackupPlugin } from "./src/api/plugin";
const step: Handler = async (event: any, context: Context) => {
if (event.stepData === undefined) {
console.error("no event.stepData", event);
return {
statusCode: 200,
body: "sequencer step error",
};
}
const step = event.stepData as StepsData;
console.log("step", step.name, step.jobId, step.stepId);
try {
const plugin: BackendPlugin = await getBackupPlugin({
developer: step.developer,
name: step.name,
task: step.task,
args: step.args,
});
await runStep(step, plugin);
return {
statusCode: 200,
body: "ok",
};
} catch (error) {
console.error("catch", (<any>error).toString());
const StepsTable = new Steps(process.env.STEPS_TABLE!);
await StepsTable.updateStatus({
jobId: step.jobId,
stepId: step.stepId,
status: "failed",
});
const JobsTable = new Jobs(process.env.JOBS_TABLE!);
await JobsTable.updateStatus({
username: step.username,
jobId: step.jobId,
status: "failed",
billedDuration: step.billedDuration ?? 0,
});
return {
statusCode: 200,
body: "sequencer step error",
};
}
};
const mint: Handler = async (event: any, context: Context) => {
if (event.stepData === undefined) {
console.error("no event.stepData", event);
return {
statusCode: 200,
body: "sequencer step error",
};
}
const step = event.stepData as StepsData;
console.log("step", step.name, step.jobId, step.stepId);
try {
const plugin: BackendPlugin = await getBackupPlugin({
developer: step.developer,
name: step.name,
task: step.task,
args: step.args,
});
await runStep(step, plugin);
return {
statusCode: 200,
body: "ok",
};
} catch (error) {
console.error("catch", (<any>error).toString());
const StepsTable = new Steps(process.env.STEPS_TABLE!);
await StepsTable.updateStatus({
jobId: step.jobId,
stepId: step.stepId,
status: "failed",
});
const JobsTable = new Jobs(process.env.JOBS_TABLE!);
await JobsTable.updateStatus({
username: step.username,
jobId: step.jobId,
status: "failed",
billedDuration: step.billedDuration ?? 0,
});
return {
statusCode: 200,
body: "sequencer step error",
};
}
};
const run: Handler = async (event: any, context: Context) => {
try {
console.log("run", event);
if (event.username && event.jobId) {
const sequencer = new Sequencer({
jobsTable: process.env.JOBS_TABLE!,
stepsTable: process.env.STEPS_TABLE!,
proofsTable: process.env.PROOFS_TABLE!,
username: event.username,
jobId: event.jobId,
});
if (event.task === "start") await sequencer.startJob();
else if (event.task === "run") await sequencer.run();
else console.error("unknown task");
} else console.error("no event.username or event.jobId");
return {
statusCode: 200,
body: "ok",
};
} catch (error) {
console.error("catch", (<any>error).toString());
return {
statusCode: 200,
body: "sequencer run error",
};
}
};
export { run, step };