Example
JS Task API Examples: working with events
Introduction
This example will show you available event types and how to subscribe the certain types of events and extract their details.
Prerequisites
Yagna service is installed and running with the try_golem app-key configured.
How to run examples
Create a project folder, initialize a Node.js project, and install libraries.
mkdir golem-example
cd golem-example
npm init
npm i @golem-sdk/task-executorCopy the code into the index.mjs file in the project folder and run:
node index.mjsWorking with events
You can use events to react to specific actions. The following example shows how to subscribe to different types of events and extract their details.
In the Task Executor context, you can have two types of events:
golemEventsthat are common for all libraries usinggolem-jsand- Task Executor specific events like:
taskStartedortaskCompleted.
import { TaskExecutor } from "@golem-sdk/task-executor";
import { pinoPrettyLogger } from "@golem-sdk/pino-logger";
(async function main() {
const executor = await TaskExecutor.create({
logger: pinoPrettyLogger(),
api: { key: "try_golem" },
demand: {
workload: {
imageTag: "golem/alpine:latest",
},
},
market: {
rentHours: 0.5,
pricing: {
model: "linear",
maxStartPrice: 0.5,
maxCpuPerHourPrice: 1.0,
maxEnvPerHourPrice: 0.5,
},
},
task: {
taskTimeout: 20 * 60 * 1000, // 20 MIN
},
});
// Golem-js core events
executor.glm.market.events.on("agreementApproved", (event) => {
console.log("Agreement approved:", event);
});
executor.glm.payment.events.on("invoiceReceived", (event) => {
console.log("Invoice received:", event);
});
executor.glm.activity.events.on("activityCreated", (event) => {
console.log("Activity created:", event);
});
// TaskExecutor specific events
executor.events.on("taskStarted", (event) => {
console.log("Task started:", event);
});
executor.events.on("taskCompleted", (event) => {
console.log("Task completed:", event);
});
executor.events.on("executorEnd", (event) => {
console.log("All tasks finished:", event);
});
console.log("Executor is created");
try {
await executor.run(async (exe) => {
console.log("Will run the command");
console.log((await exe.run("ls -l")).stdout);
});
console.log("Finished");
} catch (err) {
console.error("This error broke the computations", err);
} finally {
console.log("Will shutdown the executor.");
await executor.shutdown();
}
})();