@Override public String getSignature(CallStackElement callTreeElement) { return callTreeElement.getSignature(); }
@Override public String getSignature(CallStackElement callTreeElement) { final String shortSignature = callTreeElement.getShortSignature(); if (shortSignature != null) { return shortSignature; } else { return callTreeElement.getSignature(); } }
@Test public void testFreemarkerProfilingMethodCall() throws Exception { final CallStackElement callTree = Profiler.activateProfiling("testFreemarkerProfilingMethodCall"); final String renderedTemplate = processTemplate("test.ftl", "${templateModel.getFoo()}", new TemplateModel()); Profiler.stop(); Profiler.deactivateProfiling(); assertThat(renderedTemplate).isEqualTo("foo"); System.out.println(callTree); assertThat(callTree.getChildren()).hasSize(1); final CallStackElement freemarkerNode = callTree.getChildren().get(0); assertThat(freemarkerNode.getSignature()).isEqualTo("test.ftl:1#templateModel.getFoo()"); assertThat(freemarkerNode.getChildren()).hasSize(1); final CallStackElement templateModelNode = freemarkerNode.getChildren().get(0); assertThat(templateModelNode.getSignature()).isEqualTo("String org.stagemonitor.tracing.freemarker.FreemarkerProfilingTransformerTest$TemplateModel.getFoo()"); }
@Test public void testFreemarkerProfiling() throws Exception { final CallStackElement callTree = Profiler.activateProfiling("testFreemarkerProfiling"); final String renderedTemplate = processTemplate("test.ftl", "${templateModel.foo}", new TemplateModel()); Profiler.stop(); Profiler.deactivateProfiling(); assertThat(renderedTemplate).isEqualTo("foo"); System.out.println(callTree); assertThat(callTree.getChildren()).hasSize(1); final CallStackElement freemarkerNode = callTree.getChildren().get(0); assertThat(freemarkerNode.getSignature()).isEqualTo("test.ftl:1#templateModel.foo"); assertThat(freemarkerNode.getChildren()).hasSize(1); final CallStackElement templateModelNode = freemarkerNode.getChildren().get(0); assertThat(templateModelNode.getSignature()).isEqualTo("String org.stagemonitor.tracing.freemarker.FreemarkerProfilingTransformerTest$TemplateModel.getFoo()"); }
@Test public void testNestedTracing() throws Exception { final TracedNestedTestClass testClass = new TracedNestedTestClass(); testClass.foo(); final SpanContextInformation barInfo = spanCapturingReporter.get(); final SpanContextInformation fooInfo = spanCapturingReporter.get(); assertThat(fooInfo.getOperationName()).contains("foo").doesNotContain("bar"); assertThat(fooInfo.getCallTree().getSignature()).contains("foo").doesNotContain("bar"); assertThat(fooInfo.getCallTree().getChildren().get(0).getChildren().get(0).getSignature()).contains("bar()"); assertThat(barInfo.getCallTree()).isNull(); }
@Test public void testInnerPrivateMethod() { class Test { private void test() { } } Test test = new Test(); CallStackElement total = Profiler.activateProfiling("total"); test.test(); Profiler.stop(); Assert.assertFalse(total.toString(), total.getChildren().iterator().next().getSignature().contains("access$")); }
@Test public void testMonitorRequests() throws Exception { testClass.monitorMe(1); final SpanContextInformation spanContext = spanCapturingReporter.get(); // either parameters.arg0 or parameters.s assertThat("1").isEqualTo(getTagsStartingWith(tags, SpanUtils.PARAMETERS_PREFIX).iterator().next()); assertThat("TracedTransformerTest$TestClass#monitorMe").isEqualTo(spanContext.getOperationName()); assertThat(1).isEqualTo(spanContext.getCallTree().getChildren().size()); final String signature = spanContext.getCallTree().getChildren().get(0).getSignature(); assertThat(signature).contains("org.stagemonitor.tracing.TracedTransformerTest$TestClass.monitorMe"); final Map<MetricName,Timer> timers = metricRegistry.getTimers(); assertThat(timers).containsKey(name("response_time").operationName("TracedTransformerTest$TestClass#monitorMe").operationType("method_invocation").build()); }
@Test public void testClassLevelAnnotationClass() throws Exception { testClassLevelAnnotationClass.monitorMe("1"); testClassLevelAnnotationClass.dontMonitorMe(); final SpanContextInformation spanContext = spanCapturingReporter.get(); // either parameters.arg0 or parameters.s assertThat("1").isEqualTo(getTagsStartingWith(tags, SpanUtils.PARAMETERS_PREFIX).iterator().next()); assertThat("TracedTransformerTest$TestClassLevelAnnotationClass#monitorMe").isEqualTo(spanContext.getOperationName()); assertThat(1).isEqualTo(spanContext.getCallTree().getChildren().size()); final String signature = spanContext.getCallTree().getChildren().get(0).getSignature(); assertThat(signature).contains("org.stagemonitor.tracing.TracedTransformerTest$TestClassLevelAnnotationClass.monitorMe"); final Map<MetricName, Timer> timers = metricRegistry.getTimers(); assertThat(timers).containsKey(name("response_time").operationName("TracedTransformerTest$TestClassLevelAnnotationClass#monitorMe").operationType("method_invocation").build()); }
@Test public void testMonitorAsyncMethods() throws Exception { testClass.asyncMethod(); final SpanContextInformation spanContext = spanCapturingReporter.get(); assertThat("TracedTransformerTest$TestClass#asyncMethod").isEqualTo(spanContext.getOperationName()); assertThat(1).isEqualTo(spanContext.getCallTree().getChildren().size()); final String signature = spanContext.getCallTree().getChildren().get(0).getSignature(); assertThat(signature).contains("org.stagemonitor.tracing.TracedTransformerTest$TestClass.asyncMethod"); final Map<MetricName,Timer> timers = metricRegistry.getTimers(); assertThat(timers).containsKey(name("response_time").operationName("TracedTransformerTest$TestClass#asyncMethod").operationType("method_invocation").build()); }
@Test public void testMonitorRequestsAnnonymousInnerClass() throws Exception { testClass.monitorAnnonymousInnerClass(); final SpanContextInformation spanContext = spanCapturingReporter.get(); assertThat("TracedTransformerTest$TestClass$1#run").isEqualTo(spanContext.getOperationName()); assertThat(1).isEqualTo(spanContext.getCallTree().getChildren().size()); final String signature = spanContext.getCallTree().getChildren().get(0).getSignature(); assertThat(signature).contains("org.stagemonitor.tracing.TracedTransformerTest$TestClass$1.run"); final Map<MetricName,Timer> timers = metricRegistry.getTimers(); assertThat(timers).containsKey(name("response_time").operationName("TracedTransformerTest$TestClass$1#run").operationType("method_invocation").build()); }
@Test public void testProfiler() { ProfilerTest profilerTest = new ProfilerTest(); CallStackElement total = Profiler.activateProfiling("total"); Assert.assertEquals(21, profilerTest.method1()); Profiler.stop(); Assert.assertEquals(total.toString(), 1, total.getChildren().size()); Assert.assertEquals(total.toString(), 3, total.getChildren().get(0).getChildren().size()); final String method5 = total.getChildren().get(0).getChildren().get(2).getSignature(); Assert.assertTrue(method5, method5.contains("org.stagemonitor.tracing.prof.ProfilerTest.method5")); }
@Test public void testRecordSqlStatement() throws Exception { final SpanContextInformation spanContext = requestMonitor .monitor(new MonitoredMethodRequest(configuration, "testRecordSqlStatement", () -> { testDao.executeStatement(); })); final Map<MetricName, Timer> timers = metric2Registry.getTimers(); final String message = timers.keySet().toString(); assertTrue(message, timers.size() > 1); assertEquals(message, 1, timers.get(name("response_time").operationType("jdbc").operationName("ConnectionMonitoringTransformerTest$TestDao#executeStatement").build()).getCount()); assertEquals(message, 1, timers.get(name("response_time").operationType("jdbc").operationName("All").build()).getCount()); final CallStackElement callStack = spanContext.getCallTree(); assertEquals("testRecordSqlStatement", callStack.getSignature()); assertEquals("void org.stagemonitor.jdbc.ConnectionMonitoringTransformerTest$TestDao.executeStatement()", callStack.getChildren().get(0).getSignature()); assertEquals("SELECT * from STAGEMONITOR ", callStack.getChildren().get(0).getChildren().get(0).getSignature()); }
@Test public void testRecordSqlPreparedStatement() throws Exception { final SpanContextInformation spanContext = requestMonitor .monitor(new MonitoredMethodRequest(configuration, "testRecordSqlPreparedStatement", () -> testDao.executePreparedStatement())); final Map<MetricName, Timer> timers = metric2Registry.getTimers(); assertThat(timers).isNotEmpty(); assertThat(timers).containsKey(name("response_time").operationType("jdbc").operationName("All").build()); assertThat(timers).containsKey(name("response_time").operationType("jdbc").operationName("ConnectionMonitoringTransformerTest$TestDao#executePreparedStatement").build()); final Map<MetricName, Meter> meters = metric2Registry.getMeters(); assertThat(meters).containsKey(name("external_requests_rate").operationName("testRecordSqlPreparedStatement").build()); final CallStackElement callTree = spanContext.getCallTree(); assertEquals("testRecordSqlPreparedStatement", callTree.getSignature()); assertEquals(callTree.toString(), 1, callTree.getChildren().size()); assertEquals("void org.stagemonitor.jdbc.ConnectionMonitoringTransformerTest$TestDao.executePreparedStatement()", callTree.getChildren().get(0).getSignature()); assertEquals(callTree.toString(), "SELECT * from STAGEMONITOR ", callTree.getChildren().get(0).getChildren().get(0).getSignature()); }
@Test public void testMonitorRemoteCallsAlternateHierarchy() throws Exception { remoteAlt.bar(); final SpanContextInformation spanContext = spanCapturingReporter.get(); assertNotNull(spanContext); assertEquals("RemoteEjbMonitorTransformerTest$RemoteInterfaceWithRemoteAnnotationImpl#bar", spanContext.getOperationName()); assertFalse(spanContext.getCallTree().toString(), spanContext.getCallTree().getChildren().isEmpty()); final String signature = spanContext.getCallTree().getChildren().get(0).getSignature(); assertTrue(signature, signature.contains("org.stagemonitor.tracing.ejb.RemoteEjbMonitorTransformerTest$RemoteInterfaceWithRemoteAnnotationImpl")); }
@Test public void testMonitorRemoteCalls() throws Exception { remote.foo(); final SpanContextInformation spanContext = spanCapturingReporter.get(); assertNotNull(spanContext); assertEquals("RemoteEjbMonitorTransformerTest$RemoteInterfaceImpl#foo", spanContext.getOperationName()); assertFalse(spanContext.getCallTree().toString(), spanContext.getCallTree().getChildren().isEmpty()); final String signature = spanContext.getCallTree().getChildren().get(0).getSignature(); assertTrue(signature, signature.contains("org.stagemonitor.tracing.ejb.RemoteEjbMonitorTransformerTest$RemoteInterfaceImpl")); }
@Test public void testMonitorRemoteCallsSuperInterface() throws Exception { remoteAlt.foo(); final SpanContextInformation spanContext = spanCapturingReporter.get(); assertNotNull(spanContext); assertEquals("RemoteEjbMonitorTransformerTest$RemoteInterfaceWithRemoteAnnotationImpl#foo", spanContext.getOperationName()); assertFalse(spanContext.getCallTree().toString(), spanContext.getCallTree().getChildren().isEmpty()); final String signature = spanContext.getCallTree().getChildren().get(0).getSignature(); assertTrue(signature, signature.contains("org.stagemonitor.tracing.ejb.RemoteEjbMonitorTransformerTest$RemoteInterfaceWithRemoteAnnotationImpl")); }
@Test public void testCollectElasticsearchQueries() throws Exception { CallStackElement total = Profiler.activateProfiling("total"); client.prepareSearch().setQuery(QueryBuilders.matchAllQuery()).get(); client.prepareSearch().setQuery(QueryBuilders.matchAllQuery()).setSearchType(SearchType.DFS_QUERY_THEN_FETCH).get(); Profiler.stop(); Assert.assertEquals(total.toString(), "POST /_search\n" + "{\"query\":{\"match_all\":{\"boost\":1.0}}} ", total.getChildren().get(0).getSignature()); Assert.assertEquals(total.toString(), "POST /_search?search_type=dfs_query_then_fetch\n" + "{\"query\":{\"match_all\":{\"boost\":1.0}}} ", total.getChildren().get(1).getSignature()); } }
@Test public void testMeterTimer() { CallStackElement total = Profiler.activateProfiling("total"); testObject.testMethod(); Profiler.stop(); final String signature = total.getChildren().get(0).getSignature(); assertTrue(signature, signature.contains("org.stagemonitor.tracing.MultipleAnnotationsAndProfilerTest$TestObject.testMethod")); assertOneMeterExists(name("rate").tag("signature", "MultipleAnnotationsAndProfilerTest$TestObject#testMethod").build()); assertOneTimerExists(name("timer").tag("signature", "MultipleAnnotationsAndProfilerTest$TestObject#testMethod").build()); }