Prompt
Implement telemetry collection strategically to ensure system reliability and meaningful data capture. Place telemetry calls where relevant context is available, use non-blocking patterns for time-sensitive operations, and avoid unnecessary abstraction.
Key principles:
- Non-blocking in critical paths: Use fire-and-forget patterns or periodic collection for operations with strict time limits
- Context-aware placement: Capture metrics where you have access to the relevant data and user actions
- Avoid over-engineering: Don’t create unnecessary abstractions for single-use telemetry calls
- Be intentional: Focus on metrics that provide actionable insights about feature usage and error rates
Example implementation:
// Good: Periodic collection with non-blocking pattern
const thirtyMinutes = 30 * 60 * 1000
telemetryIntervalId = setInterval(() => {
// Fire-and-forget, log potential errors but don't block
void telemetryService.sendCollectedEvents().catch((error) => {
Logger.error("Error sending periodic telemetry:", error)
})
}, thirtyMinutes)
// Good: Capture at the point where context is available
const options = parsePartialArrayString(optionsRaw || "[]")
this.lastOptionsCount = options.length
// Good: Direct usage instead of unnecessary abstraction
telemetryService.captureTaskRestarted(this.taskId, apiConfiguration.apiProvider)