CatalogDataSourceMetrics.java

package com.ecommerce.catalog.infrastructure.datasource;

import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;

final class CatalogDataSourceMetrics {

    private final Counter primaryConnectionAttempts;
    private final Counter replicaConnectionAttempts;
    private final Counter replicaConnectionFailures;
    private final Counter replicaFallbacks;
    private final Counter primaryHints;

    CatalogDataSourceMetrics(MeterRegistry meterRegistry) {
        primaryConnectionAttempts = connectionCounter(meterRegistry, "primary");
        replicaConnectionAttempts = connectionCounter(meterRegistry, "replica");
        replicaConnectionFailures = Counter.builder(
                        "ecommerce.catalog.datasource.replica.connection.failures")
                .description("Catalog replica connection acquisition failures")
                .register(meterRegistry);
        replicaFallbacks = Counter.builder("ecommerce.catalog.datasource.replica.fallbacks")
                .description("Catalog read operations replayed once on the primary")
                .register(meterRegistry);
        primaryHints = Counter.builder("ecommerce.catalog.datasource.primary.hints")
                .description("Catalog requests explicitly requiring primary-read consistency")
                .register(meterRegistry);
    }

    void recordConnectionAttempt(boolean replica) {
        if (replica) {
            replicaConnectionAttempts.increment();
        } else {
            primaryConnectionAttempts.increment();
        }
    }

    void recordReplicaConnectionFailure() {
        replicaConnectionFailures.increment();
    }

    void recordReplicaFallback() {
        replicaFallbacks.increment();
    }

    void recordPrimaryHint() {
        primaryHints.increment();
    }

    private static Counter connectionCounter(MeterRegistry meterRegistry, String target) {
        return Counter.builder("ecommerce.catalog.datasource.connection.attempts")
                .description("Catalog datasource connection acquisition attempts")
                .tag("target", target)
                .register(meterRegistry);
    }
}