@danieljvdm/dev-kit 1.0.1 → 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 +6 -29
- package/skill-sources.lock.json +23 -109
- 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 +11 -115
- package/skills/open-pull-request/agents/openai.yaml +3 -3
- 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,465 @@
|
|
|
1
|
+
# Crons — Sentry .NET SDK
|
|
2
|
+
|
|
3
|
+
> Minimum SDK: `Sentry` ≥ 4.2.0
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
Sentry Cron Monitoring detects:
|
|
10
|
+
|
|
11
|
+
- **Missed check-ins** — job didn’t run at the expected time
|
|
12
|
+
- **Runtime failures** — job ran but encountered an error
|
|
13
|
+
- **Timeouts** — job exceeded `MaxRuntime` without completing
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## `CaptureCheckIn()` API
|
|
18
|
+
|
|
19
|
+
```csharp
|
|
20
|
+
// Signature
|
|
21
|
+
SentryId CaptureCheckIn(
|
|
22
|
+
string monitorSlug,
|
|
23
|
+
CheckInStatus status,
|
|
24
|
+
SentryId? sentryId = null,
|
|
25
|
+
TimeSpan? duration = null,
|
|
26
|
+
Scope? scope = null,
|
|
27
|
+
Action<SentryMonitorOptions>? configureMonitorOptions = null
|
|
28
|
+
)
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### Check-In Status Values
|
|
32
|
+
|
|
33
|
+
| Status | When to use |
|
|
34
|
+
| -------------------------- | --------------------------------- |
|
|
35
|
+
| `CheckInStatus.InProgress` | Job has started, work is underway |
|
|
36
|
+
| `CheckInStatus.Ok` | Job completed successfully |
|
|
37
|
+
| `CheckInStatus.Error` | Job failed — an error occurred |
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Pattern A: Two-Signal Check-Ins (Recommended)
|
|
42
|
+
|
|
43
|
+
Sends two signals: `InProgress` at start and `Ok`/`Error` at end.\
|
|
44
|
+
Enables detection of both **missed jobs** and **timeout violations**.
|
|
45
|
+
|
|
46
|
+
```csharp
|
|
47
|
+
// Mark job as started — save the checkInId for correlation
|
|
48
|
+
var checkInId = SentrySdk.CaptureCheckIn("my-monitor-slug", CheckInStatus.InProgress);
|
|
49
|
+
|
|
50
|
+
try
|
|
51
|
+
{
|
|
52
|
+
DoWork();
|
|
53
|
+
|
|
54
|
+
// Mark as successful
|
|
55
|
+
SentrySdk.CaptureCheckIn("my-monitor-slug", CheckInStatus.Ok, checkInId);
|
|
56
|
+
}
|
|
57
|
+
catch (Exception ex)
|
|
58
|
+
{
|
|
59
|
+
// Mark as failed
|
|
60
|
+
SentrySdk.CaptureCheckIn("my-monitor-slug", CheckInStatus.Error, checkInId);
|
|
61
|
+
throw;
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Pattern B: Heartbeat Check-In (Simpler)
|
|
68
|
+
|
|
69
|
+
Sends a single check-in **after** execution.
|
|
70
|
+
Detects **missed jobs** only — cannot detect timeouts.
|
|
71
|
+
|
|
72
|
+
```csharp
|
|
73
|
+
try
|
|
74
|
+
{
|
|
75
|
+
DoWork();
|
|
76
|
+
SentrySdk.CaptureCheckIn("my-monitor-slug", CheckInStatus.Ok);
|
|
77
|
+
}
|
|
78
|
+
catch
|
|
79
|
+
{
|
|
80
|
+
SentrySdk.CaptureCheckIn("my-monitor-slug", CheckInStatus.Error);
|
|
81
|
+
throw;
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Optionally report the actual runtime duration:
|
|
86
|
+
|
|
87
|
+
```csharp
|
|
88
|
+
var sw = Stopwatch.StartNew();
|
|
89
|
+
DoWork();
|
|
90
|
+
sw.Stop();
|
|
91
|
+
|
|
92
|
+
SentrySdk.CaptureCheckIn(
|
|
93
|
+
"my-monitor-slug",
|
|
94
|
+
CheckInStatus.Ok,
|
|
95
|
+
duration: sw.Elapsed
|
|
96
|
+
);
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## Programmatic Monitor Configuration (Upsert)
|
|
102
|
+
|
|
103
|
+
Create or update a monitor directly from code via `configureMonitorOptions`. This is
|
|
104
|
+
sent with the **first** check-in and is idempotent — safe to call on every run.
|
|
105
|
+
|
|
106
|
+
### Crontab Schedule
|
|
107
|
+
|
|
108
|
+
```csharp
|
|
109
|
+
var checkInId = SentrySdk.CaptureCheckIn(
|
|
110
|
+
"my-scheduled-job",
|
|
111
|
+
CheckInStatus.InProgress,
|
|
112
|
+
configureMonitorOptions: options =>
|
|
113
|
+
{
|
|
114
|
+
options.Interval("0 2 * * *"); // 2 AM daily (crontab expression)
|
|
115
|
+
options.CheckInMargin = TimeSpan.FromMinutes(5); // 5 min grace period before "missed"
|
|
116
|
+
options.MaxRuntime = TimeSpan.FromMinutes(30); // alert if running longer than 30 min
|
|
117
|
+
options.TimeZone = "America/New_York"; // IANA timezone
|
|
118
|
+
options.FailureIssueThreshold = 2; // create issue after 2 consecutive failures
|
|
119
|
+
options.RecoveryThreshold = 1; // resolve issue after 1 consecutive success
|
|
120
|
+
}
|
|
121
|
+
);
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### Interval-Based Schedule
|
|
125
|
+
|
|
126
|
+
```csharp
|
|
127
|
+
var checkInId = SentrySdk.CaptureCheckIn(
|
|
128
|
+
"my-interval-job",
|
|
129
|
+
CheckInStatus.InProgress,
|
|
130
|
+
configureMonitorOptions: options =>
|
|
131
|
+
{
|
|
132
|
+
options.Interval(6, SentryMonitorInterval.Hour); // every 6 hours
|
|
133
|
+
options.CheckInMargin = TimeSpan.FromMinutes(30);
|
|
134
|
+
options.MaxRuntime = TimeSpan.FromMinutes(120);
|
|
135
|
+
options.TimeZone = "UTC";
|
|
136
|
+
options.FailureIssueThreshold = 1;
|
|
137
|
+
options.RecoveryThreshold = 3;
|
|
138
|
+
}
|
|
139
|
+
);
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### `SentryMonitorInterval` Values
|
|
143
|
+
|
|
144
|
+
| Value | Description |
|
|
145
|
+
| ------------------------------ | ------------------- |
|
|
146
|
+
| `SentryMonitorInterval.Minute` | Per-minute interval |
|
|
147
|
+
| `SentryMonitorInterval.Hour` | Per-hour interval |
|
|
148
|
+
| `SentryMonitorInterval.Day` | Per-day interval |
|
|
149
|
+
| `SentryMonitorInterval.Week` | Per-week interval |
|
|
150
|
+
| `SentryMonitorInterval.Month` | Per-month interval |
|
|
151
|
+
| `SentryMonitorInterval.Year` | Per-year interval |
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## Monitor Configuration Reference
|
|
156
|
+
|
|
157
|
+
| Option | Type | Description |
|
|
158
|
+
| -------------------------- | ---------- | ------------------------------------------------------- |
|
|
159
|
+
| `Interval(crontab)` | method | Standard crontab expression (e.g., `"*/15 * * * *"`) |
|
|
160
|
+
| `Interval(interval, unit)` | method | alternative interval-based schedule |
|
|
161
|
+
| `CheckInMargin` | `TimeSpan` | Grace period before a missing check-in is flagged |
|
|
162
|
+
| `MaxRuntime` | `TimeSpan` | Maximum allowed runtime before a timeout alert |
|
|
163
|
+
| `TimeZone` | `string` | IANA timezone name (e.g., `"UTC"`, `"America/Chicago"`) |
|
|
164
|
+
| `FailureIssueThreshold` | `int` | Consecutive failures before a Sentry issue is opened |
|
|
165
|
+
| `RecoveryThreshold` | `int` | Consecutive successes before a Sentry issue is closed |
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
## ASP.NET Core — BackgroundService / IHostedService
|
|
170
|
+
|
|
171
|
+
The most common .NET pattern for scheduled jobs is a `BackgroundService`. Pair it with
|
|
172
|
+
`CaptureCheckIn` for full monitoring:
|
|
173
|
+
|
|
174
|
+
```csharp
|
|
175
|
+
using Microsoft.Extensions.Hosting;
|
|
176
|
+
using Microsoft.Extensions.Logging;
|
|
177
|
+
using Sentry;
|
|
178
|
+
|
|
179
|
+
public class NightlyReportJob : BackgroundService
|
|
180
|
+
{
|
|
181
|
+
private readonly ILogger<NightlyReportJob> _logger;
|
|
182
|
+
private const string MonitorSlug = "nightly-report";
|
|
183
|
+
|
|
184
|
+
public NightlyReportJob(ILogger<NightlyReportJob> logger)
|
|
185
|
+
=> _logger = logger;
|
|
186
|
+
|
|
187
|
+
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
|
188
|
+
{
|
|
189
|
+
while (!stoppingToken.IsCancellationRequested)
|
|
190
|
+
{
|
|
191
|
+
// Wait until next scheduled time (e.g., 2 AM)
|
|
192
|
+
await WaitUntilNextRunAsync(stoppingToken);
|
|
193
|
+
|
|
194
|
+
var checkInId = SentrySdk.CaptureCheckIn(
|
|
195
|
+
MonitorSlug,
|
|
196
|
+
CheckInStatus.InProgress,
|
|
197
|
+
configureMonitorOptions: o =>
|
|
198
|
+
{
|
|
199
|
+
o.Interval("0 2 * * *"); // 2 AM daily
|
|
200
|
+
o.CheckInMargin = TimeSpan.FromMinutes(15);
|
|
201
|
+
o.MaxRuntime = TimeSpan.FromMinutes(60);
|
|
202
|
+
o.TimeZone = "UTC";
|
|
203
|
+
o.FailureIssueThreshold = 1;
|
|
204
|
+
o.RecoveryThreshold = 1;
|
|
205
|
+
}
|
|
206
|
+
);
|
|
207
|
+
|
|
208
|
+
try
|
|
209
|
+
{
|
|
210
|
+
_logger.LogInformation("Starting nightly report generation");
|
|
211
|
+
await GenerateReportAsync(stoppingToken);
|
|
212
|
+
_logger.LogInformation("Nightly report completed successfully");
|
|
213
|
+
|
|
214
|
+
SentrySdk.CaptureCheckIn(MonitorSlug, CheckInStatus.Ok, checkInId);
|
|
215
|
+
}
|
|
216
|
+
catch (Exception ex)
|
|
217
|
+
{
|
|
218
|
+
_logger.LogError(ex, "Nightly report failed");
|
|
219
|
+
SentrySdk.CaptureCheckIn(MonitorSlug, CheckInStatus.Error, checkInId);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
private async Task WaitUntilNextRunAsync(CancellationToken ct)
|
|
225
|
+
{
|
|
226
|
+
var now = DateTime.UtcNow;
|
|
227
|
+
var nextRun = now.Date.AddDays(now.Hour >= 2 ? 1 : 0).AddHours(2);
|
|
228
|
+
var delay = nextRun - now;
|
|
229
|
+
if (delay > TimeSpan.Zero)
|
|
230
|
+
await Task.Delay(delay, ct);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
private Task GenerateReportAsync(CancellationToken ct) => Task.CompletedTask; // replace with real logic
|
|
234
|
+
}
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
Register the hosted service in `Program.cs`:
|
|
238
|
+
|
|
239
|
+
```csharp
|
|
240
|
+
builder.Services.AddHostedService<NightlyReportJob>();
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
### Minimal IHostedService Implementation
|
|
244
|
+
|
|
245
|
+
For simpler one-shot or timer-based jobs:
|
|
246
|
+
|
|
247
|
+
```csharp
|
|
248
|
+
public class SyncJob : IHostedService, IDisposable
|
|
249
|
+
{
|
|
250
|
+
private Timer? _timer;
|
|
251
|
+
private const string MonitorSlug = "data-sync";
|
|
252
|
+
|
|
253
|
+
public Task StartAsync(CancellationToken cancellationToken)
|
|
254
|
+
{
|
|
255
|
+
_timer = new Timer(RunJob, null, TimeSpan.Zero, TimeSpan.FromHours(1));
|
|
256
|
+
return Task.CompletedTask;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
private void RunJob(object? state)
|
|
260
|
+
{
|
|
261
|
+
var checkInId = SentrySdk.CaptureCheckIn(
|
|
262
|
+
MonitorSlug,
|
|
263
|
+
CheckInStatus.InProgress,
|
|
264
|
+
configureMonitorOptions: o =>
|
|
265
|
+
{
|
|
266
|
+
o.Interval(1, SentryMonitorInterval.Hour);
|
|
267
|
+
o.CheckInMargin = TimeSpan.FromMinutes(5);
|
|
268
|
+
o.MaxRuntime = TimeSpan.FromMinutes(30);
|
|
269
|
+
o.TimeZone = "UTC";
|
|
270
|
+
}
|
|
271
|
+
);
|
|
272
|
+
|
|
273
|
+
try
|
|
274
|
+
{
|
|
275
|
+
SyncData();
|
|
276
|
+
SentrySdk.CaptureCheckIn(MonitorSlug, CheckInStatus.Ok, checkInId);
|
|
277
|
+
}
|
|
278
|
+
catch
|
|
279
|
+
{
|
|
280
|
+
SentrySdk.CaptureCheckIn(MonitorSlug, CheckInStatus.Error, checkInId);
|
|
281
|
+
throw;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
private void SyncData() { /* real logic here */ }
|
|
286
|
+
|
|
287
|
+
public Task StopAsync(CancellationToken cancellationToken)
|
|
288
|
+
{
|
|
289
|
+
_timer?.Change(Timeout.Infinite, 0);
|
|
290
|
+
return Task.CompletedTask;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
public void Dispose() => _timer?.Dispose();
|
|
294
|
+
}
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
---
|
|
298
|
+
|
|
299
|
+
## Hangfire Integration
|
|
300
|
+
|
|
301
|
+
A dedicated `Sentry.Hangfire` package wraps check-ins automatically around Hangfire job
|
|
302
|
+
execution:
|
|
303
|
+
|
|
304
|
+
```shell
|
|
305
|
+
dotnet add package Sentry.Hangfire
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
Register the integration when configuring Hangfire:
|
|
309
|
+
|
|
310
|
+
```csharp
|
|
311
|
+
// Program.cs
|
|
312
|
+
builder.Services.AddHangfire(config =>
|
|
313
|
+
{
|
|
314
|
+
config.UseSqlServerStorage(connectionString);
|
|
315
|
+
config.UseSentry(); // ← enables automatic check-in wrapping
|
|
316
|
+
});
|
|
317
|
+
builder.Services.AddHangfireServer();
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
With Hangfire, check-ins are sent automatically for jobs annotated with the
|
|
321
|
+
`[SentryMonitorSlug("...")]` attribute — no manual `CaptureCheckIn` calls needed:
|
|
322
|
+
|
|
323
|
+
```csharp
|
|
324
|
+
public class MyJob
|
|
325
|
+
{
|
|
326
|
+
[SentryMonitorSlug("my-hangfire-job")]
|
|
327
|
+
public void Execute() { /* ... */ }
|
|
328
|
+
}
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
See the
|
|
332
|
+
[Hangfire integration guide](https://docs.sentry.io/platforms/dotnet/crons/hangfire/)
|
|
333
|
+
for full details.
|
|
334
|
+
|
|
335
|
+
---
|
|
336
|
+
|
|
337
|
+
## Quartz.NET Integration
|
|
338
|
+
|
|
339
|
+
**No official Quartz.NET package exists.** Use `CaptureCheckIn` manually inside
|
|
340
|
+
`IJob.Execute()`:
|
|
341
|
+
|
|
342
|
+
```csharp
|
|
343
|
+
using Quartz;
|
|
344
|
+
using Sentry;
|
|
345
|
+
|
|
346
|
+
[DisallowConcurrentExecution]
|
|
347
|
+
public class MyQuartzJob : IJob
|
|
348
|
+
{
|
|
349
|
+
public async Task Execute(IJobExecutionContext context)
|
|
350
|
+
{
|
|
351
|
+
var slug = $"quartz-{context.JobDetail.Key.Name}";
|
|
352
|
+
|
|
353
|
+
var checkInId = SentrySdk.CaptureCheckIn(slug, CheckInStatus.InProgress,
|
|
354
|
+
configureMonitorOptions: o =>
|
|
355
|
+
{
|
|
356
|
+
o.Interval("0 */6 * * *"); // every 6 hours
|
|
357
|
+
o.CheckInMargin = TimeSpan.FromMinutes(10);
|
|
358
|
+
o.MaxRuntime = TimeSpan.FromMinutes(60);
|
|
359
|
+
o.TimeZone = "UTC";
|
|
360
|
+
}
|
|
361
|
+
);
|
|
362
|
+
|
|
363
|
+
try
|
|
364
|
+
{
|
|
365
|
+
await DoWorkAsync(context.CancellationToken);
|
|
366
|
+
SentrySdk.CaptureCheckIn(slug, CheckInStatus.Ok, checkInId);
|
|
367
|
+
}
|
|
368
|
+
catch (Exception ex)
|
|
369
|
+
{
|
|
370
|
+
SentrySdk.CaptureCheckIn(slug, CheckInStatus.Error, checkInId);
|
|
371
|
+
throw new JobExecutionException(ex);
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
---
|
|
378
|
+
|
|
379
|
+
## Long-Running Job Pattern (Heartbeat Loop)
|
|
380
|
+
|
|
381
|
+
For processes that run continuously and should check in periodically:
|
|
382
|
+
|
|
383
|
+
```csharp
|
|
384
|
+
public class LongRunningProcessor : BackgroundService
|
|
385
|
+
{
|
|
386
|
+
private const string MonitorSlug = "queue-processor";
|
|
387
|
+
|
|
388
|
+
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
|
389
|
+
{
|
|
390
|
+
while (!stoppingToken.IsCancellationRequested)
|
|
391
|
+
{
|
|
392
|
+
var checkInId = SentrySdk.CaptureCheckIn(
|
|
393
|
+
MonitorSlug,
|
|
394
|
+
CheckInStatus.InProgress,
|
|
395
|
+
configureMonitorOptions: o =>
|
|
396
|
+
{
|
|
397
|
+
o.Interval(5, SentryMonitorInterval.Minute);
|
|
398
|
+
o.CheckInMargin = TimeSpan.FromMinutes(2);
|
|
399
|
+
o.MaxRuntime = TimeSpan.FromMinutes(10);
|
|
400
|
+
o.TimeZone = "UTC";
|
|
401
|
+
}
|
|
402
|
+
);
|
|
403
|
+
|
|
404
|
+
try
|
|
405
|
+
{
|
|
406
|
+
await ProcessBatchAsync(stoppingToken);
|
|
407
|
+
SentrySdk.CaptureCheckIn(MonitorSlug, CheckInStatus.Ok, checkInId);
|
|
408
|
+
}
|
|
409
|
+
catch (Exception ex) when (!stoppingToken.IsCancellationRequested)
|
|
410
|
+
{
|
|
411
|
+
SentrySdk.CaptureCheckIn(MonitorSlug, CheckInStatus.Error, checkInId);
|
|
412
|
+
// optionally capture the exception too
|
|
413
|
+
SentrySdk.CaptureException(ex);
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
await Task.Delay(TimeSpan.FromMinutes(5), stoppingToken);
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
---
|
|
423
|
+
|
|
424
|
+
## Alerting
|
|
425
|
+
|
|
426
|
+
Create issue alerts in Sentry:\
|
|
427
|
+
**Alerts → Create Alert → Issues → filter** by tag `monitor.slug equals my-monitor-slug`
|
|
428
|
+
|
|
429
|
+
---
|
|
430
|
+
|
|
431
|
+
## Rate Limits
|
|
432
|
+
|
|
433
|
+
Cron check-ins are rate-limited to **6 check-ins per minute per monitor per
|
|
434
|
+
environment**. Each environment (`production`, `staging`, etc.)
|
|
435
|
+
tracks independently.
|
|
436
|
+
Exceeding this limit silently drops events — visible in Usage Stats.
|
|
437
|
+
|
|
438
|
+
---
|
|
439
|
+
|
|
440
|
+
## SDK Version Matrix
|
|
441
|
+
|
|
442
|
+
| Feature | Min SDK Version |
|
|
443
|
+
| ------------------------------------------------------- | ------------------ |
|
|
444
|
+
| `SentrySdk.CaptureCheckIn()` | **4.2.0** |
|
|
445
|
+
| Heartbeat pattern | **4.2.0** |
|
|
446
|
+
| Programmatic monitor upsert (`configureMonitorOptions`) | **4.7.0** |
|
|
447
|
+
| Crontab schedule (`Interval(crontab)`) | **4.7.0** |
|
|
448
|
+
| Interval schedule (`SentryMonitorInterval`) | **4.7.0** |
|
|
449
|
+
| `Sentry.Hangfire` auto-integration | **4.x** |
|
|
450
|
+
| Quartz.NET | ❌ Manual API only |
|
|
451
|
+
|
|
452
|
+
---
|
|
453
|
+
|
|
454
|
+
## Troubleshooting
|
|
455
|
+
|
|
456
|
+
| Issue | Solution |
|
|
457
|
+
| ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
|
|
458
|
+
| Check-ins not appearing in Sentry | Verify `monitorSlug` matches the slug configured in Sentry; check DSN is correct and SDK is initialized |
|
|
459
|
+
| Monitor shows “missed” despite job running | Increase `CheckInMargin` to allow more grace time; check server clock sync (NTP) |
|
|
460
|
+
| Monitor shows “timeout” | Increase `MaxRuntime`; investigate why the job exceeds the expected duration |
|
|
461
|
+
| Monitor not auto-created | Pass `configureMonitorOptions` on the **first** `CaptureCheckIn` call — the upsert creates the monitor |
|
|
462
|
+
| `CheckInStatus.Error` but no Sentry issue | Configure `FailureIssueThreshold = 1` on the monitor options to create issues on first failure |
|
|
463
|
+
| Hangfire jobs not sending check-ins | Ensure `config.UseSentry()` is called inside `AddHangfire`; verify Sentry SDK is initialized before Hangfire starts |
|
|
464
|
+
| Quartz jobs not monitored | No official integration — add `CaptureCheckIn` manually inside `IJob.Execute()` |
|
|
465
|
+
| Duplicate check-ins from multiple instances | Use a distributed lock (e.g., `IDistributedLock`) around the check-in calls, or configure Quartz/Hangfire with single-instance scheduling |
|