Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: added example of using oneOf to nodejs template #235

Merged
merged 3 commits into from
Aug 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 54 additions & 23 deletions data/project-templates/js-node-esm/src/index.js
Original file line number Diff line number Diff line change
@@ -1,56 +1,87 @@
import "dotenv/config";
import { GolemNetwork } from "@golem-sdk/golem-js";

const order = {
demand: {
workload: { imageTag: "golem/alpine:latest" },
},
market: {
// 15 minutes
rentHours: 15 / 60,
pricing: {
model: "linear",
maxStartPrice: 0.5,
maxCpuPerHourPrice: 1.0,
maxEnvPerHourPrice: 0.5,
},
},
};

(async () => {
// Initialize a new GolemNetwork instance,
// you can also pass additional options here like logger or api key
const glm = new GolemNetwork();

try {
// Connect to the Golem network using the Yagna node
await glm.connect();
// create a pool that can grow up to 3 rentals at the same time

// Define the specifications for a market order
const order = {
demand: {
// Specify workload options such as image tag from golem registry
// or other criteria for rented machines
workload: { imageTag: "golem/alpine:latest" },
},
market: {
// Specify the rental time (15 minutes)
rentHours: 15 / 60,
pricing: {
// Pricing model set to linear
model: "linear",
// Set the maximum starting price
maxStartPrice: 0.5,
// Set the maximum price per CPU per hour
maxCpuPerHourPrice: 1.0,
// Set the maximum price per environment per hour
maxEnvPerHourPrice: 0.5,
},
},
};

// Create a pool that can handle up to 3 rentals simultaneously
const pool = await glm.manyOf({
poolSize: 3,
order,
});

console.log("Starting work on Golem!");

console.log("Running three different commands on a pool of three rented machines");

// Execute three tasks concurrently, each on a different rented machine in the pool
await Promise.allSettled([
pool.withRental(async (rental) =>
rental
.getExeUnit()
.then((exe) => exe.run("echo Hello, Golem from the first machine! 👋"))
.then((res) => console.log(res.stdout)),
.then((exe) => exe.run(`echo Hello Golem from provider ${exe.provider.name} 😻`))
.then((res) => console.log(res.stdout))
.catch((err) => console.error(`Something went wrong:`, err)),
),
pool.withRental(async (rental) =>
rental
.getExeUnit()
.then((exe) => exe.run("echo Hello, Golem from the second machine! 👋"))
.then((res) => console.log(res.stdout)),
.then((exe) => exe.run(`echo Hello Golem from provider ${exe.provider.name} 🤠`))
.then((res) => console.log(res.stdout))
.catch((err) => console.error(`Something went wrong:`, err)),
),
pool.withRental(async (rental) =>
rental
.getExeUnit()
.then((exe) => exe.run("echo Hello, Golem from the third machine! 👋"))
.then((res) => console.log(res.stdout)),
.then((exe) => exe.run(`echo Hello Golem from provider ${exe.provider.name} 👻`))
.then((res) => console.log(res.stdout))
.catch((err) => console.error(`Something went wrong:`, err)),
),
]);

console.log("Running a command on a single rented machine");

// Acquire a single rental, execute a command, and log the output or an error
const singleRental = await glm.oneOf({ order });
await singleRental
.getExeUnit()
.then((exe) => exe.run(`echo Hello Golem from provider ${exe.provider.name} 👽`))
.then((res) => console.log(res.stdout))
.catch((err) => console.error(`Something went wrong:`, err));
} catch (err) {
console.error("Something went wrong:", err);
} finally {
// Disconnect from the Golem Network.
// This will clear the rental pools and finalize and pay all rentals that were created within the Golem Network
await glm.disconnect();
}
})().catch(console.error);
77 changes: 54 additions & 23 deletions data/project-templates/js-node/src/index.js
Original file line number Diff line number Diff line change
@@ -1,56 +1,87 @@
require("dotenv").config();
const { GolemNetwork } = require("@golem-sdk/golem-js");

const order = {
demand: {
workload: { imageTag: "golem/alpine:latest" },
},
market: {
// 15 minutes
rentHours: 15 / 60,
pricing: {
model: "linear",
maxStartPrice: 0.5,
maxCpuPerHourPrice: 1.0,
maxEnvPerHourPrice: 0.5,
},
},
};

