-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
⚡ Priority: HighImportant tasks requiring quick attentionImportant tasks requiring quick attention✨ Type: FeatureNew functionality or enhancementNew functionality or enhancement🟡 Test: MediumModerate testing effort requiredModerate testing effort required
Milestone
Description
Overview
Implement DatadogCollector as a built-in metrics collector in MSR core, integrating with Datadog APM for production monitoring.
Current State
DatadogCollector is currently documented as a custom collector example in the documentation (docs/customization/metrics/custom-collectors.md), but not implemented as a built-in collector.
Proposed Implementation
Add DatadogCollector to src/metrics/collectors/ using the StatsD client:
import { IMetricsCollector } from '../../interface/IMetricsCollector';
import StatsD from 'hot-shots';
export interface DataDogCollectorConfig {
apiKey: string;
host?: string;
prefix?: string;
}
export class DataDogCollector implements IMetricsCollector {
private client: StatsD;
constructor(config: DataDogCollectorConfig) {
this.client = new StatsD({
host: config.host || 'localhost',
port: 8125,
prefix: config.prefix || 'msr.',
globalTags: {
env: process.env.NODE_ENV || 'production',
service: 'migration-runner'
}
});
}
recordScriptComplete(script, duration) {
this.client.increment('migrations.success', 1, { script: script.name });
this.client.timing('migrations.duration', duration, { script: script.name });
}
recordScriptError(script, error) {
this.client.increment('migrations.failed', 1, {
script: script.name,
error: error.constructor.name
});
}
recordRollback(strategy, success, duration) {
this.client.increment('rollbacks.total', 1, { strategy, success: success.toString() });
if (duration) {
this.client.timing('rollbacks.duration', duration, { strategy });
}
}
async close() {
this.client.close();
}
}Requirements
- Implement DatadogCollector in
src/metrics/collectors/DatadogCollector.ts - Add
hot-shotsas peer dependency (not regular dependency) - Export from
src/metrics/collectors/index.ts - Write comprehensive unit tests (mock StatsD client)
- Update documentation to reflect built-in status
- Add integration example in docs
- Add to metrics overview documentation
Dependencies
hot-shots(peer dependency) - Datadog StatsD client
Related
- Add observability and metrics collection #80 - Parent issue: Add observability and metrics collection
- Part of Phase 3: APM Integrations
Acceptance Criteria
- DatadogCollector implemented with full IMetricsCollector interface
- 100% test coverage maintained
- Peer dependency added to package.json
- Documentation updated
- Example usage in docs
- Works with Datadog APM dashboards
Metadata
Metadata
Assignees
Labels
⚡ Priority: HighImportant tasks requiring quick attentionImportant tasks requiring quick attention✨ Type: FeatureNew functionality or enhancementNew functionality or enhancement🟡 Test: MediumModerate testing effort requiredModerate testing effort required