private boolean isLastChild() { if (parent == null) { return true; } final List<CallStackElement> parentChildren = parent.getChildren(); return parentChildren.get(parentChildren.size() - 1) == this; }
/** * Removes this node from the parent */ public void remove() { if (parent != null) { parent.getChildren().remove(this); recycle(); } }
@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 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 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 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 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 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 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 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 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 testProfileServlet() throws Exception { Filter filter = new CompositeFilter(); final CallStackElement total = Profiler.activateProfiling("total"); filter.doFilter(new MockHttpServletRequest(), new MockHttpServletResponse(), new MockFilterChain()); Profiler.stop(); final CallStackElement serviceCall = total.getChildren().iterator().next(); assertEquals("CompositeFilter#doFilter", serviceCall.getShortSignature()); }
@Test public void testDontProfileStagemonitorServlet() throws Exception { Filter filter = new HttpRequestMonitorFilter(); final CallStackElement total = Profiler.activateProfiling("total"); filter.doFilter(new MockHttpServletRequest(), new MockHttpServletResponse(), new MockFilterChain()); Profiler.stop(); assertEquals(0, total.getChildren().size()); }
@Test public void testProfileServlet() throws Exception { Servlet servlet = new DispatcherServlet(); final CallStackElement total = Profiler.activateProfiling("total"); servlet.service(new MockHttpServletRequest(), new MockHttpServletResponse()); Profiler.stop(); final CallStackElement serviceCall = total.getChildren().iterator().next(); assertEquals("FrameworkServlet#service", serviceCall.getShortSignature()); }
@Test public void testDontProfileStagemonitorServlet() throws Exception { Servlet servlet = new StagemonitorFileServlet(); final CallStackElement total = Profiler.activateProfiling("total"); servlet.service(new MockHttpServletRequest(), new MockHttpServletResponse()); Profiler.stop(); assertEquals(0, total.getChildren().size()); } }
@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()); }