Skip to content
This repository has been archived by the owner on Feb 20, 2023. It is now read-only.

Commit

Permalink
Remove initialization code from RequestMonitor
Browse files Browse the repository at this point in the history
  • Loading branch information
Felix Barnsteiner committed Mar 19, 2017
1 parent a0d84b3 commit 8477458
Show file tree
Hide file tree
Showing 9 changed files with 31 additions and 103 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,6 @@ public MonitoredMethodRequest(Configuration configuration, String methodSignatur
this.safeParameters = getSafeParameterMap(parameters);
}

@Override
public String getInstanceName() {
return null;
}

private Map<String, String> getSafeParameterMap(Map<String, Object> parameters) {
if (parameters == null) {
return null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,8 @@

import io.opentracing.Span;

@Deprecated
public abstract class MonitoredRequest {

/**
* Optionally, the instance name can be derived from a request.
* For instance in a HTTP context you could return the domain name.
*
* @return the instance name
*/
public String getInstanceName() {
return null;
}

/**
* Creates a instance of {@link Span} that represents the current request, e.g. a HTTP request.
* <p/>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,14 @@
package org.stagemonitor.requestmonitor;

import org.stagemonitor.core.CorePlugin;
import org.stagemonitor.core.MeasurementSession;
import org.stagemonitor.core.Stagemonitor;
import org.stagemonitor.core.configuration.Configuration;
import org.stagemonitor.core.metrics.metrics2.Metric2Registry;
import org.stagemonitor.core.metrics.metrics2.MetricName;
import org.stagemonitor.requestmonitor.tracing.wrapper.SpanEventListener;
import org.stagemonitor.requestmonitor.utils.SpanUtils;

import static java.util.concurrent.TimeUnit.NANOSECONDS;
import static org.stagemonitor.core.metrics.metrics2.MetricName.name;

/**
* @deprecated we should try to do everything with {@link SpanEventListener}s
*/
@Deprecated
public class RequestMonitor {

private final MetricName internalOverheadMetricName = name("internal_overhead_request_monitor").build();
Expand All @@ -36,44 +29,20 @@ private RequestMonitor(Configuration configuration, Metric2Registry registry, Re

public void monitorStart(MonitoredRequest monitoredRequest) {
final long start = System.nanoTime();
try {
if (!corePlugin.isStagemonitorActive()) {
return;
}

if (Stagemonitor.getMeasurementSession().isNull()) {
createMeasurementSession();
}

if (Stagemonitor.getMeasurementSession().getInstanceName() == null) {
getInstanceNameFromExecution(monitoredRequest);
}

if (!Stagemonitor.isStarted()) {
Stagemonitor.startMonitoring();
}
if (Stagemonitor.isStarted()) {
monitoredRequest.createSpan();
}
} finally {
final SpanContextInformation info = SpanContextInformation.getCurrent();
if (info != null) {
info.setOverhead1(System.nanoTime() - start);
}
monitoredRequest.createSpan();
final SpanContextInformation info = SpanContextInformation.getCurrent();
if (info != null) {
info.setOverhead1(System.nanoTime() - start);
}
}

public void monitorStop() {
final SpanContextInformation info = SpanContextInformation.getCurrent();
if (info == null || !corePlugin.isStagemonitorActive()) {
return;
}
long overhead2 = System.nanoTime();
if (info.getSpan() != null) {
if (info != null) {
long overhead2 = System.nanoTime();
info.getSpan().finish();
trackOverhead(info.getOverhead1(), overhead2);
}

trackOverhead(info.getOverhead1(), overhead2);
}

public SpanContextInformation monitor(MonitoredRequest monitoredRequest) throws Exception {
Expand All @@ -100,25 +69,4 @@ private void trackOverhead(long overhead1, long overhead2) {
}
}

/*
* In case the instance name is not set by configuration, try to read from monitored execution
* (e.g. the domain name from a HTTP request)
*/
private synchronized void getInstanceNameFromExecution(MonitoredRequest monitoredRequest) {
final MeasurementSession measurementSession = Stagemonitor.getMeasurementSession();
if (measurementSession.getInstanceName() == null) {
MeasurementSession session = new MeasurementSession(measurementSession.getApplicationName(), measurementSession.getHostName(),
monitoredRequest.getInstanceName());
Stagemonitor.setMeasurementSession(session);
}
}

private synchronized void createMeasurementSession() {
if (Stagemonitor.getMeasurementSession().isNull()) {
MeasurementSession session = new MeasurementSession(corePlugin.getApplicationName(), corePlugin.getHostName(),
corePlugin.getInstanceName());
Stagemonitor.setMeasurementSession(session);
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -313,7 +313,6 @@ public class RequestMonitorPlugin extends StagemonitorPlugin {
private static RequestMonitor requestMonitor;

private SpanWrappingTracer spanWrappingTracer;
private Tracer noopTracer = NoopTracer.INSTANCE;
private SamplePriorityDeterminingSpanEventListener samplePriorityDeterminingSpanInterceptor;
private ReportingSpanEventListener reportingSpanEventListener;
private CorePlugin corePlugin;
Expand All @@ -334,7 +333,7 @@ public Tracer getTracer() {
if (spanWrappingTracer != null && corePlugin.isStagemonitorActive()) {
return spanWrappingTracer;
} else {
return noopTracer;
return NoopTracer.INSTANCE;
}
}

Expand Down Expand Up @@ -376,7 +375,6 @@ public void initializePlugin(final StagemonitorPlugin.InitArguments initArgument
final ServiceLoader<SpanEventListenerFactory> factories = ServiceLoader.load(SpanEventListenerFactory.class, RequestMonitorPlugin.class.getClassLoader());
this.spanWrappingTracer = createSpanWrappingTracer(tracer, initArguments.getConfiguration(), metricRegistry,
factories, samplePriorityDeterminingSpanInterceptor, reportingSpanEventListener);
noopTracer = null;
}

public static SpanWrappingTracer createSpanWrappingTracer(final Tracer delegate, Configuration configuration, final Metric2Registry metricRegistry,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import org.stagemonitor.core.metrics.metrics2.MetricName;
import org.stagemonitor.requestmonitor.reporter.ReportingSpanEventListener;
import org.stagemonitor.requestmonitor.sampling.SamplePriorityDeterminingSpanEventListener;
import org.stagemonitor.requestmonitor.tracing.NoopTracer;
import org.stagemonitor.requestmonitor.tracing.wrapper.SpanWrappingTracer;

import java.util.Collections;
Expand Down Expand Up @@ -80,7 +81,13 @@ public void before() {
tracer = RequestMonitorPlugin.createSpanWrappingTracer(getTracer(), configuration, registry,
TagRecordingSpanEventListener.asList(tags),
samplePriorityDeterminingSpanInterceptor, reportingSpanEventListener);
when(requestMonitorPlugin.getTracer()).thenReturn(tracer);
when(requestMonitorPlugin.getTracer()).then((invocation) -> {
if (corePlugin.isStagemonitorActive()) {
return tracer;
} else {
return NoopTracer.INSTANCE;
}
});
assertTrue(TracingUtils.getTraceContext().isEmpty());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,8 @@
import com.uber.jaeger.context.TracingUtils;
import com.uber.jaeger.samplers.ConstSampler;

import org.junit.Ignore;
import org.junit.Test;
import org.mockito.Mockito;
import org.stagemonitor.core.Stagemonitor;
import org.stagemonitor.requestmonitor.tracing.jaeger.LoggingSpanReporter;
import org.stagemonitor.requestmonitor.tracing.wrapper.SpanWrapper;

Expand Down Expand Up @@ -82,15 +80,6 @@ private MonitoredRequest createMonitoredRequest() throws Exception {
}));
}

@Test
@Ignore
public void testGetInstanceNameFromExecution() throws Exception {
final MonitoredRequest monitoredRequest = createMonitoredRequest();
doReturn("testInstance").when(monitoredRequest).getInstanceName();
requestMonitor.monitor(monitoredRequest);
assertEquals("testInstance", Stagemonitor.getMeasurementSession().getInstanceName());
}

@Test
public void testExecutorServiceContextPropagation() throws Exception {
final ExecutorService executorService = TracingUtils.tracedExecutor(Executors.newSingleThreadExecutor());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,11 +70,6 @@ public MonitoredHttpRequest(HttpServletRequest httpServletRequest,
clientIp = getClientIp(httpServletRequest);
}

@Override
public String getInstanceName() {
return httpServletRequest.getServerName();
}

@Override
public Span createSpan() {
boolean sample = true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import java.util.Iterator;
import java.util.List;
import java.util.ServiceLoader;
import java.util.concurrent.atomic.AtomicBoolean;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
Expand All @@ -43,6 +44,7 @@ public class HttpRequestMonitorFilter extends AbstractExclusionFilter implements
private final List<HtmlInjector> htmlInjectors = new ArrayList<HtmlInjector>();
private boolean atLeastServletApi3 = false;
private final MonitoredHttpRequestFactory monitoredHttpRequestFactory;
private final AtomicBoolean firstRequest = new AtomicBoolean(true);

public HttpRequestMonitorFilter() {
this(Stagemonitor.getConfiguration());
Expand All @@ -68,7 +70,7 @@ public HttpRequestMonitorFilter(Configuration configuration) {
public void initInternal(FilterConfig filterConfig) throws ServletException {
final MeasurementSession measurementSession = new MeasurementSession(getApplicationName(filterConfig),
corePlugin.getHostName(), corePlugin.getInstanceName());
Stagemonitor.setMeasurementSession(measurementSession);
Stagemonitor.startMonitoring(measurementSession);
final ServletContext servletContext = filterConfig.getServletContext();
atLeastServletApi3 = servletContext.getMajorVersion() >= 3;

Expand All @@ -92,6 +94,9 @@ private String getApplicationName(FilterConfig filterConfig) {
@Override
public final void doFilterInternal(final HttpServletRequest request, final HttpServletResponse response, final FilterChain filterChain)
throws IOException, ServletException {
if (firstRequest.getAndSet(false) && Stagemonitor.getMeasurementSession().getInstanceName() == null) {
setInstanceAndStartMonitoring(request.getServerName());
}
if (corePlugin.isStagemonitorActive() && !isInternalRequest(request) &&
request.getDispatcherType() == REQUEST) {
doMonitor(request, response, filterChain);
Expand All @@ -100,6 +105,15 @@ public final void doFilterInternal(final HttpServletRequest request, final HttpS
}
}

private synchronized void setInstanceAndStartMonitoring(String instanceName) {
final MeasurementSession measurementSession = Stagemonitor.getMeasurementSession();
if (measurementSession.getInstanceName() == null) {
MeasurementSession session = new MeasurementSession(measurementSession.getApplicationName(),
measurementSession.getHostName(), instanceName);
Stagemonitor.startMonitoring(session);
}
}

private void doMonitor(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws IOException, ServletException {

final StatusExposingByteCountingServletResponse responseWrapper;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,13 +71,6 @@ public void tearDown() throws Exception {
public void testGetRequestName() throws Exception {
final MonitoredHttpRequest monitoredHttpRequest = createMonitoredHttpRequest(new MockHttpServletRequest("GET", "/test.js"));
assertEquals("GET *.js", monitoredHttpRequest.getRequestName());
testGetInstanceName();
}

@Test
public void testGetInstanceName() throws Exception {
final MonitoredHttpRequest monitoredHttpRequest = createMonitoredHttpRequest(new MockHttpServletRequest("GET", "/test.js"));
assertEquals("localhost", monitoredHttpRequest.getInstanceName());
}

@Test
Expand Down

0 comments on commit 8477458

Please sign in to comment.