Skip to content

Implement DatadogCollector as built-in metrics collector #118

@vlavrynovych

Description

@vlavrynovych

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-shots as 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

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 attention✨ Type: FeatureNew functionality or enhancement🟡 Test: MediumModerate testing effort required

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions