InventoryReservationRecoveryObservability.java

package com.ecommerce.trade.infrastructure.observability;

import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.stereotype.Component;

@Component
public class InventoryReservationRecoveryObservability {

    private static final String METRIC_NAME =
            "ecommerce.trade.inventory.reservation.unknown.result.resolutions";

    private final Counter recovered;
    private final Counter unresolved;

    public InventoryReservationRecoveryObservability(MeterRegistry meterRegistry) {
        this.recovered = resolutionCounter(meterRegistry, "recovered");
        this.unresolved = resolutionCounter(meterRegistry, "unresolved");
    }

    public void recordRecovered() {
        recovered.increment();
    }

    public void recordUnresolved() {
        unresolved.increment();
    }

    private Counter resolutionCounter(MeterRegistry meterRegistry, String outcome) {
        return Counter.builder(METRIC_NAME)
                .description("Resolution outcomes after an inventory reservation response is unknown")
                .tag("service", "trade-service")
                .tag("dependency", "inventory-service")
                .tag("operation", "reserve")
                .tag("outcome", outcome)
                .register(meterRegistry);
    }
}