Avatar

@gaprl

2 likes1 public val
Joined February 5, 2024

Sentry Crons monitoring for scheduled functions in val.town

Use this val to monitor your schedule jobs for any issues and report them directly to Sentry Crons.

How to configure

  1. After forking, find the DSN for your Sentry project by going to Settings > Projects > Select your project >Settings > Client Keys (DSN).
  2. Add your DSN to as a SENTRY_DSN in your val.town environment variables.
  3. Change the monitorConfig.schedule.value Crontab expression to match your job run.
  4. Replace the run() function with your scheduled function.
  5. Alter any other monitor config properties to better fit your scheduled function. Learn more.

Benefits

This val will automatically create and set up a Cron monitor in Sentry, and report all of your runs as check-ins. If your job ever misses a run or fails, Sentry will notify you.

CleanShot 2024-02-05 at 13.56.32@2x.png

Any errors that occur in your scheduled function will be reported directly into Sentry:

CleanShot 2024-02-05 at 13.53.11@2x.png

Readme
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
import * as Sentry from "https://deno.land/x/sentry/index.mjs";
Sentry.init({
dsn: Deno.env.get("SENTRY_DSN"),
});
const monitorSlug = "sentry-val-town-example";
const monitorConfig = {
schedule: {
type: "crontab",
value: "15 * * * *",
},
checkinMargin: 2,
maxRuntime: 10,
timezone: "UTC",
};
// implement your cron job run here
const run = async (interval: Interval) => {
const delay = ms => new Promise(res => setTimeout(res, ms));
console.log(`Last run at ${interval.lastRunAt}`);
console.log("Starting 2s simulated job...");
await delay(2000);
console.log("Done");
// throw new Error("Any errors will be reported to Sentry");
};
export default async function(interval: Interval) {
try {
await Sentry.withMonitor(
monitorSlug,
() => run(interval),
monitorConfig,
);
} catch (err) {
Sentry.captureException(err);
throw err;
} finally {
await Sentry.flush(1000);
}
}
Next