org.glowroot.instrumentation.servlet.WebSphereAppStartupInstrumentation Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of instrumentation-servlet Show documentation
Show all versions of instrumentation-servlet Show documentation
Instrumentation for the Servlet API
/*
* Copyright 2017-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.glowroot.instrumentation.servlet;
import org.glowroot.instrumentation.api.Agent;
import org.glowroot.instrumentation.api.OptionalThreadContext;
import org.glowroot.instrumentation.api.Span;
import org.glowroot.instrumentation.api.TimerName;
import org.glowroot.instrumentation.api.checker.Nullable;
import org.glowroot.instrumentation.api.weaving.Advice;
import org.glowroot.instrumentation.api.weaving.Bind;
import org.glowroot.instrumentation.api.weaving.Shim;
public class WebSphereAppStartupInstrumentation {
private static final TimerName TIMER_NAME = Agent.getTimerName("startup");
@Shim("com.ibm.ws.webcontainer.webapp.WebApp")
public interface WebAppShim {
@Nullable
String getContextPath();
}
@Advice.Pointcut(className = "com.ibm.ws.webcontainer.webapp.WebApp",
methodName = "commonInitializationFinally|commonInitializationFinish",
methodParameterTypes = {"java.util.List"},
nestingGroup = "servlet-startup")
public static class StartAdvice {
@Advice.OnMethodBefore
public static Span onBefore(
OptionalThreadContext context,
@Bind.This WebAppShim webApp) {
String path = webApp.getContextPath();
return ContainerStartup.onBeforeCommon(context, path, TIMER_NAME);
}
@Advice.OnMethodReturn
public static void onReturn(@Bind.Enter Span span) {
span.end();
}
@Advice.OnMethodThrow
public static void onThrow(
@Bind.Thrown Throwable t,
@Bind.Enter Span span) {
span.endWithError(t);
}
}
}