Class OpenTelemetryMetricsCollector

java.lang.Object
com.pyranid.otel.OpenTelemetryMetricsCollector
All Implemented Interfaces:
com.pyranid.MetricsCollector

@ThreadSafe public final class OpenTelemetryMetricsCollector extends Object implements com.pyranid.MetricsCollector
OpenTelemetry-backed MetricsCollector for Pyranid database metrics.

Standard database-client metrics use OpenTelemetry semantic-convention names directly. Pyranid-specific lifecycle events use pyranid.* metric and attribute names.

Notification metrics use bounded lifecycle attributes. Channel names, payloads, notification-session identifiers, and backend process identifiers are never exported.

This implementation is thread-safe and expects the supplied Meter to be backed by a non-blocking exporter. Pyranid core catches collector exceptions, but exporters that block can still stall the calling JDBC thread.

Since:
1.0.0
Author:
Mark Allen
  • Method Details

    • builder

      Acquires a builder for OpenTelemetryMetricsCollector instances, using GlobalOpenTelemetry by default.
      Returns:
      the builder
    • withMeter

      public static @NonNull OpenTelemetryMetricsCollector.Builder withMeter(@NonNull io.opentelemetry.api.metrics.Meter meter)
      Acquires a builder seeded with a required Meter.
      Parameters:
      meter - the meter used to build instruments
      Returns:
      the builder
    • withOpenTelemetry

      public static @NonNull OpenTelemetryMetricsCollector.Builder withOpenTelemetry(@NonNull io.opentelemetry.api.OpenTelemetry openTelemetry)
      Acquires a builder seeded with a required OpenTelemetry instance.
      Parameters:
      openTelemetry - the OpenTelemetry instance used to build a meter
      Returns:
      the builder
    • fromMeter

      public static @NonNull OpenTelemetryMetricsCollector fromMeter(@NonNull io.opentelemetry.api.metrics.Meter meter)
      Creates an instance from a required Meter without additional customization.
      Parameters:
      meter - the meter used to build instruments
      Returns:
      an OpenTelemetryMetricsCollector instance
    • fromOpenTelemetry

      public static @NonNull OpenTelemetryMetricsCollector fromOpenTelemetry(@NonNull io.opentelemetry.api.OpenTelemetry openTelemetry)
      Creates an instance from a required OpenTelemetry without additional customization.
      Parameters:
      openTelemetry - the OpenTelemetry instance used to build a meter
      Returns:
      an OpenTelemetryMetricsCollector instance
    • didAcquireStatementConnection

      public void didAcquireStatementConnection(@NonNull com.pyranid.StatementContext<?> ctx, @NonNull Duration acquisitionDuration)
      Specified by:
      didAcquireStatementConnection in interface com.pyranid.MetricsCollector
    • didFailToAcquireStatementConnection

      public void didFailToAcquireStatementConnection(@NonNull com.pyranid.StatementContext<?> ctx, @NonNull com.pyranid.DatabaseType databaseType, @NonNull Duration acquisitionDuration, @NonNull Throwable throwable)
      Specified by:
      didFailToAcquireStatementConnection in interface com.pyranid.MetricsCollector
    • didAcquireTransactionConnection

      public void didAcquireTransactionConnection(@NonNull com.pyranid.Transaction transaction, @NonNull com.pyranid.DatabaseType databaseType, @NonNull Duration acquisitionDuration)
      Specified by:
      didAcquireTransactionConnection in interface com.pyranid.MetricsCollector
    • didFailToAcquireTransactionConnection

      public void didFailToAcquireTransactionConnection(@NonNull com.pyranid.Transaction transaction, @NonNull com.pyranid.DatabaseType databaseType, @NonNull Duration acquisitionDuration, @NonNull Throwable throwable)
      Specified by:
      didFailToAcquireTransactionConnection in interface com.pyranid.MetricsCollector
    • didReleaseStatementConnection

      public void didReleaseStatementConnection(@NonNull com.pyranid.StatementContext<?> ctx, @NonNull Duration heldDuration)
      Specified by:
      didReleaseStatementConnection in interface com.pyranid.MetricsCollector
    • didFailToReleaseStatementConnection

      public void didFailToReleaseStatementConnection(@NonNull com.pyranid.StatementContext<?> ctx, @NonNull Duration heldDuration, @NonNull Throwable throwable)
      Specified by:
      didFailToReleaseStatementConnection in interface com.pyranid.MetricsCollector
    • didReleaseTransactionConnection

      public void didReleaseTransactionConnection(@NonNull com.pyranid.Transaction transaction, @NonNull com.pyranid.DatabaseType databaseType, @NonNull Duration heldDuration)
      Specified by:
      didReleaseTransactionConnection in interface com.pyranid.MetricsCollector
    • didFailToReleaseTransactionConnection

      public void didFailToReleaseTransactionConnection(@NonNull com.pyranid.Transaction transaction, @NonNull com.pyranid.DatabaseType databaseType, @NonNull Duration heldDuration, @NonNull Throwable throwable)
      Specified by:
      didFailToReleaseTransactionConnection in interface com.pyranid.MetricsCollector
    • didExitTransactionClosure

      public void didExitTransactionClosure(@NonNull com.pyranid.Transaction transaction, @NonNull com.pyranid.MetricsCollector.TransactionClosureOutcome outcome, @NonNull com.pyranid.DatabaseType databaseType, @NonNull Duration logicalDuration, @Nullable Throwable thrown)
      Specified by:
      didExitTransactionClosure in interface com.pyranid.MetricsCollector
    • didBeginPhysicalTransaction

      public void didBeginPhysicalTransaction(@NonNull com.pyranid.Transaction transaction, @NonNull com.pyranid.TransactionIsolation isolation, @NonNull com.pyranid.DatabaseType databaseType)
      Specified by:
      didBeginPhysicalTransaction in interface com.pyranid.MetricsCollector
    • didFailToBeginPhysicalTransaction

      public void didFailToBeginPhysicalTransaction(@NonNull com.pyranid.Transaction transaction, @NonNull com.pyranid.TransactionIsolation isolation, @NonNull com.pyranid.MetricsCollector.PhysicalTransactionBeginFailurePhase phase, @NonNull com.pyranid.DatabaseType databaseType, @NonNull Throwable throwable)
      Specified by:
      didFailToBeginPhysicalTransaction in interface com.pyranid.MetricsCollector
    • didCommitPhysicalTransaction

      public void didCommitPhysicalTransaction(@NonNull com.pyranid.Transaction transaction, @NonNull com.pyranid.DatabaseType databaseType, @NonNull Duration physicalDuration)
      Specified by:
      didCommitPhysicalTransaction in interface com.pyranid.MetricsCollector
    • didFailToCommitPhysicalTransaction

      public void didFailToCommitPhysicalTransaction(@NonNull com.pyranid.Transaction transaction, @NonNull com.pyranid.DatabaseType databaseType, @NonNull Duration physicalDuration, @NonNull Throwable throwable)
      Specified by:
      didFailToCommitPhysicalTransaction in interface com.pyranid.MetricsCollector
    • didRollbackPhysicalTransaction

      public void didRollbackPhysicalTransaction(@NonNull com.pyranid.Transaction transaction, @NonNull com.pyranid.DatabaseType databaseType, @NonNull Duration physicalDuration)
      Specified by:
      didRollbackPhysicalTransaction in interface com.pyranid.MetricsCollector
    • didFailToRollbackPhysicalTransaction

      public void didFailToRollbackPhysicalTransaction(@NonNull com.pyranid.Transaction transaction, @NonNull com.pyranid.DatabaseType databaseType, @NonNull Duration physicalDuration, @NonNull Throwable throwable)
      Specified by:
      didFailToRollbackPhysicalTransaction in interface com.pyranid.MetricsCollector
    • didCreateSavepoint

      public void didCreateSavepoint(@NonNull com.pyranid.Transaction transaction, @NonNull com.pyranid.DatabaseType databaseType)
      Specified by:
      didCreateSavepoint in interface com.pyranid.MetricsCollector
    • didRollbackToSavepoint

      public void didRollbackToSavepoint(@NonNull com.pyranid.Transaction transaction, @NonNull com.pyranid.DatabaseType databaseType)
      Specified by:
      didRollbackToSavepoint in interface com.pyranid.MetricsCollector
    • didReleaseSavepoint

      public void didReleaseSavepoint(@NonNull com.pyranid.Transaction transaction, @NonNull com.pyranid.DatabaseType databaseType)
      Specified by:
      didReleaseSavepoint in interface com.pyranid.MetricsCollector
    • didExecuteStatement

      public void didExecuteStatement(@NonNull com.pyranid.StatementContext<?> ctx, @NonNull com.pyranid.StatementLog<?> statementLog, @NonNull com.pyranid.StatementResult result)
      Specified by:
      didExecuteStatement in interface com.pyranid.MetricsCollector
    • didFailToExecuteStatement

      public void didFailToExecuteStatement(@NonNull com.pyranid.StatementContext<?> ctx, @NonNull com.pyranid.StatementLog<?> statementLog, @NonNull com.pyranid.DatabaseType databaseType, @NonNull Throwable throwable)
      Specified by:
      didFailToExecuteStatement in interface com.pyranid.MetricsCollector
    • didFailToOpenStream

      public void didFailToOpenStream(@NonNull com.pyranid.StatementContext<?> ctx, @NonNull com.pyranid.DatabaseType databaseType, @NonNull Duration openDuration, @NonNull Throwable throwable)
      Specified by:
      didFailToOpenStream in interface com.pyranid.MetricsCollector
    • didCloseStream

      public void didCloseStream(@NonNull com.pyranid.StatementContext<?> ctx, @NonNull com.pyranid.MetricsCollector.StreamTerminalOutcome outcome, @NonNull Long rowsConsumed, @NonNull Duration streamDuration, @Nullable Throwable throwable)
      Specified by:
      didCloseStream in interface com.pyranid.MetricsCollector
    • willOpenNotificationSession

      public void willOpenNotificationSession(@NonNull com.pyranid.DatabaseType databaseType, @NonNull UUID notificationSessionId)
      Specified by:
      willOpenNotificationSession in interface com.pyranid.MetricsCollector
    • didOpenNotificationSession

      public void didOpenNotificationSession(@NonNull com.pyranid.DatabaseType databaseType, @NonNull UUID notificationSessionId, @NonNull Duration openDuration)
      Specified by:
      didOpenNotificationSession in interface com.pyranid.MetricsCollector
    • didFailToOpenNotificationSession

      public void didFailToOpenNotificationSession(@NonNull com.pyranid.DatabaseType databaseType, @NonNull UUID notificationSessionId, @NonNull Duration openDuration, @NonNull Throwable throwable)
      Specified by:
      didFailToOpenNotificationSession in interface com.pyranid.MetricsCollector
    • didDeliverNotificationBatch

      public void didDeliverNotificationBatch(@NonNull com.pyranid.DatabaseType databaseType, @NonNull UUID notificationSessionId, @NonNull Long notificationCount)
      Specified by:
      didDeliverNotificationBatch in interface com.pyranid.MetricsCollector
    • didLoseNotificationConnection

      public void didLoseNotificationConnection(@NonNull com.pyranid.DatabaseType databaseType, @NonNull UUID notificationSessionId, @NonNull Throwable throwable)
      Specified by:
      didLoseNotificationConnection in interface com.pyranid.MetricsCollector
    • didCloseNotificationSession

      public void didCloseNotificationSession(@NonNull com.pyranid.DatabaseType databaseType, @NonNull UUID notificationSessionId, @NonNull com.pyranid.MetricsCollector.NotificationSessionOutcome outcome, @NonNull Duration sessionDuration, @Nullable Throwable throwable)
      Specified by:
      didCloseNotificationSession in interface com.pyranid.MetricsCollector
    • didRunPostTransactionOperation

      public void didRunPostTransactionOperation(@NonNull com.pyranid.Transaction transaction, @NonNull com.pyranid.TransactionResult result, @NonNull com.pyranid.DatabaseType databaseType, @NonNull Duration duration, @Nullable Throwable throwable)
      Specified by:
      didRunPostTransactionOperation in interface com.pyranid.MetricsCollector
    • snapshot

      public @NonNull Optional<com.pyranid.MetricsCollector.Snapshot> snapshot()
      Specified by:
      snapshot in interface com.pyranid.MetricsCollector