Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Latest commit

 

History

History
History
109 lines (88 loc) · 3.18 KB

File metadata and controls

109 lines (88 loc) · 3.18 KB
Copy raw file
Download raw file
Outline
Edit and raw actions
title Usage
description Get compute duration and cost from inside a run, or for a specific block of code.

Getting the run cost and duration

You can get the cost and duration of the current including retries of the same run.

export const heavyTask = task({
  id: "heavy-task",
  machine: {
    preset: "medium-2x",
  },
  run: async (payload, { ctx }) => {
    // Do some compute
    const result = await convertVideo(payload.videoUrl);

    // Get the current cost and duration up until this line of code
    // This includes the compute time of the previous lines
    let currentUsage = usage.getCurrent();
    /* currentUsage = {
        compute: {
          attempt: {
            costInCents: 0.01700,
            durationMs: 1000,
          },
          total: {
            costInCents: 0.0255,
            durationMs: 1500,
          },
        },
        baseCostInCents: 0.0025,
        totalCostInCents: 0.028,
      } 
      */

    // In the cloud product we do not count waits towards the compute cost or duration.
    // We also don't include time between attempts or before the run starts executing your code.
    // So this line does not affect the cost or duration.
    await wait.for({ seconds: 5 });

    // This will give the same result as before the wait.
    currentUsage = usage.getCurrent();

    // Do more compute
    const result = await convertVideo(payload.videoUrl);

    // This would give a different value
    currentUsage = usage.getCurrent();
  },
});
In Trigger.dev cloud we do not include time between attempts, before your code executes, or waits towards the compute cost or duration.

Getting the run cost and duration from your backend

You can use runs.retrieve() to get a single run or runs.list() to get a list of runs. The response will include costInCents baseCostInCents and durationMs fields.

import { runs } from "@trigger.dev/sdk/v3";

const run = await runs.retrieve("run-id");
console.log(run.costInCents, run.baseCostInCents, run.durationMs);
const totalCost = run.costInCents + run.baseCostInCents;
import { runs } from "@trigger.dev/sdk/v3";

let totalCost = 0;
for await (const run of runs.list({ tag: "user_123456" })) {
  totalCost += run.costInCents + run.baseCostInCents;
  console.log(run.costInCents, run.baseCostInCents, run.durationMs);
}

console.log("Total cost", totalCost);

Getting the cost and duration of a block of code

You can also wrap code with usage.measure to get the cost and duration of that block of code:

// Inside a task run function, or inside a function that's called from there.
const { result, compute } = await usage.measure(async () => {
  //...Do something for 1 second
  return {
    foo: "bar",
  };
});

logger.info("Result", { result, compute });
/* result = {
    foo: "bar"
  }
  compute = {
    costInCents: 0.01700,
    durationMs: 1000,
  }
*/

This will work from inside the run function, our lifecycle hooks (like onStart, onFailure, onSuccess, etc.), or any function you're calling from the run function. It won't work for code that's not executed using Trigger.dev.

Morty Proxy This is a proxified and sanitized view of the page, visit original site.