Published unlisted
Edited
Aug 2, 2022
3 stars
Insert cell
Insert cell
Insert cell
Insert cell
errorSelection
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
result
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
run = (target, excludes, wait = 10) =>
viewof healthcheck.send({
wait,
target,
excludes: excludes.split(",").map((_) => _.trim())
})
Insert cell
Insert cell
viewof healthcheck = flowQueue({
timeout_ms: 55000
})
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
runner = {
console.log("Running", settings);
const start = Date.now();
return new Runtime().module(targetNotebook, (name) => {
return {
pending() {
viewof events.value = [
...viewof events.value,
{ status: "pending", ts: Date.now() - start, name: name }
];
viewof events.dispatchEvent(new Event("input", { bubbles: true }));
},
fulfilled(value) {
viewof events.value = [
...viewof events.value,
{
status: "fulfilled",
ts: Date.now() - start,
name: name,
value: value
}
];
viewof events.dispatchEvent(new Event("input", { bubbles: true }));
let sentrySDK = undefined;
if (value?.captureException) sentrySDK = value;
else if (value?.sentry?.captureException) sentrySDK = value.sentry;
else if (value?.value?.sentry?.captureException)
sentrySDK = value.value.sentry;

if (sentrySDK) {
viewof sentry.value = sentrySDK;
viewof sentry.dispatchEvent(new Event("input", { bubbles: true }));
}
},
rejected(error) {
const ignore = settings.excludes.includes(name);
debugger;
viewof events.value = [
...viewof events.value,
{
status: ignore ? "ignored" : "rejected",
ts: Date.now() - start,
name: name,
error: error
}
];
viewof events.dispatchEvent(new Event("input", { bubbles: true }));

if (!ignore) {
// Report error
viewof errors.value = [
...viewof errors.value,
{ error: error, cell: name }
];
viewof errors.dispatchEvent(new Event("input", { bubbles: true }));
}
}
};
});
}
Insert cell
responder = (runner, // No clear time to finish so we just send everytyhing aftger a timeout
setTimeout(() => {
const response = {
settings: viewof healthcheck.value,
errors: viewof errors.value,
events: viewof events.value
};
console.log("responding", response);
viewof healthcheck.resolve(response);
}, viewof healthcheck.value.wait * 1000))
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
reportMissingErrors = {
if (sentry) {
while (reportedErrors.length < errors.length) {
const nextError = errors[reportedErrors.length];
reportedErrors.push(nextError);
sentry.captureException(nextError.error);
}
}
}
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more