@Override public void requestInitialized(ServletRequestEvent sre) { if (corePlugin.isStagemonitorActive()) { final MeasurementSession measurementSession = corePlugin.getMeasurementSession(); if (measurementSession.getApplicationName() != null) { MDC.put("application", measurementSession.getApplicationName()); } if (measurementSession.getHostName() != null) { MDC.put("host", measurementSession.getHostName()); } String instanceName = measurementSession.getInstanceName(); if (instanceName == null) { instanceName = sre.getServletRequest().getServerName(); } MDC.put("instance", instanceName); final String requestId = UUID.randomUUID().toString(); sre.getServletRequest().setAttribute(STAGEMONITOR_REQUEST_ID_ATTR, requestId); if (Stagemonitor.isStarted()) { // don't store the requestId in MDC if stagemonitor is not active // so that thread pools that get created on startup don't inherit the requestId MDC.put("requestId", requestId); } } }
@Test public void testDisabledPlugin() { when(corePlugin.isStagemonitorActive()).thenReturn(true); when(corePlugin.getDisabledPlugins()).thenReturn(Arrays.asList("TestExceptionPlugin")); StageMonitor.startMonitoring(new MeasurementSession("testApp", "testHost", "testInstance")); verify(logger).info("Initializing plugin {}", "TestPlugin"); verify(logger).info("Not initializing disabled plugin {}", "TestExceptionPlugin"); verify(logger, times(0)).info("Initializing plugin {}", "TestExceptionPlugin"); }
@Override public void initializePlugin(Metric2Registry registry, Configuration config) { registerPooledResources(registry, tomcatThreadPools()); final CorePlugin corePlugin = config.getConfig(CorePlugin.class); ElasticsearchClient elasticsearchClient = corePlugin.getElasticsearchClient(); if (corePlugin.isReportToGraphite()) { elasticsearchClient.sendGrafana1DashboardAsync("grafana/Grafana1GraphiteServer.json"); elasticsearchClient.sendGrafana1DashboardAsync("grafana/Grafana1GraphiteKPIsOverTime.json"); } if (corePlugin.isReportToElasticsearch()) { final GrafanaClient grafanaClient = corePlugin.getGrafanaClient(); elasticsearchClient.sendBulkAsync("kibana/ApplicationServer.bulk"); grafanaClient.sendGrafanaDashboardAsync("grafana/ElasticsearchApplicationServer.json"); } }
@Override public void alert(Incident incident, Subscription subscription) { String target = subscription.getTarget(); if (StringUtils.isEmpty(target)) { target = "/stagemonitor/alerts"; } httpClient.sendAsJson("POST", corePlugin.getElasticsearchUrl() + target, incident); }
@Test public void testNotInitialized() { when(corePlugin.isStagemonitorActive()).thenReturn(true); final MeasurementSession measurementSession = new MeasurementSession(null, "testHost", "testInstance"); StageMonitor.startMonitoring(measurementSession); verify(logger).warn("Measurement Session is not initialized: {}", measurementSession); }
@Test public void testStartMonitoringNotActive() throws Exception { when(corePlugin.isStagemonitorActive()).thenReturn(false); StageMonitor.setConfiguration(configuration); final MeasurementSession measurementSession = new MeasurementSession("testApp", "testHost", "testInstance"); StageMonitor.startMonitoring(measurementSession); assertTrue(StageMonitor.isStarted()); assertFalse(StageMonitor.getMeasurementSession().isInitialized()); verify(logger, times(0)).info("Initializing plugin {}", "TestPlugin"); verify(logger, times(0)).info("Initializing plugin {}", "TestExceptionPlugin"); }
@Test public void testStartMonitoring() throws Exception { when(corePlugin.isStagemonitorActive()).thenReturn(true); final MeasurementSession measurementSession = new MeasurementSession("testApp", "testHost", "testInstance"); StageMonitor.startMonitoring(measurementSession); StageMonitor.startMonitoring(new MeasurementSession("testApp2", "testHost2", "testInstance2")); assertTrue(StageMonitor.isStarted()); assertTrue(StageMonitor.getMeasurementSession().isInitialized()); assertSame(measurementSession, StageMonitor.getMeasurementSession()); verify(logger).info("Initializing plugin {}", "TestPlugin"); verify(logger).info("Initializing plugin {}", "TestExceptionPlugin"); }
@Override public boolean isAvailable() { return StringUtils.isNotEmpty(corePlugin.getElasticsearchUrl()); }