(async () => {
// Initialize a new GolemNetwork instance,
// you can also pass additional options here like logger or api key
const glm = new GolemNetwork();

try {
// Connect to the Golem network using the Yagna node
await glm.connect();
// create a pool that can grow up to 3 rentals at the same time

// Define the specifications for a market order
const order = {
demand: {
// Specify workload options such as image tag from golem registry
// or other criteria for rented machines
workload: { imageTag: "golem/alpine:latest" },
},
market: {
// Specify the rental time (15 minutes)
rentHours: 15 / 60,
pricing: {
// Pricing model set to linear
model: "linear",
// Set the maximum starting price
maxStartPrice: 0.5,
// Set the maximum price per CPU per hour
maxCpuPerHourPrice: 1.0,
// Set the maximum price per environment per hour
maxEnvPerHourPrice: 0.5,
},
},
};

// Create a pool that can handle up to 3 rentals simultaneously
const pool = await glm.manyOf({
poolSize: 3,
order,
});

console.log("Starting work on Golem!");

console.log("Running three different commands on a pool of three rented machines");

// Execute three tasks concurrently, each on a different rented machine in the pool
await Promise.allSettled([
pool.withRental(async (rental) =>
rental
.getExeUnit()
.then((exe) => exe.run("echo Hello, Golem from the first machine! 👋"))
.then((res) => console.log(res.stdout)),
.then((exe) => exe.run(`echo Hello Golem from provider ${exe.provider.name} 😻`))
.then((res) => console.log(res.stdout))
.catch((err) => console.error(`Something went wrong:`, err)),
),
pool.withRental(async (rental) =>
rental
.getExeUnit()
.then((exe) => exe.run("echo Hello, Golem from the second machine! 👋"))
.then((res) => console.log(res.stdout)),
.then((exe) => exe.run(`echo Hello Golem from provider ${exe.provider.name} 🤠`))
.then((res) => console.log(res.stdout))
.catch((err) => console.error(`Something went wrong:`, err)),
),
pool.withRental(async (rental) =>
rental
.getExeUnit()
.then((exe) => exe.run("echo Hello, Golem from the third machine! 👋"))
.then((res) => console.log(res.stdout)),
.then((exe) => exe.run(`echo Hello Golem from provider ${exe.provider.name} 👻`))
.then((res) => console.log(res.stdout))
.catch((err) => console.error(`Something went wrong:`, err)),
),
]);

console.log("Running a command on a single rented machine");

// Acquire a single rental, execute a command, and log the output or an error
const singleRental = await glm.oneOf({ order });
await singleRental
.getExeUnit()
.then((exe) => exe.run(`echo Hello Golem from provider ${exe.provider.name} 👽`))
.then((res) => console.log(res.stdout))
.catch((err) => console.error(`Something went wrong:`, err));
} catch (err) {
console.error("Something went wrong:", err);
} finally {
// Disconnect from the Golem Network.
// This will clear the rental pools and finalize and pay all rentals that were created within the Golem Network
await glm.disconnect();
}
})().catch(console.error);
77 changes: 54 additions & 23 deletions data/project-templates/ts-node-esm/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,56 +1,87 @@
import "dotenv/config";
import { GolemNetwork, MarketOrderSpec } from "@golem-sdk/golem-js";

const order: MarketOrderSpec = {
demand: {
workload: { imageTag: "golem/alpine:latest" },
},
market: {
// 15 minutes
rentHours: 15 / 60,
pricing: {
model: "linear",
maxStartPrice: 0.5,
maxCpuPerHourPrice: 1.0,
maxEnvPerHourPrice: 0.5,
},
},
};

(async () => {
// Initialize a new GolemNetwork instance,
// you can also pass additional options here like logger or api key
const glm = new GolemNetwork();

try {
// Connect to the Golem network using the Yagna node
await glm.connect();
// create a pool that can grow up to 3 rentals at the same time

// Define the specifications for a market order
const order: MarketOrderSpec = {
demand: {
// Specify workload options such as image tag from golem registry
// or other criteria for rented machines
workload: { imageTag: "golem/alpine:latest" },
},
market: {
// Specify the rental time (15 minutes)
rentHours: 15 / 60,
pricing: {
// Pricing model set to linear
model: "linear",
// Set the maximum starting price
maxStartPrice: 0.5,
// Set the maximum price per CPU per hour
maxCpuPerHourPrice: 1.0,
// Set the maximum price per environment per hour
maxEnvPerHourPrice: 0.5,
},
},
};

// Create a pool that can handle up to 3 rentals simultaneously
const pool = await glm.manyOf({
poolSize: 3,
order,
});

console.log("Starting work on Golem!");

console.log("Running three different commands on a pool of three rented machines");

// Execute three tasks concurrently, each on a different rented machine in the pool
await Promise.allSettled([
pool.withRental(async (rental) =>
rental
.getExeUnit()
.then((exe) => exe.run("echo Hello, Golem from the first machine! 👋"))
.then((res) => console.log(res.stdout)),
.then((exe) => exe.run(`echo Hello Golem from provider ${exe.provider.name} 😻`))
.then((res) => console.log(res.stdout))
.catch((err) => console.error(`Something went wrong:`, err)),
),
pool.withRental(async (rental) =>
rental
.getExeUnit()
.then((exe) => exe.run("echo Hello, Golem from the second machine! 👋"))
.then((res) => console.log(res.stdout)),
.then((exe) => exe.run(`echo Hello Golem from provider ${exe.provider.name} 🤠`))
.then((res) => console.log(res.stdout))
.catch((err) => console.error(`Something went wrong:`, err)),
),
pool.withRental(async (rental) =>
rental
.getExeUnit()
.then((exe) => exe.run("echo Hello, Golem from the third machine! 👋"))
.then((res) => console.log(res.stdout)),
.then((exe) => exe.run(`echo Hello Golem from provider ${exe.provider.name} 👻`))
.then((res) => console.log(res.stdout))
.catch((err) => console.error(`Something went wrong:`, err)),
),
]);

console.log("Running a command on a single rented machine");

// Acquire a single rental, execute a command, and log the output or an error
const singleRental = await glm.oneOf({ order });
await singleRental
.getExeUnit()
.then((exe) => exe.run(`echo Hello Golem from provider ${exe.provider.name} 👽`))
.then((res) => console.log(res.stdout))
.catch((err) => console.error(`Something went wrong:`, err));
} catch (err) {
console.error("Something went wrong:", err);
} finally {
// Disconnect from the Golem Network.
// This will clear the rental pools and finalize and pay all rentals that were created within the Golem Network
await glm.disconnect();
}
})().catch(console.error);
Loading
Loading