public static boolean isActive(CorePlugin corePlugin) { return !corePlugin.getDisabledPlugins().contains(JdbcPlugin.class.getSimpleName()) && corePlugin.isStagemonitorActive(); } }
/** * This is an internal method, use {@link GlobalTracer#get()} * <p> * However, if you are a stagemonitor plugin developer, you should use this method * as the tracer can be mocked more easily. */ public Tracer getTracer() { if (spanWrappingTracer != null && corePlugin.isStagemonitorActive()) { return spanWrappingTracer; } else { return NoopTracerFactory.create(); } }
private static void startMonitoring(MeasurementSession measurementSession) { if (!getPlugin(CorePlugin.class).isStagemonitorActive()) { logger.info("stagemonitor is deactivated"); disabled = true; } if (started || disabled) { return; } Stagemonitor.measurementSession = measurementSession; doStartMonitoring(); }
public static void registerStagemonitorServletContainerInitializers(ServletContext servletContext) { if (!Stagemonitor.getPlugin(CorePlugin.class).isStagemonitorActive()) { return; } for (StagemonitorServletContainerInitializer sci : getStagemonitorSCIs()) { try { sci.onStartup(servletContext); } catch (ServletException e) { logger.warn("Ignored exception:", e); } } }
@Override public final void doFilterInternal(final HttpServletRequest request, final HttpServletResponse response, final FilterChain filterChain) throws IOException, ServletException { if (corePlugin.isStagemonitorActive() && !isInternalRequest(request) && request.getDispatcherType() == REQUEST) { try { doMonitor(request, response, filterChain); } finally { spanWrapperCaptor.clear(); } } else { filterChain.doFilter(request, response); } }
@Override public void reportMetrics(final Map<MetricName, Gauge> gauges, final Map<MetricName, Counter> counters, final Map<MetricName, Histogram> histograms, final Map<MetricName, Meter> meters, final Map<MetricName, Timer> timers) { if (!corePlugin.isStagemonitorActive()) { return; } long timestamp = clock.getTime(); final Timer.Context time = registry.timer(reportingTimeMetricName).time(); final MetricsOutputStreamHandler metricsOutputStreamHandler = new MetricsOutputStreamHandler(gauges, counters, histograms, meters, timers, timestamp); if (!corePlugin.isOnlyLogElasticsearchMetricReports()) { if (!elasticsearchClient.isElasticsearchAvailable()) { return; } final String url = corePlugin.getElasticsearchUrl() + "/" + getTodaysIndexName() + "/" + METRICS_TYPE + "/_bulk"; httpClient.send("POST", url, CONTENT_TYPE_JSON, metricsOutputStreamHandler, NoopResponseHandler.INSTANCE); } else { try { final ByteArrayOutputStream os = new ByteArrayOutputStream(); metricsOutputStreamHandler.withHttpURLConnection(os); elasticsearchMetricsLogger.info(os.toString("UTF-8")); } catch (IOException e) { logger.warn(e.getMessage(), e); } } time.stop(); }
if (runtimeAttached || !corePlugin.isStagemonitorActive() || !corePlugin.isAttachAgentAtRuntime()) { return NOOP_ON_SHUTDOWN_ACTION;
@Test public void testDisabledPlugin() throws Exception { when(corePlugin.isStagemonitorActive()).thenReturn(true); when(corePlugin.getDisabledPlugins()).thenReturn(Collections.singletonList("TestExceptionPlugin")); Stagemonitor.reset(new MeasurementSession("StagemonitorTest", "testHost", "testInstance")); assertThat(healthCheckRegistry.runHealthCheck("TestPlugin").isHealthy()).isTrue(); assertThat(healthCheckRegistry.runHealthCheck("TestExceptionPlugin").isHealthy()).isFalse(); assertThat(healthCheckRegistry.runHealthCheck("TestExceptionPlugin").getMessage()).isEqualTo("disabled via configuration"); }
@Test public void testDeactivated() throws Exception { doReturn(false).when(corePlugin).isStagemonitorActive(); final SpanContextInformation spanContext = requestMonitor.monitor(createMonitoredRequest()); assertNull(spanContext); }
@Before public void before() { when(configuration.getConfig(CorePlugin.class)).thenReturn(corePlugin); when(corePlugin.isStagemonitorActive()).thenReturn(true); Stagemonitor.reset(); Stagemonitor.setConfiguration(configuration); // assertFalse(Stagemonitor.isStarted()); for (String name : healthCheckRegistry.getNames()) { healthCheckRegistry.unregister(name); } }
@Test public void testMDCStagemonitorDeactivated() throws Exception { when(corePlugin.isStagemonitorActive()).thenReturn(false); when(corePlugin.getMeasurementSession()) .thenReturn(new MeasurementSession("MDCSpanEventListenerTest", "testHost", null)); mdcSpanInterceptor.onStart(spanWrapper); assertNull(MDC.getCopyOfContextMap()); }
@Test public void testNotInitialized() throws Exception { when(corePlugin.isStagemonitorActive()).thenReturn(true); final MeasurementSession measurementSession = new MeasurementSession(null, "testHost", "testInstance"); Stagemonitor.reset(measurementSession); assertFalse(Stagemonitor.isStarted()); }
@Before public void setUp() throws Exception { Stagemonitor.reset(); SharedMetricRegistries.clear(); this.corePlugin = mock(CorePlugin.class); when(corePlugin.isStagemonitorActive()).thenReturn(true); final MockTracer tracer = new MockTracer(new ThreadLocalScopeManager(), new B3Propagator()); TracingPlugin tracingPlugin = mock(TracingPlugin.class); when(tracingPlugin.getTracer()).thenReturn(tracer); mdcSpanInterceptor = new MDCSpanEventListener(corePlugin, tracingPlugin); spanWrapper = new SpanWrapper(tracer.buildSpan("operation name").start(),"operation name", 1, 1, Collections.emptyList(), new ConcurrentHashMap<>()); }
@Before public void clearState() { CorePlugin corePlugin = mock(CorePlugin.class); TracingPlugin tracingPlugin = mock(TracingPlugin.class); when(tracingPlugin.getDefaultRateLimitSpansPerMinuteOption()).thenReturn(mock(ConfigurationOption.class)); when(tracingPlugin.getDefaultRateLimitSpansPercentOption()).thenReturn(mock(ConfigurationOption.class)); when(tracingPlugin.getRateLimitSpansPerMinutePercentPerTypeOption()).thenReturn(mock(ConfigurationOption.class)); when(tracingPlugin.getDefaultRateLimitSpansPercent()).thenReturn(1.0); when(tracingPlugin.getRateLimitSpansPerMinutePercentPerType()).thenReturn(Collections.emptyMap()); when(tracingPlugin.getProfilerRateLimitPerMinuteOption()).thenReturn(mock(ConfigurationOption.class)); configuration = mock(ConfigurationRegistry.class); when(configuration.getConfig(CorePlugin.class)).thenReturn(corePlugin); when(configuration.getConfig(TracingPlugin.class)).thenReturn(tracingPlugin); when(corePlugin.isStagemonitorActive()).thenReturn(true); when(corePlugin.getThreadPoolQueueCapacityLimit()).thenReturn(1000); when(corePlugin.getMetricRegistry()).thenReturn(registry); when(corePlugin.getElasticsearchClient()).thenReturn(mock(ElasticsearchClient.class)); final RequestMonitor requestMonitor = new RequestMonitor(configuration, registry); when(tracingPlugin.getRequestMonitor()).thenReturn(requestMonitor); tags = new HashMap<>(); mockTracer = new MockTracer(); tracer = TracingPlugin.createSpanWrappingTracer(mockTracer, configuration, registry, TagRecordingSpanEventListener.asList(tags), new SamplePriorityDeterminingSpanEventListener(configuration), new ReportingSpanEventListener(configuration)); when(tracingPlugin.getTracer()).thenReturn(tracer); testObject = new TestObject(requestMonitor); assertThat(tracer.scopeManager().active()).isNull(); }
when(configuration.getConfig(ServletPlugin.class)).thenReturn(servletPlugin); when(configuration.getConfig(CorePlugin.class)).thenReturn(corePlugin); when(corePlugin.isStagemonitorActive()).thenReturn(true); when(corePlugin.getThreadPoolQueueCapacityLimit()).thenReturn(1000); when(corePlugin.getApplicationName()).thenReturn("JaxRsRequestNameDeterminerTransformerTest");
when(elasticsearchClient.isElasticsearchAvailable()).thenReturn(true); when(corePlugin.getElasticsearchClient()).thenReturn(elasticsearchClient); when(corePlugin.isStagemonitorActive()).thenReturn(true); elasticsearchReporter = ElasticsearchReporter.forRegistry(registry, corePlugin) .convertDurationsTo(DURATION_UNIT)
doReturn(true).when(servletPlugin).isClientSpanCollectionEnabled(); doReturn(true).when(servletPlugin).isClientSpanCollectionInjectionEnabled(); doReturn(true).when(corePlugin).isStagemonitorActive(); doReturn(mock(GrafanaClient.class)).when(corePlugin).getGrafanaClient(); doReturn(1000000d).when(tracingPlugin).getProfilerRateLimitPerMinute();
@Test public void testStartMonitoring() throws Exception { when(corePlugin.isStagemonitorActive()).thenReturn(true); Stagemonitor.setConfiguration(configuration); Stagemonitor.reset(); final MeasurementSession measurementSession = new MeasurementSession("StagemonitorTest", "testHost", "testInstance"); Stagemonitor.reset(measurementSession); assertTrue(Stagemonitor.isStarted()); assertTrue(Stagemonitor.getMeasurementSession().isInitialized()); assertSame(measurementSession, Stagemonitor.getMeasurementSession()); assertThat(healthCheckRegistry.runHealthCheck("TestPlugin").isHealthy()).isTrue(); assertThat(healthCheckRegistry.runHealthCheck("TestExceptionPlugin").isHealthy()).isFalse(); }
@Test public void testStartMonitoringNotActive() throws Exception { when(corePlugin.isStagemonitorActive()).thenReturn(false); final MeasurementSession measurementSession = new MeasurementSession("StagemonitorTest", "testHost", "testInstance"); Stagemonitor.reset(measurementSession); assertTrue(Stagemonitor.isDisabled()); assertFalse(Stagemonitor.isStarted()); assertTrue(Stagemonitor.getMeasurementSession().isInitialized()); assertThat(healthCheckRegistry.getNames()).doesNotContain("TestPlugin", "TestExceptionPlugin"); }
@Override public void onStart(SpanWrapper spanWrapper) { if (corePlugin.isStagemonitorActive()) { final MeasurementSession measurementSession = corePlugin.getMeasurementSession(); if (measurementSession != null) { addToMdcIfNotNull("application", measurementSession.getApplicationName()); addToMdcIfNotNull("host", measurementSession.getHostName()); addToMdcIfNotNull("instance", measurementSession.getInstanceName()); } // don't store the context in MDC if stagemonitor is not active // so that thread pools that get created on startup don't inherit the ids if (Stagemonitor.isStarted()) { tracingPlugin.getTracer().inject(spanWrapper.context(), B3HeaderFormat.INSTANCE, new B3HeaderFormat.B3InjectAdapter() { @Override public void setParentId(String value) { } @Override public void setSpanId(String value) { addToMdcIfNotNull("spanId", value); } @Override public void setTraceId(String value) { addToMdcIfNotNull("traceId", value); } }); } } }