All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.opentelemetry.javaagent.instrumentation.jaxrs.v3_0.JerseySpanName Maven / Gradle / Ivy

There is a newer version: 2.12.0-alpha
Show newest version
/*
 * Copyright The OpenTelemetry Authors
 * SPDX-License-Identifier: Apache-2.0
 */

package io.opentelemetry.javaagent.instrumentation.jaxrs.v3_0;

import static io.opentelemetry.javaagent.instrumentation.jaxrs.JaxrsPathUtil.normalizePath;

import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRouteGetter;
import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRouteSource;
import io.opentelemetry.javaagent.bootstrap.jaxrs.JaxrsContextPath;
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
import jakarta.ws.rs.core.Request;
import jakarta.ws.rs.core.UriInfo;
import javax.annotation.Nullable;
import org.glassfish.jersey.server.ContainerRequest;
import org.glassfish.jersey.server.ExtendedUriInfo;

public class JerseySpanName implements HttpServerRouteGetter {

  public static final JerseySpanName INSTANCE = new JerseySpanName();

  public void updateServerSpanName(Request request) {
    Context context = Context.current();
    HttpServerRoute.update(context, HttpServerRouteSource.NESTED_CONTROLLER, this, request);
  }

  @Override
  @Nullable
  public String get(Context context, Request request) {
    ContainerRequest containerRequest = (ContainerRequest) request;
    UriInfo uriInfo = containerRequest.getUriInfo();
    ExtendedUriInfo extendedUriInfo = (ExtendedUriInfo) uriInfo;
    return extendedUriInfo.getMatchedTemplates().stream()
        .map((uriTemplate) -> normalizePath(uriTemplate.getTemplate()))
        .reduce((a, b) -> b + a)
        .map(s -> ServletContextPath.prepend(context, JaxrsContextPath.prepend(context, s)))
        .orElse(null);
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy