Metrics & Observability

jxpush provides hooks to observe the internal state of the client, useful for logging metrics (e.g., to Datadog, Prometheus) or debugging.

AnalyticsHooks

Attach these hooks in your PushClient configuration.

typescript
interface AnalyticsHooks {
    onSendStart?: (data: { messageCount: number; provider: ProviderType }) => void;

    onSendSuccess?: (data: {
        messageCount: number;
        provider: ProviderType;
        durationMs: number;
    }) => void;

    onSendFailure?: (data: {
        messageCount: number;
        provider: ProviderType;
        error: Error;
        durationMs: number;
    }) => void;

    onRetry?: (data: {
        attempt: number;
        maxAttempts: number;
        error: Error;
        delayMs: number
    }) => void;

    onRateLimit?: (data: { waitMs: number; queueSize: number }) => void;
}

Example Usage

typescript
const client = new PushClient({
    // ...
    hooks: {
        onSendSuccess: (metrics) => {
            console.log(`[Metrics] Sent ${metrics.messageCount} msgs in ${metrics.durationMs}ms`);
            // statsD.histogram('push.duration', metrics.durationMs);
        },
        onRetry: (data) => {
            console.warn(`[Metrics] Retry attempt ${data.attempt} due to ${data.error.message}`);
        }
    }
});