@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,310 @@
|
|
|
1
|
+
# AI Monitoring — Sentry PHP / Laravel SDK
|
|
2
|
+
|
|
3
|
+
> Laravel AI support requires `sentry/sentry-laravel` >= 4.27.0, Laravel 12.x or later,
|
|
4
|
+
> and `laravel/ai`.
|
|
5
|
+
|
|
6
|
+
Sentry’s Laravel AI integration automatically instruments Laravel AI agents, model
|
|
7
|
+
calls, tools, embeddings, token usage, model/provider metadata, and conversation IDs.
|
|
8
|
+
Use this reference when a Laravel app has `laravel/ai` installed or the user asks to
|
|
9
|
+
monitor Laravel AI agents.
|
|
10
|
+
|
|
11
|
+
For non-Laravel PHP AI libraries, use manual `gen_ai.*` spans following the standard
|
|
12
|
+
Sentry AI instrumentation conventions.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Detect
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# Confirm Laravel
|
|
20
|
+
ls artisan 2>/dev/null && echo "Laravel detected"
|
|
21
|
+
grep -E '"laravel/framework"' composer.json 2>/dev/null
|
|
22
|
+
|
|
23
|
+
# Confirm Sentry and Laravel AI
|
|
24
|
+
grep -E '"sentry/sentry-laravel"|"laravel/ai"' composer.json composer.lock 2>/dev/null
|
|
25
|
+
|
|
26
|
+
# Check tracing and PII settings
|
|
27
|
+
grep -E 'SENTRY_TRACES_SAMPLE_RATE|SENTRY_SEND_DEFAULT_PII' .env config/sentry.php 2>/dev/null
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
**Interpretation:**
|
|
31
|
+
|
|
32
|
+
- If `laravel/ai` is present, use automatic Laravel AI instrumentation.
|
|
33
|
+
- If `sentry/sentry-laravel` is below 4.27.0, upgrade before expecting AI spans.
|
|
34
|
+
- If `SENTRY_TRACES_SAMPLE_RATE` is missing or `0`, AI spans will not be sent.
|
|
35
|
+
- If `SENTRY_SEND_DEFAULT_PII` is false or missing, prompts, tool arguments, responses,
|
|
36
|
+
and embeddings input are redacted.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Install
|
|
41
|
+
|
|
42
|
+
Install or upgrade Sentry Laravel:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
composer require sentry/sentry-laravel "^4.27.0"
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Install and configure Laravel AI:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
composer require laravel/ai
|
|
52
|
+
php artisan vendor:publish --provider="Laravel\Ai\AiServiceProvider"
|
|
53
|
+
php artisan migrate
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Add provider keys to `.env` as needed:
|
|
57
|
+
|
|
58
|
+
```ini
|
|
59
|
+
ANTHROPIC_API_KEY=your-anthropic-key
|
|
60
|
+
OPENAI_API_KEY=your-openai-key
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Make sure Sentry is installed normally for Laravel.
|
|
64
|
+
For Laravel 11+, `bootstrap/app.php` must register the exception handler:
|
|
65
|
+
|
|
66
|
+
```php
|
|
67
|
+
use Sentry\Laravel\Integration;
|
|
68
|
+
|
|
69
|
+
return Application::configure(basePath: dirname(__DIR__))
|
|
70
|
+
->withExceptions(function (Exceptions $exceptions) {
|
|
71
|
+
Integration::handles($exceptions);
|
|
72
|
+
})->create();
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Publish Sentry config if it has not been published yet:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
php artisan sentry:publish --dsn=YOUR_DSN
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## Configure
|
|
84
|
+
|
|
85
|
+
Laravel AI instrumentation is enabled automatically when all of these are true:
|
|
86
|
+
|
|
87
|
+
- `sentry/sentry-laravel` >= 4.27.0 is installed
|
|
88
|
+
- `laravel/ai` is installed
|
|
89
|
+
- Sentry tracing is enabled
|
|
90
|
+
|
|
91
|
+
Enable tracing in `.env`:
|
|
92
|
+
|
|
93
|
+
```ini
|
|
94
|
+
SENTRY_TRACES_SAMPLE_RATE=1.0
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Use `1.0` in development.
|
|
98
|
+
For production, either use a lower global rate or configure sampling so AI routes, queue
|
|
99
|
+
jobs, and CLI commands that run agents are sampled at 100%.
|
|
100
|
+
|
|
101
|
+
### Prompt and Response Capture
|
|
102
|
+
|
|
103
|
+
Sentry considers LLM prompts, tool arguments, tool results, responses, and embeddings
|
|
104
|
+
input to be PII. Do not enable capture unless the user confirms the application’s
|
|
105
|
+
privacy policy and data retention settings allow it.
|
|
106
|
+
|
|
107
|
+
After explicit confirmation, enable PII capture:
|
|
108
|
+
|
|
109
|
+
```ini
|
|
110
|
+
SENTRY_SEND_DEFAULT_PII=true
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Without this setting, Laravel AI spans still appear, but input/output attributes are
|
|
114
|
+
omitted and Conversations may not have message content.
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Verify
|
|
119
|
+
|
|
120
|
+
Create an agent and a tool:
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
php artisan make:agent TimeAgent
|
|
124
|
+
php artisan make:tool GetCurrentTime
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Update the tool to return the current time:
|
|
128
|
+
|
|
129
|
+
```php
|
|
130
|
+
<?php
|
|
131
|
+
|
|
132
|
+
namespace App\Ai\Tools;
|
|
133
|
+
|
|
134
|
+
use Illuminate\Contracts\JsonSchema\JsonSchema;
|
|
135
|
+
use Laravel\Ai\Contracts\Tool;
|
|
136
|
+
use Laravel\Ai\Tools\Request;
|
|
137
|
+
use Stringable;
|
|
138
|
+
|
|
139
|
+
class GetCurrentTime implements Tool
|
|
140
|
+
{
|
|
141
|
+
public function description(): Stringable|string
|
|
142
|
+
{
|
|
143
|
+
return 'Get the current date and time.';
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
public function handle(Request $request): Stringable|string
|
|
147
|
+
{
|
|
148
|
+
return now()->toDateTimeString();
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
public function schema(JsonSchema $schema): array
|
|
152
|
+
{
|
|
153
|
+
return [];
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
Register the tool on the agent:
|
|
159
|
+
|
|
160
|
+
```php
|
|
161
|
+
<?php
|
|
162
|
+
|
|
163
|
+
namespace App\Ai\Agents;
|
|
164
|
+
|
|
165
|
+
use App\Ai\Tools\GetCurrentTime;
|
|
166
|
+
use Laravel\Ai\Concerns\RemembersConversations;
|
|
167
|
+
use Laravel\Ai\Contracts\Agent;
|
|
168
|
+
use Laravel\Ai\Contracts\Conversational;
|
|
169
|
+
use Laravel\Ai\Contracts\HasTools;
|
|
170
|
+
use Laravel\Ai\Promptable;
|
|
171
|
+
use Stringable;
|
|
172
|
+
|
|
173
|
+
class TimeAgent implements Agent, Conversational, HasTools
|
|
174
|
+
{
|
|
175
|
+
use Promptable, RemembersConversations;
|
|
176
|
+
|
|
177
|
+
public function instructions(): Stringable|string
|
|
178
|
+
{
|
|
179
|
+
return 'You are a helpful assistant. Use your tools when asked about the time.';
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
public function messages(): iterable
|
|
183
|
+
{
|
|
184
|
+
return [];
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
public function tools(): iterable
|
|
188
|
+
{
|
|
189
|
+
return [new GetCurrentTime];
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
Trigger the agent from a route or command.
|
|
195
|
+
Example route:
|
|
196
|
+
|
|
197
|
+
```php
|
|
198
|
+
use App\Ai\Agents\TimeAgent;
|
|
199
|
+
use Illuminate\Support\Facades\Route;
|
|
200
|
+
|
|
201
|
+
Route::get('/debug-ai', function () {
|
|
202
|
+
$response = (new TimeAgent)->prompt('What time is it?');
|
|
203
|
+
|
|
204
|
+
return $response->text;
|
|
205
|
+
});
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
Visit `/debug-ai`, then check Sentry Traces and the AI Agents dashboard.
|
|
209
|
+
It can take a few moments for data to appear.
|
|
210
|
+
|
|
211
|
+
For CLI commands and other non-HTTP entry points, make sure there is a Sentry
|
|
212
|
+
transaction around the agent call so child AI spans are captured.
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
## Captured Data
|
|
217
|
+
|
|
218
|
+
Laravel AI instrumentation captures:
|
|
219
|
+
|
|
220
|
+
| Span op | Captures |
|
|
221
|
+
| --------------------- | ------------------------------------------------------------------------------------- |
|
|
222
|
+
| `gen_ai.invoke_agent` | Agent prompt lifecycle, agent name, model, provider, available tools, conversation ID |
|
|
223
|
+
| `gen_ai.chat` | AI provider chat request, model/provider, finish reason, token usage |
|
|
224
|
+
| `gen_ai.execute_tool` | Tool name, description, arguments, result |
|
|
225
|
+
| `gen_ai.embeddings` | Embedding model/provider, token usage, input when PII capture is enabled |
|
|
226
|
+
|
|
227
|
+
Common attributes include:
|
|
228
|
+
|
|
229
|
+
| Attribute | Notes |
|
|
230
|
+
| ---------------------------- | ----------------------------------------------------------- |
|
|
231
|
+
| `gen_ai.operation.name` | `invoke_agent`, `chat`, `execute_tool`, or `embeddings` |
|
|
232
|
+
| `gen_ai.agent.name` | Agent class/name where available |
|
|
233
|
+
| `gen_ai.request.model` | Requested model |
|
|
234
|
+
| `gen_ai.response.model` | Actual response model |
|
|
235
|
+
| `gen_ai.provider.name` | Provider name, such as `openai` or `anthropic` |
|
|
236
|
+
| `gen_ai.conversation.id` | Used by Explore > Conversations |
|
|
237
|
+
| `gen_ai.usage.input_tokens` | Total input tokens, including cached tokens |
|
|
238
|
+
| `gen_ai.usage.output_tokens` | Total output tokens, including reasoning tokens |
|
|
239
|
+
| `gen_ai.usage.total_tokens` | Input + output tokens |
|
|
240
|
+
| `gen_ai.input.messages` | Prompt messages, only with `SENTRY_SEND_DEFAULT_PII=true` |
|
|
241
|
+
| `gen_ai.output.messages` | Response messages, only with `SENTRY_SEND_DEFAULT_PII=true` |
|
|
242
|
+
| `gen_ai.tool.call.arguments` | Tool arguments, only with `SENTRY_SEND_DEFAULT_PII=true` |
|
|
243
|
+
| `gen_ai.tool.call.result` | Tool result, only with `SENTRY_SEND_DEFAULT_PII=true` |
|
|
244
|
+
|
|
245
|
+
Streaming agent responses are supported for both `prompt()` and `stream()` calls.
|
|
246
|
+
|
|
247
|
+
---
|
|
248
|
+
|
|
249
|
+
## Conversations
|
|
250
|
+
|
|
251
|
+
Sentry Conversations groups related AI spans by `gen_ai.conversation.id`.
|
|
252
|
+
|
|
253
|
+
In Laravel AI, this is automatic when the agent implements `Conversational` and uses
|
|
254
|
+
`RemembersConversations`. The integration reads Laravel AI’s `conversationId` and
|
|
255
|
+
attaches it to AI spans.
|
|
256
|
+
|
|
257
|
+
To continue a conversation, pass the previous conversation ID back into Laravel AI:
|
|
258
|
+
|
|
259
|
+
```php
|
|
260
|
+
use App\Ai\Agents\TimeAgent;
|
|
261
|
+
use App\Models\User;
|
|
262
|
+
|
|
263
|
+
$user = User::firstOrFail();
|
|
264
|
+
$conversationId = null;
|
|
265
|
+
|
|
266
|
+
foreach (['Hello', 'What did I just ask you?'] as $message) {
|
|
267
|
+
$agent = $conversationId
|
|
268
|
+
? (new TimeAgent)->continue($conversationId, as: $user)
|
|
269
|
+
: (new TimeAgent)->forUser($user);
|
|
270
|
+
|
|
271
|
+
$response = $agent->prompt($message);
|
|
272
|
+
$conversationId = $response->conversationId;
|
|
273
|
+
}
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
Both prompts appear under the same conversation in **Explore > Conversations**.
|
|
277
|
+
|
|
278
|
+
---
|
|
279
|
+
|
|
280
|
+
## Feature Flags
|
|
281
|
+
|
|
282
|
+
You can disable Laravel AI span types in `config/sentry.php` under `tracing.features`:
|
|
283
|
+
|
|
284
|
+
```php
|
|
285
|
+
'features' => [
|
|
286
|
+
// Master switch for all AI spans (requires laravel/ai)
|
|
287
|
+
'gen_ai' => env('SENTRY_TRACE_GEN_AI_ENABLED', true),
|
|
288
|
+
|
|
289
|
+
// Individual span types
|
|
290
|
+
'gen_ai_invoke_agent' => env('SENTRY_TRACE_GEN_AI_INVOKE_AGENT_ENABLED', true),
|
|
291
|
+
'gen_ai_chat' => env('SENTRY_TRACE_GEN_AI_CHAT_ENABLED', true),
|
|
292
|
+
'gen_ai_execute_tool' => env('SENTRY_TRACE_GEN_AI_EXECUTE_TOOL_ENABLED', true),
|
|
293
|
+
'gen_ai_embeddings' => env('SENTRY_TRACE_GEN_AI_EMBEDDINGS_ENABLED', true),
|
|
294
|
+
],
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
Set `gen_ai` to `false` to disable all Laravel AI tracing.
|
|
298
|
+
Use the individual switches to disable only one span type.
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
## Troubleshooting
|
|
303
|
+
|
|
304
|
+
| Issue | Solution |
|
|
305
|
+
| ------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------- |
|
|
306
|
+
| No AI spans | Verify `sentry/sentry-laravel >=4.27.0`, `laravel/ai` is installed, and `SENTRY_TRACES_SAMPLE_RATE > 0` |
|
|
307
|
+
| Agent spans appear but prompts are missing | Confirm the user approved prompt/output capture and set `SENTRY_SEND_DEFAULT_PII=true` |
|
|
308
|
+
| Conversations are not grouped | Implement `Conversational`, use `RemembersConversations`, and pass the previous `$response->conversationId` to `continue()` |
|
|
309
|
+
| CLI agent calls have no spans | Wrap the CLI operation in a Sentry transaction or run the agent inside a traced queue/job/request |
|
|
310
|
+
| Tool spans are missing | Confirm the agent implements `HasTools` and tool tracing is not disabled by `SENTRY_TRACE_GEN_AI_EXECUTE_TOOL_ENABLED=false` |
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
# Crons — Sentry PHP SDK
|
|
2
|
+
|
|
3
|
+
> Minimum SDK versions: `sentry/sentry` ≥ 3.16.0 · `sentry/sentry-laravel` ≥ 3.3.1
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Sentry Crons monitors scheduled jobs by receiving check-ins at job start, success, and
|
|
8
|
+
failure. Three approaches:
|
|
9
|
+
|
|
10
|
+
| Approach | Use when |
|
|
11
|
+
| --------------------------------- | ----------------------------------------------- |
|
|
12
|
+
| `withMonitor()` wrapper | Simple wrapping of any callable |
|
|
13
|
+
| `captureCheckIn()` manually | Need control over timing, status, or heartbeats |
|
|
14
|
+
| `sentryMonitor()` macro (Laravel) | Laravel scheduled tasks — minimal boilerplate |
|
|
15
|
+
|
|
16
|
+
## Code Examples
|
|
17
|
+
|
|
18
|
+
### `withMonitor()` wrapper (simplest)
|
|
19
|
+
|
|
20
|
+
```php
|
|
21
|
+
\Sentry\withMonitor(
|
|
22
|
+
slug: 'my-cron-job',
|
|
23
|
+
callback: fn() => doSomething(),
|
|
24
|
+
);
|
|
25
|
+
// Sends IN_PROGRESS before, OK on success, ERROR on exception
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### Manual check-ins with `captureCheckIn()`
|
|
29
|
+
|
|
30
|
+
```php
|
|
31
|
+
use Sentry\CheckInStatus;
|
|
32
|
+
|
|
33
|
+
// 1. Signal job started
|
|
34
|
+
$checkInId = \Sentry\captureCheckIn(
|
|
35
|
+
slug: 'my-cron-job',
|
|
36
|
+
status: CheckInStatus::inProgress(),
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
try {
|
|
40
|
+
// 2. Do work
|
|
41
|
+
runScheduledTask();
|
|
42
|
+
|
|
43
|
+
// 3a. Signal success
|
|
44
|
+
\Sentry\captureCheckIn(
|
|
45
|
+
slug: 'my-cron-job',
|
|
46
|
+
status: CheckInStatus::ok(),
|
|
47
|
+
checkInId: $checkInId,
|
|
48
|
+
);
|
|
49
|
+
} catch (\Throwable $e) {
|
|
50
|
+
// 3b. Signal failure
|
|
51
|
+
\Sentry\captureCheckIn(
|
|
52
|
+
slug: 'my-cron-job',
|
|
53
|
+
status: CheckInStatus::error(),
|
|
54
|
+
checkInId: $checkInId,
|
|
55
|
+
);
|
|
56
|
+
throw $e;
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Heartbeat (single check-in)
|
|
61
|
+
|
|
62
|
+
Only notifies if the job **didn’t start** when expected (missed).
|
|
63
|
+
Does not detect max runtime exceeded.
|
|
64
|
+
|
|
65
|
+
```php
|
|
66
|
+
// Success
|
|
67
|
+
\Sentry\captureCheckIn(
|
|
68
|
+
slug: 'my-cron-job',
|
|
69
|
+
status: CheckInStatus::ok(),
|
|
70
|
+
duration: 10, // optional: seconds
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
// Failure
|
|
74
|
+
\Sentry\captureCheckIn(
|
|
75
|
+
slug: 'my-cron-job',
|
|
76
|
+
status: CheckInStatus::error(),
|
|
77
|
+
);
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Upsert monitor config programmatically
|
|
81
|
+
|
|
82
|
+
Define monitor settings in code so Sentry creates/updates the monitor automatically on
|
|
83
|
+
first check-in:
|
|
84
|
+
|
|
85
|
+
```php
|
|
86
|
+
use Sentry\CheckInStatus;
|
|
87
|
+
use Sentry\MonitorConfig;
|
|
88
|
+
use Sentry\MonitorSchedule;
|
|
89
|
+
use Sentry\MonitorScheduleUnit;
|
|
90
|
+
|
|
91
|
+
// Crontab schedule
|
|
92
|
+
$monitorConfig = new MonitorConfig(
|
|
93
|
+
MonitorSchedule::crontab('0 2 * * *'), // every day at 2 AM
|
|
94
|
+
checkinMargin: 5, // minutes late before MISSED alert
|
|
95
|
+
maxRuntime: 15, // minutes before TIMEOUT alert
|
|
96
|
+
timezone: 'Europe/Vienna',
|
|
97
|
+
failureIssueThreshold: 2, // consecutive failures before issue
|
|
98
|
+
recoveryThreshold: 5, // consecutive successes to resolve
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
$checkInId = \Sentry\captureCheckIn(
|
|
102
|
+
slug: 'daily-backup',
|
|
103
|
+
status: CheckInStatus::inProgress(),
|
|
104
|
+
monitorConfig: $monitorConfig,
|
|
105
|
+
);
|
|
106
|
+
|
|
107
|
+
runBackup();
|
|
108
|
+
|
|
109
|
+
\Sentry\captureCheckIn(
|
|
110
|
+
slug: 'daily-backup',
|
|
111
|
+
status: CheckInStatus::ok(),
|
|
112
|
+
checkInId: $checkInId,
|
|
113
|
+
);
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
```php
|
|
117
|
+
// Interval schedule
|
|
118
|
+
$monitorConfig = new MonitorConfig(
|
|
119
|
+
MonitorSchedule::interval(10, MonitorScheduleUnit::minute()),
|
|
120
|
+
checkinMargin: 5,
|
|
121
|
+
maxRuntime: 8,
|
|
122
|
+
);
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Laravel — `sentryMonitor()` macro
|
|
126
|
+
|
|
127
|
+
Add `sentryMonitor()` to any scheduled task in `routes/console.php`:
|
|
128
|
+
|
|
129
|
+
```php
|
|
130
|
+
use Illuminate\Support\Facades\Schedule;
|
|
131
|
+
|
|
132
|
+
Schedule::command(SendEmailsCommand::class)
|
|
133
|
+
->everyHour()
|
|
134
|
+
->sentryMonitor(); // that's it
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
With full configuration:
|
|
138
|
+
|
|
139
|
+
```php
|
|
140
|
+
Schedule::command(SendEmailsCommand::class)
|
|
141
|
+
->everyHour()
|
|
142
|
+
->sentryMonitor(
|
|
143
|
+
monitorSlug: null, // auto-generated if null
|
|
144
|
+
checkInMargin: 5, // minutes before MISSED alert
|
|
145
|
+
maxRuntime: 15, // minutes before TIMEOUT alert
|
|
146
|
+
failureIssueThreshold: 1, // consecutive failures before issue
|
|
147
|
+
recoveryThreshold: 1, // consecutive successes to resolve
|
|
148
|
+
updateMonitorConfig: true, // set false to manage config in UI only
|
|
149
|
+
);
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
> **Limitation:** Tasks using `between`, `unlessBetween`, `when`, or `skip` are not
|
|
153
|
+
> supported. Use Laravel’s `cron()` method for schedule frequency in those cases.
|
|
154
|
+
|
|
155
|
+
### Symfony — same as base PHP SDK
|
|
156
|
+
|
|
157
|
+
The Symfony bundle has no dedicated cron integration.
|
|
158
|
+
Use `captureCheckIn()` or `withMonitor()` directly:
|
|
159
|
+
|
|
160
|
+
```php
|
|
161
|
+
use Sentry\CheckInStatus;
|
|
162
|
+
|
|
163
|
+
// In a Console command or service
|
|
164
|
+
$checkInId = \Sentry\captureCheckIn(
|
|
165
|
+
slug: 'symfony-cron',
|
|
166
|
+
status: CheckInStatus::inProgress(),
|
|
167
|
+
);
|
|
168
|
+
|
|
169
|
+
$this->doWork();
|
|
170
|
+
|
|
171
|
+
\Sentry\captureCheckIn(
|
|
172
|
+
slug: 'symfony-cron',
|
|
173
|
+
status: CheckInStatus::ok(),
|
|
174
|
+
checkInId: $checkInId,
|
|
175
|
+
);
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
## `CheckInStatus` Reference
|
|
179
|
+
|
|
180
|
+
```php
|
|
181
|
+
use Sentry\CheckInStatus;
|
|
182
|
+
|
|
183
|
+
CheckInStatus::inProgress() // job has started
|
|
184
|
+
CheckInStatus::ok() // job completed successfully
|
|
185
|
+
CheckInStatus::error() // job failed
|
|
186
|
+
// MISSED and TIMEOUT are generated server-side — not sent by SDK
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
## `MonitorScheduleUnit` Reference
|
|
190
|
+
|
|
191
|
+
```php
|
|
192
|
+
use Sentry\MonitorScheduleUnit;
|
|
193
|
+
|
|
194
|
+
MonitorScheduleUnit::minute()
|
|
195
|
+
MonitorScheduleUnit::hour()
|
|
196
|
+
MonitorScheduleUnit::day()
|
|
197
|
+
MonitorScheduleUnit::week()
|
|
198
|
+
MonitorScheduleUnit::month()
|
|
199
|
+
MonitorScheduleUnit::year()
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
## `MonitorConfig` Parameters
|
|
203
|
+
|
|
204
|
+
| Parameter | Type | Required | Description |
|
|
205
|
+
| ------------------------ | ----------------- | -------- | -------------------------------------------- |
|
|
206
|
+
| `$monitorSchedule` | `MonitorSchedule` | ✅ | Crontab or interval schedule |
|
|
207
|
+
| `$checkinMargin` | `int\|null` | No | Minutes late before MISSED alert |
|
|
208
|
+
| `$maxRuntime` | `int\|null` | No | Minutes after IN_PROGRESS before TIMEOUT |
|
|
209
|
+
| `$timezone` | `string\|null` | No | IANA timezone name, default `UTC` |
|
|
210
|
+
| `$failureIssueThreshold` | `int\|null` | No | Consecutive failures before opening an issue |
|
|
211
|
+
| `$recoveryThreshold` | `int\|null` | No | Consecutive successes to resolve an issue |
|
|
212
|
+
|
|
213
|
+
## Laravel `sentryMonitor()` Parameters
|
|
214
|
+
|
|
215
|
+
| Parameter | Default | Description |
|
|
216
|
+
| ----------------------- | ------- | ---------------------------------------------------------------------- |
|
|
217
|
+
| `monitorSlug` | `null` | Custom slug; auto-generated from command name if null |
|
|
218
|
+
| `checkInMargin` | `5` | Minutes before check-in is considered missed |
|
|
219
|
+
| `maxRuntime` | `15` | Minutes before in-progress is marked timed out |
|
|
220
|
+
| `failureIssueThreshold` | `1` | Consecutive failures before creating issue |
|
|
221
|
+
| `recoveryThreshold` | `1` | Consecutive successes before resolving issue |
|
|
222
|
+
| `updateMonitorConfig` | `true` | `false` = configure monitor only in Sentry UI (requires `monitorSlug`) |
|
|
223
|
+
|
|
224
|
+
## Rate Limits
|
|
225
|
+
|
|
226
|
+
**6 check-ins per minute per monitor-environment.** Excess check-ins are silently
|
|
227
|
+
dropped.
|
|
228
|
+
|
|
229
|
+
Example:
|
|
230
|
+
|
|
231
|
+
- `database-backup` in `production` → up to 6/min
|
|
232
|
+
- `database-backup` in `staging` → up to 6/min (separate limit)
|
|
233
|
+
|
|
234
|
+
Verify dropped check-ins on the Sentry Usage Stats page.
|
|
235
|
+
|
|
236
|
+
## Alerts Setup
|
|
237
|
+
|
|
238
|
+
When a job misses a check-in or reports failure, Sentry creates an error event tagged
|
|
239
|
+
with `monitor.slug`:
|
|
240
|
+
|
|
241
|
+
1. Go to **Alerts** → **Create Alert** → select **Issues** under Errors
|
|
242
|
+
2. Filter: `The event's tags match monitor.slug equals my-monitor-slug-here`
|
|
243
|
+
|
|
244
|
+
## Best Practices
|
|
245
|
+
|
|
246
|
+
- Use `withMonitor()` for simple jobs; use manual `captureCheckIn()` when you need error
|
|
247
|
+
handling or heartbeats
|
|
248
|
+
- Provide `MonitorConfig` on the first check-in so Sentry creates the monitor
|
|
249
|
+
automatically — no UI setup needed
|
|
250
|
+
- For jobs longer than `maxRuntime`, send periodic `IN_PROGRESS` check-ins as heartbeats
|
|
251
|
+
to reset the timeout clock
|
|
252
|
+
- In Laravel, prefer `sentryMonitor()` macro over manual check-ins for scheduled tasks
|
|
253
|
+
- Set `updateMonitorConfig: false` in Laravel when the monitor schedule is managed in
|
|
254
|
+
the Sentry UI
|
|
255
|
+
|
|
256
|
+
## Troubleshooting
|
|
257
|
+
|
|
258
|
+
| Issue | Solution |
|
|
259
|
+
| ------------------------------------- | -------------------------------------------------------------------------- |
|
|
260
|
+
| Monitor not created in Sentry | Provide `MonitorConfig` — monitors are not auto-created without it |
|
|
261
|
+
| MISSED alerts firing too early | Increase `checkinMargin` to allow for job startup time |
|
|
262
|
+
| TIMEOUT alerts on slow jobs | Increase `maxRuntime` or send periodic `IN_PROGRESS` heartbeats |
|
|
263
|
+
| Laravel `sentryMonitor()` not working | Check SDK version ≥ 3.3.1; verify `ConsoleSchedulingIntegration` is active |
|
|
264
|
+
| `between`/`when` tasks not monitored | Use Laravel’s `cron()` method for schedule frequency instead |
|
|
265
|
+
| Check-ins silently dropped | You may be hitting the 6/min rate limit — check Usage Stats page |
|