IdServerTelemetryService.java

/*
 * Copyright © 2023 Mark Raynsford <code@io7m.com> https://www.io7m.com
 *
 * Permission to use, copy, modify, and/or distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
 * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
 * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 */


package com.io7m.idstore.server.service.telemetry.otp.internal;

import com.io7m.idstore.server.service.telemetry.api.IdServerTelemetryServiceType;
import io.opentelemetry.api.logs.Logger;
import io.opentelemetry.api.metrics.Meter;
import io.opentelemetry.api.trace.Tracer;
import io.opentelemetry.context.propagation.TextMapPropagator;

import java.util.Objects;

/**
 * An OpenTelemetry service.
 */

public final class IdServerTelemetryService
  implements AutoCloseable, IdServerTelemetryServiceType
{
  private final Tracer tracer;
  private final Meter meter;
  private final Logger logger;
  private final TextMapPropagator textMapPropagator;

  /**
   * An OpenTelemetry service.
   *
   * @param inTracer            The tracer instance
   * @param inMeter             The meter instance
   * @param inLogger            The logger instance
   * @param inTextMapPropagator The text map propagator
   */

  public IdServerTelemetryService(
    final Tracer inTracer,
    final Meter inMeter,
    final Logger inLogger,
    final TextMapPropagator inTextMapPropagator)
  {
    this.tracer =
      Objects.requireNonNull(inTracer, "tracer");
    this.meter =
      Objects.requireNonNull(inMeter, "meter");
    this.logger =
      Objects.requireNonNull(inLogger, "logger");
    this.textMapPropagator =
      Objects.requireNonNull(inTextMapPropagator, "textMapPropagator");
  }

  @Override
  public String toString()
  {
    return "[IdServerTelemetryService 0x%s]"
      .formatted(Long.toUnsignedString(this.hashCode(), 16));
  }

  @Override
  public TextMapPropagator textMapPropagator()
  {
    return this.textMapPropagator;
  }

  @Override
  public String description()
  {
    return "Server OpenTelemetry service.";
  }

  @Override
  public Tracer tracer()
  {
    return this.tracer;
  }

  @Override
  public Meter meter()
  {
    return this.meter;
  }

  @Override
  public Logger logger()
  {
    return this.logger;
  }

  @Override
  public boolean isNoOp()
  {
    return false;
  }

  @Override
  public void close()
  {

  }
}