@danieljvdm/dev-kit 1.0.2 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -6
- package/package.json +1 -1
- package/skill-sources.jsonc +2 -33
- package/skill-sources.lock.json +15 -117
- package/skills/animate/LICENSE +21 -0
- package/skills/animate/NOTICE +10 -0
- package/skills/animate/SKILL.md +34 -0
- package/skills/animate/references/gestures.md +27 -0
- package/skills/animate/references/glossary.md +136 -0
- package/skills/animate/references/implementation.md +22 -0
- package/skills/animate/references/opportunities.md +18 -0
- package/skills/animate/references/principles.md +48 -0
- package/skills/animate/references/review.md +19 -0
- package/skills/cloudflare-workers/LICENSE +202 -0
- package/skills/cloudflare-workers/NOTICE +9 -0
- package/skills/cloudflare-workers/SKILL.md +26 -0
- package/skills/cloudflare-workers/references/durable-objects.md +68 -0
- package/skills/cloudflare-workers/references/sandbox.md +48 -0
- package/skills/cloudflare-workers/references/workers.md +63 -0
- package/skills/cloudflare-workers/references/wrangler.md +56 -0
- package/skills/design-ui/LICENSE +21 -0
- package/skills/design-ui/NOTICE +8 -0
- package/skills/design-ui/SKILL.md +29 -0
- package/skills/design-ui/references/appearance.md +22 -0
- package/skills/design-ui/references/components.md +33 -0
- package/skills/design-ui/references/exploration.md +50 -0
- package/skills/design-ui/references/libraries.md +39 -0
- package/skills/design-ui/references/themes.md +23 -0
- package/skills/dev-kit/SKILL.md +19 -38
- package/skills/dev-kit/references/cloudflare-worker-api.md +1 -1
- package/skills/dev-kit/references/skills.md +2 -2
- package/skills/effect-development/SKILL.md +27 -0
- package/skills/effect-development/agents/openai.yaml +4 -0
- package/skills/effect-development/references/api/index.md +32 -0
- package/skills/effect-development/references/api/schema-codecs.md +15 -0
- package/skills/{build-effect-apis/references → effect-development/references/api}/verification.md +10 -5
- package/skills/{effect-architecture-audit/SKILL.md → effect-development/references/architecture/index.md} +1 -6
- package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-client.md +8 -6
- package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-testing.md +7 -2
- package/skills/effect-development/references/atom/index.md +40 -0
- package/skills/{build-effect-clis/references → effect-development/references/cli}/entrypoints-and-testing.md +6 -2
- package/skills/effect-development/references/cli/index.md +39 -0
- package/skills/effect-development/references/setup.md +15 -0
- package/skills/open-pull-request/SKILL.md +10 -70
- package/skills/open-pull-request/references/evidence.md +22 -0
- package/skills/open-pull-request/references/explanation.md +21 -0
- package/skills/open-pull-request/references/publication.md +21 -0
- package/skills/sentry/LICENSE +202 -0
- package/skills/sentry/LICENSE-UPSTREAM +21 -0
- package/skills/sentry/NOTICE +14 -0
- package/skills/sentry/SKILL.md +33 -0
- package/skills/sentry/references/alert-payloads.md +105 -0
- package/skills/sentry/references/alerts.md +17 -0
- package/skills/sentry/references/artifacts.md +25 -0
- package/skills/sentry/references/auth-token.md +65 -0
- package/skills/sentry/references/concepts/ai-monitoring.md +131 -0
- package/skills/sentry/references/concepts/choosing-a-signal.md +78 -0
- package/skills/sentry/references/concepts/crons.md +50 -0
- package/skills/sentry/references/concepts/data-scrubbing.md +43 -0
- package/skills/sentry/references/concepts/errors.md +40 -0
- package/skills/sentry/references/concepts/logging.md +85 -0
- package/skills/sentry/references/concepts/metrics.md +49 -0
- package/skills/sentry/references/concepts/monitors.md +78 -0
- package/skills/sentry/references/concepts/profiling.md +38 -0
- package/skills/sentry/references/concepts/reduce-volume.md +49 -0
- package/skills/sentry/references/concepts/releases.md +43 -0
- package/skills/sentry/references/concepts/session-replay.md +35 -0
- package/skills/sentry/references/concepts/tracing.md +54 -0
- package/skills/sentry/references/concepts/user-feedback.md +36 -0
- package/skills/sentry/references/debug-artifacts/android.md +68 -0
- package/skills/sentry/references/debug-artifacts/apple.md +96 -0
- package/skills/sentry/references/debug-artifacts/dotnet.md +70 -0
- package/skills/sentry/references/debug-artifacts/flutter.md +65 -0
- package/skills/sentry/references/debug-artifacts/index.md +75 -0
- package/skills/sentry/references/debug-artifacts/javascript.md +94 -0
- package/skills/sentry/references/debug-artifacts/matching.md +73 -0
- package/skills/sentry/references/debug-artifacts/react-native.md +75 -0
- package/skills/sentry/references/first-error-setup.md +25 -0
- package/skills/sentry/references/instrumentation.md +30 -0
- package/skills/sentry/references/issues.md +32 -0
- package/skills/sentry/references/new-project.md +17 -0
- package/skills/sentry/references/otel-exporter.md +30 -0
- package/skills/sentry/references/release-workflow.md +31 -0
- package/skills/sentry/references/releases/ci-pipeline.md +214 -0
- package/skills/sentry/references/releases/index.md +93 -0
- package/skills/sentry/references/releases/suspect-commits.md +155 -0
- package/skills/sentry/references/releases/tagging.md +131 -0
- package/skills/sentry/references/releases/troubleshooting.md +67 -0
- package/skills/sentry/references/sdks/android/crons.md +305 -0
- package/skills/sentry/references/sdks/android/error-monitoring.md +800 -0
- package/skills/sentry/references/sdks/android/index.md +748 -0
- package/skills/sentry/references/sdks/android/integrations.md +48 -0
- package/skills/sentry/references/sdks/android/logging.md +374 -0
- package/skills/sentry/references/sdks/android/metrics.md +288 -0
- package/skills/sentry/references/sdks/android/profiling.md +397 -0
- package/skills/sentry/references/sdks/android/session-replay.md +406 -0
- package/skills/sentry/references/sdks/android/tracing.md +861 -0
- package/skills/sentry/references/sdks/browser/error-monitoring.md +861 -0
- package/skills/sentry/references/sdks/browser/index.md +714 -0
- package/skills/sentry/references/sdks/browser/logging.md +315 -0
- package/skills/sentry/references/sdks/browser/profiling.md +236 -0
- package/skills/sentry/references/sdks/browser/session-replay.md +586 -0
- package/skills/sentry/references/sdks/browser/tracing.md +561 -0
- package/skills/sentry/references/sdks/browser/user-feedback.md +354 -0
- package/skills/sentry/references/sdks/cloudflare/ai-monitoring.md +661 -0
- package/skills/sentry/references/sdks/cloudflare/crons.md +231 -0
- package/skills/sentry/references/sdks/cloudflare/durable-objects.md +381 -0
- package/skills/sentry/references/sdks/cloudflare/error-monitoring.md +329 -0
- package/skills/sentry/references/sdks/cloudflare/index.md +698 -0
- package/skills/sentry/references/sdks/cloudflare/logging.md +169 -0
- package/skills/sentry/references/sdks/cloudflare/nodejs-compat.md +134 -0
- package/skills/sentry/references/sdks/cloudflare/tracing.md +475 -0
- package/skills/sentry/references/sdks/cocoa/error-monitoring.md +394 -0
- package/skills/sentry/references/sdks/cocoa/index.md +497 -0
- package/skills/sentry/references/sdks/cocoa/logging.md +209 -0
- package/skills/sentry/references/sdks/cocoa/metrics.md +136 -0
- package/skills/sentry/references/sdks/cocoa/profiling.md +223 -0
- package/skills/sentry/references/sdks/cocoa/session-replay.md +257 -0
- package/skills/sentry/references/sdks/cocoa/tracing.md +524 -0
- package/skills/sentry/references/sdks/cocoa/user-feedback.md +310 -0
- package/skills/sentry/references/sdks/dotnet/crons.md +465 -0
- package/skills/sentry/references/sdks/dotnet/error-monitoring.md +1100 -0
- package/skills/sentry/references/sdks/dotnet/index.md +614 -0
- package/skills/sentry/references/sdks/dotnet/logging.md +556 -0
- package/skills/sentry/references/sdks/dotnet/metrics.md +229 -0
- package/skills/sentry/references/sdks/dotnet/profiling.md +296 -0
- package/skills/sentry/references/sdks/dotnet/tracing.md +897 -0
- package/skills/sentry/references/sdks/elixir/crons.md +371 -0
- package/skills/sentry/references/sdks/elixir/error-monitoring.md +335 -0
- package/skills/sentry/references/sdks/elixir/index.md +383 -0
- package/skills/sentry/references/sdks/elixir/logging.md +239 -0
- package/skills/sentry/references/sdks/elixir/tracing.md +233 -0
- package/skills/sentry/references/sdks/flutter/ecosystem-integrations.md +70 -0
- package/skills/sentry/references/sdks/flutter/error-monitoring.md +312 -0
- package/skills/sentry/references/sdks/flutter/index.md +728 -0
- package/skills/sentry/references/sdks/flutter/logging.md +387 -0
- package/skills/sentry/references/sdks/flutter/metrics.md +310 -0
- package/skills/sentry/references/sdks/flutter/profiling.md +214 -0
- package/skills/sentry/references/sdks/flutter/session-replay.md +308 -0
- package/skills/sentry/references/sdks/flutter/tracing.md +502 -0
- package/skills/sentry/references/sdks/go/crons.md +270 -0
- package/skills/sentry/references/sdks/go/error-monitoring.md +361 -0
- package/skills/sentry/references/sdks/go/index.md +324 -0
- package/skills/sentry/references/sdks/go/logging.md +354 -0
- package/skills/sentry/references/sdks/go/metrics.md +273 -0
- package/skills/sentry/references/sdks/go/profiling.md +46 -0
- package/skills/sentry/references/sdks/go/tracing.md +366 -0
- package/skills/sentry/references/sdks/index.md +41 -0
- package/skills/sentry/references/sdks/nestjs/ai-monitoring.md +410 -0
- package/skills/sentry/references/sdks/nestjs/crons.md +268 -0
- package/skills/sentry/references/sdks/nestjs/error-monitoring.md +729 -0
- package/skills/sentry/references/sdks/nestjs/index.md +699 -0
- package/skills/sentry/references/sdks/nestjs/logging.md +174 -0
- package/skills/sentry/references/sdks/nestjs/metrics.md +243 -0
- package/skills/sentry/references/sdks/nestjs/profiling.md +127 -0
- package/skills/sentry/references/sdks/nestjs/tracing.md +762 -0
- package/skills/sentry/references/sdks/nextjs/ai-monitoring.md +494 -0
- package/skills/sentry/references/sdks/nextjs/crons.md +383 -0
- package/skills/sentry/references/sdks/nextjs/error-monitoring.md +974 -0
- package/skills/sentry/references/sdks/nextjs/index.md +491 -0
- package/skills/sentry/references/sdks/nextjs/logging.md +381 -0
- package/skills/sentry/references/sdks/nextjs/metrics.md +411 -0
- package/skills/sentry/references/sdks/nextjs/profiling.md +403 -0
- package/skills/sentry/references/sdks/nextjs/session-replay.md +462 -0
- package/skills/sentry/references/sdks/nextjs/tracing.md +628 -0
- package/skills/sentry/references/sdks/node/ai-monitoring.md +303 -0
- package/skills/sentry/references/sdks/node/crons.md +432 -0
- package/skills/sentry/references/sdks/node/error-monitoring.md +1125 -0
- package/skills/sentry/references/sdks/node/index.md +942 -0
- package/skills/sentry/references/sdks/node/logging.md +380 -0
- package/skills/sentry/references/sdks/node/metrics.md +278 -0
- package/skills/sentry/references/sdks/node/profiling.md +373 -0
- package/skills/sentry/references/sdks/node/tracing.md +878 -0
- package/skills/sentry/references/sdks/php/ai-monitoring.md +310 -0
- package/skills/sentry/references/sdks/php/crons.md +265 -0
- package/skills/sentry/references/sdks/php/error-monitoring.md +626 -0
- package/skills/sentry/references/sdks/php/index.md +362 -0
- package/skills/sentry/references/sdks/php/laravel.md +542 -0
- package/skills/sentry/references/sdks/php/logging.md +242 -0
- package/skills/sentry/references/sdks/php/metrics.md +193 -0
- package/skills/sentry/references/sdks/php/profiling.md +115 -0
- package/skills/sentry/references/sdks/php/symfony.md +552 -0
- package/skills/sentry/references/sdks/php/tracing.md +516 -0
- package/skills/sentry/references/sdks/python/ai-monitoring.md +351 -0
- package/skills/sentry/references/sdks/python/crons.md +218 -0
- package/skills/sentry/references/sdks/python/error-monitoring.md +292 -0
- package/skills/sentry/references/sdks/python/index.md +361 -0
- package/skills/sentry/references/sdks/python/logging.md +234 -0
- package/skills/sentry/references/sdks/python/metrics.md +154 -0
- package/skills/sentry/references/sdks/python/profiling.md +120 -0
- package/skills/sentry/references/sdks/python/tracing.md +364 -0
- package/skills/sentry/references/sdks/react/error-monitoring.md +1607 -0
- package/skills/sentry/references/sdks/react/index.md +492 -0
- package/skills/sentry/references/sdks/react/logging.md +364 -0
- package/skills/sentry/references/sdks/react/profiling.md +322 -0
- package/skills/sentry/references/sdks/react/react-features.md +1272 -0
- package/skills/sentry/references/sdks/react/session-replay.md +1193 -0
- package/skills/sentry/references/sdks/react/tracing.md +1415 -0
- package/skills/sentry/references/sdks/react-native/error-monitoring.md +1481 -0
- package/skills/sentry/references/sdks/react-native/expo-config-plugin.md +45 -0
- package/skills/sentry/references/sdks/react-native/index.md +1030 -0
- package/skills/sentry/references/sdks/react-native/logging.md +444 -0
- package/skills/sentry/references/sdks/react-native/profiling.md +386 -0
- package/skills/sentry/references/sdks/react-native/session-replay.md +704 -0
- package/skills/sentry/references/sdks/react-native/tracing.md +1086 -0
- package/skills/sentry/references/sdks/react-native/user-feedback.md +815 -0
- package/skills/sentry/references/sdks/react-router-framework/error-monitoring.md +127 -0
- package/skills/sentry/references/sdks/react-router-framework/index.md +411 -0
- package/skills/sentry/references/sdks/react-router-framework/logging.md +66 -0
- package/skills/sentry/references/sdks/react-router-framework/profiling.md +57 -0
- package/skills/sentry/references/sdks/react-router-framework/react-router-framework-features.md +110 -0
- package/skills/sentry/references/sdks/react-router-framework/session-replay.md +67 -0
- package/skills/sentry/references/sdks/react-router-framework/tracing.md +96 -0
- package/skills/sentry/references/sdks/react-router-framework/user-feedback.md +71 -0
- package/skills/sentry/references/sdks/ruby/crons.md +184 -0
- package/skills/sentry/references/sdks/ruby/error-monitoring.md +248 -0
- package/skills/sentry/references/sdks/ruby/index.md +297 -0
- package/skills/sentry/references/sdks/ruby/logging.md +168 -0
- package/skills/sentry/references/sdks/ruby/metrics.md +196 -0
- package/skills/sentry/references/sdks/ruby/migration.md +321 -0
- package/skills/sentry/references/sdks/ruby/profiling.md +107 -0
- package/skills/sentry/references/sdks/ruby/tracing.md +388 -0
- package/skills/sentry/references/sdks/svelte/error-monitoring.md +456 -0
- package/skills/sentry/references/sdks/svelte/index.md +467 -0
- package/skills/sentry/references/sdks/svelte/logging.md +344 -0
- package/skills/sentry/references/sdks/svelte/session-replay.md +369 -0
- package/skills/sentry/references/sdks/svelte/tracing.md +406 -0
- package/skills/sentry/references/sdks/tanstack-start/error-monitoring.md +149 -0
- package/skills/sentry/references/sdks/tanstack-start/index.md +381 -0
- package/skills/sentry/references/sdks/tanstack-start/logging.md +74 -0
- package/skills/sentry/references/sdks/tanstack-start/session-replay.md +76 -0
- package/skills/sentry/references/sdks/tanstack-start/tanstackstart-features.md +128 -0
- package/skills/sentry/references/sdks/tanstack-start/tracing.md +123 -0
- package/skills/sentry/references/sdks/tanstack-start/user-feedback.md +81 -0
- package/skills/sentry/references/search-query-language.md +226 -0
- package/skills/sentry/references/semantics/angular.md +7 -0
- package/skills/sentry/references/semantics/app.md +28 -0
- package/skills/sentry/references/semantics/art.md +17 -0
- package/skills/sentry/references/semantics/aws.md +43 -0
- package/skills/sentry/references/semantics/browser.md +34 -0
- package/skills/sentry/references/semantics/cache.md +12 -0
- package/skills/sentry/references/semantics/client.md +8 -0
- package/skills/sentry/references/semantics/cloud.md +12 -0
- package/skills/sentry/references/semantics/cloudflare.md +23 -0
- package/skills/sentry/references/semantics/code.md +11 -0
- package/skills/sentry/references/semantics/culture.md +11 -0
- package/skills/sentry/references/semantics/db.md +21 -0
- package/skills/sentry/references/semantics/device.md +43 -0
- package/skills/sentry/references/semantics/error.md +7 -0
- package/skills/sentry/references/semantics/event.md +8 -0
- package/skills/sentry/references/semantics/exception.md +10 -0
- package/skills/sentry/references/semantics/faas.md +19 -0
- package/skills/sentry/references/semantics/file.md +8 -0
- package/skills/sentry/references/semantics/flag.md +7 -0
- package/skills/sentry/references/semantics/gcp.md +16 -0
- package/skills/sentry/references/semantics/gen_ai.md +53 -0
- package/skills/sentry/references/semantics/general.md +11 -0
- package/skills/sentry/references/semantics/graphql.md +9 -0
- package/skills/sentry/references/semantics/grpc.md +19 -0
- package/skills/sentry/references/semantics/http.md +34 -0
- package/skills/sentry/references/semantics/index.md +63 -0
- package/skills/sentry/references/semantics/jsonrpc.md +8 -0
- package/skills/sentry/references/semantics/jvm.md +12 -0
- package/skills/sentry/references/semantics/koa.md +7 -0
- package/skills/sentry/references/semantics/logger.md +7 -0
- package/skills/sentry/references/semantics/mcp.md +37 -0
- package/skills/sentry/references/semantics/mdc.md +7 -0
- package/skills/sentry/references/semantics/messaging.md +23 -0
- package/skills/sentry/references/semantics/middleware.md +7 -0
- package/skills/sentry/references/semantics/navigation.md +9 -0
- package/skills/sentry/references/semantics/nel.md +11 -0
- package/skills/sentry/references/semantics/network.md +17 -0
- package/skills/sentry/references/semantics/os.md +15 -0
- package/skills/sentry/references/semantics/otel.md +10 -0
- package/skills/sentry/references/semantics/params.md +7 -0
- package/skills/sentry/references/semantics/process.md +14 -0
- package/skills/sentry/references/semantics/react.md +7 -0
- package/skills/sentry/references/semantics/remix.md +7 -0
- package/skills/sentry/references/semantics/resource.md +7 -0
- package/skills/sentry/references/semantics/rpc.md +10 -0
- package/skills/sentry/references/semantics/score.md +10 -0
- package/skills/sentry/references/semantics/sentry.md +69 -0
- package/skills/sentry/references/semantics/server.md +8 -0
- package/skills/sentry/references/semantics/service.md +8 -0
- package/skills/sentry/references/semantics/session.md +7 -0
- package/skills/sentry/references/semantics/state.md +7 -0
- package/skills/sentry/references/semantics/thread.md +8 -0
- package/skills/sentry/references/semantics/timber.md +7 -0
- package/skills/sentry/references/semantics/trpc.md +8 -0
- package/skills/sentry/references/semantics/ui.md +18 -0
- package/skills/sentry/references/semantics/url.md +15 -0
- package/skills/sentry/references/semantics/user.md +17 -0
- package/skills/sentry/references/semantics/user_agent.md +7 -0
- package/skills/sentry/references/semantics/vercel.md +42 -0
- package/skills/sentry/references/setup-verification.md +39 -0
- package/skills/sentry/references/snapshots/github-actions-fanout.md +206 -0
- package/skills/sentry/references/snapshots/github-actions-simple.md +102 -0
- package/skills/sentry/references/snapshots/github-actions-swift-snapshot-testing.md +118 -0
- package/skills/sentry/references/snapshots/index.md +19 -0
- package/skills/sentry/references/snapshots/snapshot-previews.md +100 -0
- package/skills/sentry/references/snapshots/snapshots.md +123 -0
- package/skills/sentry/references/snapshots/wizard-setup.md +134 -0
- package/skills/testing/LICENSE +21 -0
- package/skills/testing/NOTICE +7 -0
- package/skills/testing/SKILL.md +13 -19
- package/skills/testing/agents/openai.yaml +1 -2
- package/skills/testing/references/selection.md +23 -0
- package/skills/testing/references/tdd.md +19 -0
- package/skills/testing/references/test-design.md +17 -0
- package/src/catalog.ts +1 -7
- package/skills/build-effect-apis/SKILL.md +0 -81
- package/skills/build-effect-apis/agents/openai.yaml +0 -4
- package/skills/build-effect-clis/SKILL.md +0 -92
- package/skills/build-effect-clis/agents/openai.yaml +0 -4
- package/skills/effect-architecture-audit/agents/openai.yaml +0 -4
- package/skills/effect-atom-state/SKILL.md +0 -97
- package/skills/effect-atom-state/agents/openai.yaml +0 -4
- package/skills/effect-ts/SKILL.md +0 -35
- package/skills/effect-ts/agents/openai.yaml +0 -4
- /package/skills/{build-effect-apis/references → effect-development/references/api}/cloudflare-workers.md +0 -0
- /package/skills/{build-effect-apis/references → effect-development/references/api}/runtime-assembly.md +0 -0
- /package/skills/{build-effect-apis/references → effect-development/references/api}/server-and-middleware.md +0 -0
- /package/skills/{build-effect-apis/references → effect-development/references/api}/shared-contracts.md +0 -0
- /package/skills/{effect-architecture-audit/references → effect-development/references/architecture}/service-and-boundary-audit.md +0 -0
- /package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-lifecycle.md +0 -0
- /package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-workflows.md +0 -0
- /package/skills/{effect-atom-state/references → effect-development/references/atom}/tanstack-start.md +0 -0
- /package/skills/{build-effect-clis/references → effect-development/references/cli}/command-design.md +0 -0
- /package/skills/{build-effect-clis/references → effect-development/references/cli}/processes-and-platform.md +0 -0
|
@@ -0,0 +1,432 @@
|
|
|
1
|
+
# Crons / Job Monitoring — Sentry Node.js SDK
|
|
2
|
+
|
|
3
|
+
> Minimum SDK: `@sentry/node` ≥7.51.1 (`captureCheckIn`, `withMonitor`)\
|
|
4
|
+
> `instrumentNodeCron` / `instrumentCron`: ≥7.92.0\
|
|
5
|
+
> `instrumentNodeSchedule`: ≥7.93.0\
|
|
6
|
+
> `failureIssueThreshold` / `recoveryThreshold`: ≥8.7.0\
|
|
7
|
+
> `isolateTrace` in `MonitorConfig`: ≥10.28.0\
|
|
8
|
+
> Status: ✅ **Generally Available**
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Overview
|
|
13
|
+
|
|
14
|
+
Sentry Crons (job monitoring) tracks whether scheduled tasks run on time, succeed, and
|
|
15
|
+
complete within expected durations.
|
|
16
|
+
Sentry will alert when a job:
|
|
17
|
+
|
|
18
|
+
- Misses its scheduled start time (checkin margin exceeded)
|
|
19
|
+
- Takes too long to complete (maxRuntime exceeded)
|
|
20
|
+
- Fails (status `"error"`)
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Core API
|
|
25
|
+
|
|
26
|
+
### `Sentry.captureCheckIn(checkIn, monitorConfig?)` → `string`
|
|
27
|
+
|
|
28
|
+
```typescript
|
|
29
|
+
// Three check-in shapes:
|
|
30
|
+
|
|
31
|
+
// 1. Heartbeat — single-shot, no duration tracking
|
|
32
|
+
Sentry.captureCheckIn({ monitorSlug: "my-job", status: "ok" });
|
|
33
|
+
Sentry.captureCheckIn({ monitorSlug: "my-job", status: "error" });
|
|
34
|
+
|
|
35
|
+
// 2. In-progress — signals job started, returns ID for completion
|
|
36
|
+
const checkInId = Sentry.captureCheckIn({
|
|
37
|
+
monitorSlug: "my-job",
|
|
38
|
+
status: "in_progress",
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
// 3. Finished — completes an in-progress check-in
|
|
42
|
+
Sentry.captureCheckIn({
|
|
43
|
+
checkInId,
|
|
44
|
+
monitorSlug: "my-job",
|
|
45
|
+
status: "ok", // or "error"
|
|
46
|
+
duration: 12.3, // optional, in seconds
|
|
47
|
+
});
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### `Sentry.withMonitor(slug, callback, monitorConfig?)` → `T`
|
|
51
|
+
|
|
52
|
+
Wraps a sync or async function.
|
|
53
|
+
Automatically sends `in_progress`, then `ok` on success or `error` on throw.
|
|
54
|
+
Records duration automatically.
|
|
55
|
+
|
|
56
|
+
```typescript
|
|
57
|
+
// Simple form
|
|
58
|
+
await Sentry.withMonitor("my-job", async () => {
|
|
59
|
+
await runJob();
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
// With monitor config
|
|
63
|
+
await Sentry.withMonitor(
|
|
64
|
+
"my-job",
|
|
65
|
+
async () => {
|
|
66
|
+
await runJob();
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
schedule: { type: "crontab", value: "0 * * * *" },
|
|
70
|
+
checkinMargin: 5,
|
|
71
|
+
maxRuntime: 30,
|
|
72
|
+
timezone: "America/New_York",
|
|
73
|
+
},
|
|
74
|
+
);
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## Check-In Status Values
|
|
80
|
+
|
|
81
|
+
| Status | Meaning |
|
|
82
|
+
| --------------- | ---------------------------------------------- |
|
|
83
|
+
| `"in_progress"` | Job has started; Sentry waiting for completion |
|
|
84
|
+
| `"ok"` | Job completed successfully |
|
|
85
|
+
| `"error"` | Job failed; triggers incident in Sentry |
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## Usage Patterns
|
|
90
|
+
|
|
91
|
+
### Heartbeat (simplest — detect missed runs only)
|
|
92
|
+
|
|
93
|
+
```typescript
|
|
94
|
+
try {
|
|
95
|
+
await runMyJob();
|
|
96
|
+
Sentry.captureCheckIn({ monitorSlug: "my-cron-job", status: "ok" });
|
|
97
|
+
} catch (err) {
|
|
98
|
+
Sentry.captureCheckIn({ monitorSlug: "my-cron-job", status: "error" });
|
|
99
|
+
throw err;
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Start/Finish (tracks in-progress state and duration)
|
|
104
|
+
|
|
105
|
+
```typescript
|
|
106
|
+
const checkInId = Sentry.captureCheckIn({
|
|
107
|
+
monitorSlug: "my-cron-job",
|
|
108
|
+
status: "in_progress",
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
const startTime = Date.now();
|
|
112
|
+
|
|
113
|
+
try {
|
|
114
|
+
await runMyJob();
|
|
115
|
+
Sentry.captureCheckIn({
|
|
116
|
+
checkInId,
|
|
117
|
+
monitorSlug: "my-cron-job",
|
|
118
|
+
status: "ok",
|
|
119
|
+
duration: (Date.now() - startTime) / 1000, // seconds
|
|
120
|
+
});
|
|
121
|
+
} catch (err) {
|
|
122
|
+
Sentry.captureCheckIn({
|
|
123
|
+
checkInId,
|
|
124
|
+
monitorSlug: "my-cron-job",
|
|
125
|
+
status: "error",
|
|
126
|
+
duration: (Date.now() - startTime) / 1000,
|
|
127
|
+
});
|
|
128
|
+
throw err;
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### `withMonitor` (recommended — handles all status logic)
|
|
133
|
+
|
|
134
|
+
```typescript
|
|
135
|
+
await Sentry.withMonitor("my-cron-job", async () => {
|
|
136
|
+
await runMyJob();
|
|
137
|
+
});
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Monitor Configuration (Upsert)
|
|
143
|
+
|
|
144
|
+
Pass a `MonitorConfig` to create or update the monitor from code — no manual setup in
|
|
145
|
+
Sentry UI needed. On first check-in the monitor is created; subsequent calls update it.
|
|
146
|
+
|
|
147
|
+
```typescript
|
|
148
|
+
interface MonitorConfig {
|
|
149
|
+
schedule: CrontabSchedule | IntervalSchedule; // REQUIRED
|
|
150
|
+
checkinMargin?: number; // minutes: grace period before "missed" alert
|
|
151
|
+
maxRuntime?: number; // minutes: max execution before timeout alert
|
|
152
|
+
timezone?: string; // IANA timezone, e.g. "America/New_York"
|
|
153
|
+
failureIssueThreshold?: number; // consecutive failures before creating issue (≥8.7.0)
|
|
154
|
+
recoveryThreshold?: number; // consecutive OKs before resolving issue (≥8.7.0)
|
|
155
|
+
isolateTrace?: boolean; // new trace per monitor run (≥10.28.0)
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Pass as the **second argument** to `captureCheckIn()` or **third argument** to
|
|
160
|
+
`withMonitor()`.
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## Schedule Types
|
|
165
|
+
|
|
166
|
+
**Crontab schedule:**
|
|
167
|
+
|
|
168
|
+
```typescript
|
|
169
|
+
{ type: "crontab", value: "* * * * *" } // every minute
|
|
170
|
+
{ type: "crontab", value: "0 * * * *" } // every hour
|
|
171
|
+
{ type: "crontab", value: "0 4 * * *" } // daily at 4:00am
|
|
172
|
+
{ type: "crontab", value: "0 9 * * MON-FRI" } // weekdays at 9am
|
|
173
|
+
{ type: "crontab", value: "0 0 1 * *" } // first of every month
|
|
174
|
+
{ type: "crontab", value: "*/15 * * * *" } // every 15 minutes
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
**Interval schedule:**
|
|
178
|
+
|
|
179
|
+
```typescript
|
|
180
|
+
{ type: "interval", value: 1, unit: "hour" }
|
|
181
|
+
{ type: "interval", value: 30, unit: "minute" }
|
|
182
|
+
{ type: "interval", value: 7, unit: "day" }
|
|
183
|
+
{ type: "interval", value: 1, unit: "week" }
|
|
184
|
+
// unit: "year" | "month" | "week" | "day" | "hour" | "minute"
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## Full Upsert Example
|
|
190
|
+
|
|
191
|
+
```typescript
|
|
192
|
+
const monitorConfig: Sentry.MonitorConfig = {
|
|
193
|
+
schedule: {
|
|
194
|
+
type: "crontab",
|
|
195
|
+
value: "0 4 * * *", // daily at 4am
|
|
196
|
+
},
|
|
197
|
+
checkinMargin: 5, // alert if not started within 5 min
|
|
198
|
+
maxRuntime: 30, // alert if running > 30 min
|
|
199
|
+
timezone: "America/New_York",
|
|
200
|
+
failureIssueThreshold: 3, // create issue after 3 consecutive failures
|
|
201
|
+
recoveryThreshold: 2, // resolve issue after 2 consecutive successes
|
|
202
|
+
isolateTrace: true, // SDK ≥10.28.0
|
|
203
|
+
};
|
|
204
|
+
|
|
205
|
+
await Sentry.withMonitor("daily-report-job", generateDailyReport, monitorConfig);
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## Scheduler Library Integrations
|
|
211
|
+
|
|
212
|
+
### `node-cron` (SDK ≥7.92.0)
|
|
213
|
+
|
|
214
|
+
```typescript
|
|
215
|
+
import cron from "node-cron";
|
|
216
|
+
import * as Sentry from "@sentry/node";
|
|
217
|
+
|
|
218
|
+
const cronWithCheckIn = Sentry.cron.instrumentNodeCron(cron);
|
|
219
|
+
|
|
220
|
+
// `name` option is REQUIRED — becomes the monitor slug
|
|
221
|
+
cronWithCheckIn.schedule(
|
|
222
|
+
"* * * * *",
|
|
223
|
+
() => {
|
|
224
|
+
/* task */
|
|
225
|
+
},
|
|
226
|
+
{ name: "my-cron-job" },
|
|
227
|
+
);
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
### `cron` package — `CronJob` (SDK ≥7.92.0)
|
|
231
|
+
|
|
232
|
+
```typescript
|
|
233
|
+
import { CronJob } from "cron";
|
|
234
|
+
import * as Sentry from "@sentry/node";
|
|
235
|
+
|
|
236
|
+
// Monitor slug is bound at instrumentation time
|
|
237
|
+
const CronJobWithCheckIn = Sentry.cron.instrumentCron(CronJob, "my-cron-job");
|
|
238
|
+
|
|
239
|
+
// Constructor form
|
|
240
|
+
const job = new CronJobWithCheckIn("* * * * *", () => {
|
|
241
|
+
/* task */
|
|
242
|
+
});
|
|
243
|
+
|
|
244
|
+
// Static factory form
|
|
245
|
+
const job2 = CronJobWithCheckIn.from({
|
|
246
|
+
cronTime: "* * * * *",
|
|
247
|
+
onTick: () => {
|
|
248
|
+
/* task */
|
|
249
|
+
},
|
|
250
|
+
});
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
### `node-schedule` (SDK ≥7.93.0)
|
|
254
|
+
|
|
255
|
+
```typescript
|
|
256
|
+
import * as schedule from "node-schedule";
|
|
257
|
+
import * as Sentry from "@sentry/node";
|
|
258
|
+
|
|
259
|
+
const scheduleWithCheckIn = Sentry.cron.instrumentNodeSchedule(schedule);
|
|
260
|
+
|
|
261
|
+
// First argument must be the job name (monitor slug)
|
|
262
|
+
scheduleWithCheckIn.scheduleJob(
|
|
263
|
+
"my-cron-job", // monitor slug — REQUIRED as first arg
|
|
264
|
+
"* * * * *", // cron expression
|
|
265
|
+
() => {
|
|
266
|
+
/* task */
|
|
267
|
+
},
|
|
268
|
+
);
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
### Agenda (no official helper — use `withMonitor`)
|
|
272
|
+
|
|
273
|
+
```typescript
|
|
274
|
+
import Agenda from "agenda";
|
|
275
|
+
import * as Sentry from "@sentry/node";
|
|
276
|
+
|
|
277
|
+
const agenda = new Agenda({ db: { address: "mongodb://localhost/agenda" } });
|
|
278
|
+
|
|
279
|
+
agenda.define("send-newsletter", async (job) => {
|
|
280
|
+
await Sentry.withMonitor(
|
|
281
|
+
"send-newsletter",
|
|
282
|
+
async () => {
|
|
283
|
+
await sendNewsletterEmails();
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
schedule: { type: "crontab", value: "0 8 * * MON" },
|
|
287
|
+
maxRuntime: 60,
|
|
288
|
+
timezone: "UTC",
|
|
289
|
+
},
|
|
290
|
+
);
|
|
291
|
+
});
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
### Bull / BullMQ (no official helper — use `withMonitor`)
|
|
295
|
+
|
|
296
|
+
```typescript
|
|
297
|
+
import { Worker } from "bullmq";
|
|
298
|
+
import * as Sentry from "@sentry/node";
|
|
299
|
+
|
|
300
|
+
const worker = new Worker("report-queue", async (job) => {
|
|
301
|
+
await Sentry.withMonitor(
|
|
302
|
+
"report-queue-processor",
|
|
303
|
+
async () => {
|
|
304
|
+
await processReportJob(job.data);
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
schedule: { type: "interval", value: 5, unit: "minute" },
|
|
308
|
+
maxRuntime: 10,
|
|
309
|
+
checkinMargin: 2,
|
|
310
|
+
},
|
|
311
|
+
);
|
|
312
|
+
});
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
---
|
|
316
|
+
|
|
317
|
+
## Library Integration Signatures
|
|
318
|
+
|
|
319
|
+
```typescript
|
|
320
|
+
// node-cron
|
|
321
|
+
function instrumentNodeCron<T>(
|
|
322
|
+
lib: Partial<NodeCron> & T,
|
|
323
|
+
monitorConfig?: Pick<MonitorConfig, "isolateTrace">,
|
|
324
|
+
): T;
|
|
325
|
+
|
|
326
|
+
// cron package
|
|
327
|
+
function instrumentCron<T>(
|
|
328
|
+
lib: T & CronJobConstructor,
|
|
329
|
+
monitorSlug: string, // REQUIRED — single slug for all jobs from this constructor
|
|
330
|
+
): T;
|
|
331
|
+
|
|
332
|
+
// node-schedule
|
|
333
|
+
function instrumentNodeSchedule<T>(lib: T & NodeSchedule): T;
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
---
|
|
337
|
+
|
|
338
|
+
## Serverless / Lambda
|
|
339
|
+
|
|
340
|
+
Check-ins are lost if the process terminates before flush.
|
|
341
|
+
Always flush explicitly:
|
|
342
|
+
|
|
343
|
+
```typescript
|
|
344
|
+
export const handler = async (event: any) => {
|
|
345
|
+
const checkInId = Sentry.captureCheckIn({
|
|
346
|
+
monitorSlug: "lambda-scheduled-job",
|
|
347
|
+
status: "in_progress",
|
|
348
|
+
});
|
|
349
|
+
|
|
350
|
+
try {
|
|
351
|
+
await doWork(event);
|
|
352
|
+
Sentry.captureCheckIn({
|
|
353
|
+
checkInId,
|
|
354
|
+
monitorSlug: "lambda-scheduled-job",
|
|
355
|
+
status: "ok",
|
|
356
|
+
});
|
|
357
|
+
} catch (err) {
|
|
358
|
+
Sentry.captureCheckIn({
|
|
359
|
+
checkInId,
|
|
360
|
+
monitorSlug: "lambda-scheduled-job",
|
|
361
|
+
status: "error",
|
|
362
|
+
});
|
|
363
|
+
throw err;
|
|
364
|
+
} finally {
|
|
365
|
+
// CRITICAL — flush before Lambda container freezes
|
|
366
|
+
await Sentry.flush(2000);
|
|
367
|
+
}
|
|
368
|
+
};
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
For AWS Lambda, prefer `@sentry/aws-serverless` — it handles flushing automatically.
|
|
372
|
+
|
|
373
|
+
---
|
|
374
|
+
|
|
375
|
+
## Deno: Native Cron Integration
|
|
376
|
+
|
|
377
|
+
Deno provides a built-in `Deno.cron()` API. Use `denoCronIntegration` to automatically
|
|
378
|
+
monitor all native Deno crons:
|
|
379
|
+
|
|
380
|
+
```typescript
|
|
381
|
+
import * as Sentry from "@sentry/deno";
|
|
382
|
+
|
|
383
|
+
Sentry.init({
|
|
384
|
+
dsn: Deno.env.get("SENTRY_DSN"),
|
|
385
|
+
integrations: [Sentry.denoCronIntegration()],
|
|
386
|
+
});
|
|
387
|
+
|
|
388
|
+
// Automatically monitored — no manual check-ins needed
|
|
389
|
+
Deno.cron("daily-cleanup", "0 0 * * *", async () => {
|
|
390
|
+
await cleanupOldRecords();
|
|
391
|
+
});
|
|
392
|
+
|
|
393
|
+
Deno.cron("hourly-sync", "0 * * * *", async () => {
|
|
394
|
+
await syncExternalData();
|
|
395
|
+
});
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
The integration intercepts `Deno.cron()` calls and wraps them with automatic
|
|
399
|
+
`in_progress` → `ok`/`error` check-ins.
|
|
400
|
+
The monitor slug is the first argument to `Deno.cron()`.
|
|
401
|
+
|
|
402
|
+
> **Deno Deploy:** `Deno.cron()` runs natively on Deno Deploy.
|
|
403
|
+
> The integration works in both local Deno and Deno Deploy environments.
|
|
404
|
+
|
|
405
|
+
> **Node.js and Bun:** `denoCronIntegration` is only available in `@sentry/deno`. For
|
|
406
|
+
> Node.js, use the `node-cron`, `cron`, or `node-schedule` library helpers above.
|
|
407
|
+
|
|
408
|
+
---
|
|
409
|
+
|
|
410
|
+
## Rate Limits
|
|
411
|
+
|
|
412
|
+
- Maximum **6 check-ins per minute** per monitor + environment combination
|
|
413
|
+
- Each environment (production, staging, etc.)
|
|
414
|
+
counts separately
|
|
415
|
+
- Dropped check-ins appear in Sentry’s Usage Stats page
|
|
416
|
+
|
|
417
|
+
---
|
|
418
|
+
|
|
419
|
+
## Troubleshooting
|
|
420
|
+
|
|
421
|
+
| Problem | Likely Cause | Fix |
|
|
422
|
+
| ------------------------------------- | ---------------------------------- | ---------------------------------------------------------------- |
|
|
423
|
+
| Monitor not created in Sentry | No `MonitorConfig` passed | Pass `schedule` in `monitorConfig` (upsert) |
|
|
424
|
+
| Check-ins not arriving | Process exits before flush | Add `await Sentry.flush(2000)` before exit |
|
|
425
|
+
| `withMonitor` status wrong | Callback doesn’t throw on failure | Ensure your job throws on error |
|
|
426
|
+
| `node-cron` job not tracked | Missing `name` option | Add `{ name: "slug" }` to `cron.schedule()` options |
|
|
427
|
+
| `instrumentNodeSchedule` slug not set | First arg is cron expression | First arg to `scheduleJob()` must be the job name |
|
|
428
|
+
| `instrumentCron` tracking wrong job | Multiple jobs from one constructor | Each constructor call is for one slug; create multiple if needed |
|
|
429
|
+
| Duration always `undefined` | Using heartbeat pattern | Switch to start/finish or `withMonitor` for duration tracking |
|
|
430
|
+
| Missing `failureIssueThreshold` | SDK < 8.7.0 | Upgrade to ≥8.7.0 |
|
|
431
|
+
| `isolateTrace` not recognized | SDK < 10.28.0 | Upgrade to ≥10.28.0 |
|
|
432
|
+
| Rate limit errors in logs | > 6 check-ins/min per monitor | Reduce check-in frequency or consolidate environments |
|