private static void verifyMetrics(Metrics metric, boolean fromCache, boolean multiQuery) { assertTrue(metric.getDuration(TimeUnit.MICROSECONDS) > 0); assertTrue(metric.getCount(TraversalMetrics.ELEMENT_COUNT_ID) > 0); String hasMultiQuery = (String) metric.getAnnotation(QueryProfiler.MULTIQUERY_ANNOTATION); assertTrue(multiQuery?hasMultiQuery.equalsIgnoreCase("true"):hasMultiQuery==null); for (Metrics submetric : metric.getNested()) { assertTrue(submetric.getDuration(TimeUnit.MICROSECONDS) > 0); switch (submetric.getName()) { case "optimization": assertNull(submetric.getCount(TraversalMetrics.ELEMENT_COUNT_ID)); break; case "backend-query": if (fromCache) assertFalse("Should not execute backend-queries when cached",true); assertTrue(submetric.getCount(TraversalMetrics.ELEMENT_COUNT_ID) > 0); break; default: assertFalse("Unrecognized nested query: " + submetric.getName(),true); } } }
private static void verifyMetrics(Metrics metric, boolean fromCache, boolean multiQuery) { assertTrue(metric.getDuration(TimeUnit.MICROSECONDS) > 0); assertTrue(metric.getCount(TraversalMetrics.ELEMENT_COUNT_ID) > 0); String hasMultiQuery = (String) metric.getAnnotation(QueryProfiler.MULTIQUERY_ANNOTATION); assertTrue(multiQuery ? hasMultiQuery.equalsIgnoreCase("true") : hasMultiQuery == null); for (Metrics subMetric : metric.getNested()) { assertTrue(subMetric.getDuration(TimeUnit.MICROSECONDS) > 0); switch (subMetric.getName()) { case "optimization": assertNull(subMetric.getCount(TraversalMetrics.ELEMENT_COUNT_ID)); break; case "backend-query": if (fromCache) assertFalse("Should not execute backend-queries when cached", true); assertTrue(subMetric.getCount(TraversalMetrics.ELEMENT_COUNT_ID) > 0); break; default: assertFalse("Unrecognized nested query: " + subMetric.getName(), true); } } }
private void validate_g_V_out_out_profile_modern(final Traversal traversal, final TraversalMetrics traversalMetrics) { traversalMetrics.toString(); // ensure no exceptions are thrown assumeThat("The following assertions apply to TinkerGraph only as provider strategies can alter the steps to not comply with expectations", graph.getClass().getSimpleName(), equalTo("TinkerGraph")); Metrics metrics = traversalMetrics.getMetrics(0); assertEquals(6, metrics.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue()); assertEquals(6, metrics.getCount(TraversalMetrics.ELEMENT_COUNT_ID).longValue()); metrics = traversalMetrics.getMetrics(1); assertEquals(6, metrics.getCount(TraversalMetrics.ELEMENT_COUNT_ID).longValue()); assertNotEquals(0, metrics.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue()); metrics = traversalMetrics.getMetrics(2); assertEquals(2, metrics.getCount(TraversalMetrics.ELEMENT_COUNT_ID).longValue()); assertNotEquals(0, metrics.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue()); if (!onGraphComputer(traversal.asAdmin())) { // Every other step should be a Profile step List<Step> steps = traversal.asAdmin().getSteps(); for (int ii = 1; ii <= 6; ii += 2) { assertEquals("Every other Step should be a ProfileStep.", ProfileStep.class, steps.get(ii).getClass()); } } }
private void validate_g_V_whereXinXcreatedX_count_isX1XX_name_profile(final Traversal traversal, final TraversalMetrics traversalMetrics) { traversalMetrics.toString(); // ensure no exceptions are thrown assumeThat("The following assertions apply to TinkerGraph only as provider strategies can alter the steps to not comply with expectations", graph.getClass().getSimpleName(), equalTo("TinkerGraph")); assertEquals("There should be 3 top-level metrics.", 3, traversalMetrics.getMetrics().size()); Metrics metrics = traversalMetrics.getMetrics(0); assertEquals(6, metrics.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue()); assertEquals(6, metrics.getCount(TraversalMetrics.ELEMENT_COUNT_ID).longValue()); metrics = traversalMetrics.getMetrics(1); assertEquals(1, metrics.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue()); assertEquals(1, metrics.getCount(TraversalMetrics.ELEMENT_COUNT_ID).longValue()); if (traversal.asAdmin().getStrategies().toList().stream().anyMatch(s -> s instanceof CountStrategy)) { assertEquals("Metrics 1 should have 4 nested metrics.", 4, metrics.getNested().size()); } else { assertEquals("Metrics 1 should have 3 nested metrics.", 3, metrics.getNested().size()); } }
private void validate_g_V_repeat_both_modern_profile(final TraversalMetrics traversalMetrics, final boolean withRepeatUnrollStrategy) { traversalMetrics.toString(); // ensure no exceptions are thrown assumeThat("The following assertions apply to TinkerGraph only as provider strategies can alter the steps to not comply with expectations", graph.getClass().getSimpleName(), equalTo("TinkerGraph")); Metrics metrics = traversalMetrics.getMetrics(0); assertEquals(6, metrics.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue()); assertEquals(6, metrics.getCount(TraversalMetrics.ELEMENT_COUNT_ID).longValue()); metrics = traversalMetrics.getMetrics(1); assertEquals(withRepeatUnrollStrategy ? 12 : 72, metrics.getCount(TraversalMetrics.ELEMENT_COUNT_ID).longValue()); assertNotEquals(0, metrics.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue()); if (!withRepeatUnrollStrategy) assertTrue("Count should be greater than traversers.", metrics.getCount(TraversalMetrics.ELEMENT_COUNT_ID) > metrics.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue()); assertTrue("Percent duration should be positive.", (Double) metrics.getAnnotation(TraversalMetrics.PERCENT_DURATION_KEY) >= 0); assertTrue("Times should be positive.", metrics.getDuration(TimeUnit.MICROSECONDS) >= 0); // Test the nested global metrics of the repeat step if (!withRepeatUnrollStrategy) { final Metrics vertexStepNestedInRepeat = (Metrics) metrics.getNested().toArray()[0]; assertEquals(114, vertexStepNestedInRepeat.getCount(TraversalMetrics.ELEMENT_COUNT_ID).longValue()); assertNotEquals(0, vertexStepNestedInRepeat.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue()); assertTrue("Count should be greater than traversers.", vertexStepNestedInRepeat.getCount(TraversalMetrics.ELEMENT_COUNT_ID) > vertexStepNestedInRepeat.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue()); assertTrue("Times should be positive.", vertexStepNestedInRepeat.getDuration(TimeUnit.MICROSECONDS) >= 0); } double totalPercentDuration = 0; for (Metrics m : traversalMetrics.getMetrics()) { totalPercentDuration += (Double) m.getAnnotation(TraversalMetrics.PERCENT_DURATION_KEY); } assertEquals(100, totalPercentDuration, 0.000001); }
private void validate_g_V_out_out_profile_grateful(final TraversalMetrics traversalMetrics) { traversalMetrics.toString(); // ensure no exceptions are thrown assumeThat("The following assertions apply to TinkerGraph only as provider strategies can alter the steps to not comply with expectations", graph.getClass().getSimpleName(), equalTo("TinkerGraph")); Metrics metrics = traversalMetrics.getMetrics(0); assertEquals(808, metrics.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue()); assertEquals(808, metrics.getCount(TraversalMetrics.ELEMENT_COUNT_ID).longValue()); assertTrue("Percent duration should be positive.", (Double) metrics.getAnnotation(TraversalMetrics.PERCENT_DURATION_KEY) >= 0); assertTrue("Times should be positive.", metrics.getDuration(TimeUnit.MICROSECONDS) >= 0); metrics = traversalMetrics.getMetrics(1); assertEquals(8049, metrics.getCount(TraversalMetrics.ELEMENT_COUNT_ID).longValue()); assertNotEquals(0, metrics.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue()); assertTrue("Percent duration should be positive.", (Double) metrics.getAnnotation(TraversalMetrics.PERCENT_DURATION_KEY) >= 0); assertTrue("Times should be positive.", metrics.getDuration(TimeUnit.MICROSECONDS) >= 0); metrics = traversalMetrics.getMetrics(2); assertEquals(327370, metrics.getCount(TraversalMetrics.ELEMENT_COUNT_ID).longValue()); assertNotEquals(0, metrics.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue()); assertTrue("Percent duration should be positive.", (Double) metrics.getAnnotation(TraversalMetrics.PERCENT_DURATION_KEY) >= 0); assertTrue("Times should be positive.", metrics.getDuration(TimeUnit.MICROSECONDS) >= 0); double totalPercentDuration = 0; for (Metrics m : traversalMetrics.getMetrics()) { totalPercentDuration += (Double) m.getAnnotation(TraversalMetrics.PERCENT_DURATION_KEY); } assertEquals(100, totalPercentDuration, 0.000001); }
@Test @LoadGraphWith(MODERN) public void testProfileStrategyCallback() { final Traversal<Vertex, TraversalMetrics> t = get_g_V_out_out_profile(); MockStep mockStep = new MockStep(t.asAdmin()); t.asAdmin().addStep(3, mockStep); TraversalMetrics traversalMetrics = t.next(); assertTrue(mockStep.callbackCalled); if (!onGraphComputer(t.asAdmin())) { assertEquals(100, traversalMetrics.getMetrics(3).getCount("bogusCount").longValue()); } }
@Test @LoadGraphWith(MODERN) public void testProfileStrategyCallbackSideEffect() { final Traversal<Vertex, Vertex> t = get_g_V_out_out_profileXmetricsX(); MockStep mockStep = new MockStep(t.asAdmin()); t.asAdmin().addStep(3, mockStep); t.iterate(); assertTrue(mockStep.callbackCalled); if (!onGraphComputer(t.asAdmin())) { final TraversalMetrics traversalMetrics = t.asAdmin().getSideEffects().get(METRICS_KEY); assertEquals(100, traversalMetrics.getMetrics(3).getCount("bogusCount").longValue()); } }
private void validate_g_V_out_out_profile_modern(final Traversal traversal, final TraversalMetrics traversalMetrics) { traversalMetrics.toString(); // ensure no exceptions are thrown assumeThat("The following assertions apply to TinkerGraph only as provider strategies can alter the steps to not comply with expectations", graph.getClass().getSimpleName(), equalTo("TinkerGraph")); Metrics metrics = traversalMetrics.getMetrics(0); assertEquals(6, metrics.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue()); assertEquals(6, metrics.getCount(TraversalMetrics.ELEMENT_COUNT_ID).longValue()); metrics = traversalMetrics.getMetrics(1); assertEquals(6, metrics.getCount(TraversalMetrics.ELEMENT_COUNT_ID).longValue()); assertNotEquals(0, metrics.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue()); metrics = traversalMetrics.getMetrics(2); assertEquals(2, metrics.getCount(TraversalMetrics.ELEMENT_COUNT_ID).longValue()); assertNotEquals(0, metrics.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue()); if (!onGraphComputer(traversal.asAdmin())) { // Every other step should be a Profile step List<Step> steps = traversal.asAdmin().getSteps(); for (int ii = 1; ii <= 6; ii += 2) { assertEquals("Every other Step should be a ProfileStep.", ProfileStep.class, steps.get(ii).getClass()); } } }
private void validate_g_V_whereXinXcreatedX_count_isX1XX_name_profile(final Traversal traversal, final TraversalMetrics traversalMetrics) { traversalMetrics.toString(); // ensure no exceptions are thrown assumeThat("The following assertions apply to TinkerGraph only as provider strategies can alter the steps to not comply with expectations", graph.getClass().getSimpleName(), equalTo("TinkerGraph")); assertEquals("There should be 3 top-level metrics.", 3, traversalMetrics.getMetrics().size()); Metrics metrics = traversalMetrics.getMetrics(0); assertEquals(6, metrics.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue()); assertEquals(6, metrics.getCount(TraversalMetrics.ELEMENT_COUNT_ID).longValue()); metrics = traversalMetrics.getMetrics(1); assertEquals(1, metrics.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue()); assertEquals(1, metrics.getCount(TraversalMetrics.ELEMENT_COUNT_ID).longValue()); if (traversal.asAdmin().getStrategies().toList().stream().anyMatch(s -> s instanceof CountStrategy)) { assertEquals("Metrics 1 should have 4 nested metrics.", 4, metrics.getNested().size()); } else { assertEquals("Metrics 1 should have 3 nested metrics.", 3, metrics.getNested().size()); } }
private void validate_g_V_repeat_both_modern_profile(final TraversalMetrics traversalMetrics, final boolean withRepeatUnrollStrategy) { traversalMetrics.toString(); // ensure no exceptions are thrown assumeThat("The following assertions apply to TinkerGraph only as provider strategies can alter the steps to not comply with expectations", graph.getClass().getSimpleName(), equalTo("TinkerGraph")); Metrics metrics = traversalMetrics.getMetrics(0); assertEquals(6, metrics.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue()); assertEquals(6, metrics.getCount(TraversalMetrics.ELEMENT_COUNT_ID).longValue()); metrics = traversalMetrics.getMetrics(1); assertEquals(withRepeatUnrollStrategy ? 12 : 72, metrics.getCount(TraversalMetrics.ELEMENT_COUNT_ID).longValue()); assertNotEquals(0, metrics.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue()); if (!withRepeatUnrollStrategy) assertTrue("Count should be greater than traversers.", metrics.getCount(TraversalMetrics.ELEMENT_COUNT_ID) > metrics.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue()); assertTrue("Percent duration should be positive.", (Double) metrics.getAnnotation(TraversalMetrics.PERCENT_DURATION_KEY) >= 0); assertTrue("Times should be positive.", metrics.getDuration(TimeUnit.MICROSECONDS) >= 0); // Test the nested global metrics of the repeat step if (!withRepeatUnrollStrategy) { final Metrics vertexStepNestedInRepeat = (Metrics) metrics.getNested().toArray()[0]; assertEquals(114, vertexStepNestedInRepeat.getCount(TraversalMetrics.ELEMENT_COUNT_ID).longValue()); assertNotEquals(0, vertexStepNestedInRepeat.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue()); assertTrue("Count should be greater than traversers.", vertexStepNestedInRepeat.getCount(TraversalMetrics.ELEMENT_COUNT_ID) > vertexStepNestedInRepeat.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue()); assertTrue("Times should be positive.", vertexStepNestedInRepeat.getDuration(TimeUnit.MICROSECONDS) >= 0); } double totalPercentDuration = 0; for (Metrics m : traversalMetrics.getMetrics()) { totalPercentDuration += (Double) m.getAnnotation(TraversalMetrics.PERCENT_DURATION_KEY); } assertEquals(100, totalPercentDuration, 0.000001); }
private void validate_g_V_out_out_profile_grateful(final TraversalMetrics traversalMetrics) { traversalMetrics.toString(); // ensure no exceptions are thrown assumeThat("The following assertions apply to TinkerGraph only as provider strategies can alter the steps to not comply with expectations", graph.getClass().getSimpleName(), equalTo("TinkerGraph")); Metrics metrics = traversalMetrics.getMetrics(0); assertEquals(808, metrics.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue()); assertEquals(808, metrics.getCount(TraversalMetrics.ELEMENT_COUNT_ID).longValue()); assertTrue("Percent duration should be positive.", (Double) metrics.getAnnotation(TraversalMetrics.PERCENT_DURATION_KEY) >= 0); assertTrue("Times should be positive.", metrics.getDuration(TimeUnit.MICROSECONDS) >= 0); metrics = traversalMetrics.getMetrics(1); assertEquals(8049, metrics.getCount(TraversalMetrics.ELEMENT_COUNT_ID).longValue()); assertNotEquals(0, metrics.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue()); assertTrue("Percent duration should be positive.", (Double) metrics.getAnnotation(TraversalMetrics.PERCENT_DURATION_KEY) >= 0); assertTrue("Times should be positive.", metrics.getDuration(TimeUnit.MICROSECONDS) >= 0); metrics = traversalMetrics.getMetrics(2); assertEquals(327370, metrics.getCount(TraversalMetrics.ELEMENT_COUNT_ID).longValue()); assertNotEquals(0, metrics.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue()); assertTrue("Percent duration should be positive.", (Double) metrics.getAnnotation(TraversalMetrics.PERCENT_DURATION_KEY) >= 0); assertTrue("Times should be positive.", metrics.getDuration(TimeUnit.MICROSECONDS) >= 0); double totalPercentDuration = 0; for (Metrics m : traversalMetrics.getMetrics()) { totalPercentDuration += (Double) m.getAnnotation(TraversalMetrics.PERCENT_DURATION_KEY); } assertEquals(100, totalPercentDuration, 0.000001); }
@Test @LoadGraphWith(MODERN) public void testProfileStrategyCallback() { final Traversal<Vertex, TraversalMetrics> t = get_g_V_out_out_profile(); MockStep mockStep = new MockStep(t.asAdmin()); t.asAdmin().addStep(3, mockStep); TraversalMetrics traversalMetrics = t.next(); assertTrue(mockStep.callbackCalled); if (!onGraphComputer(t.asAdmin())) { assertEquals(100, traversalMetrics.getMetrics(3).getCount("bogusCount").longValue()); } }
@Test @LoadGraphWith(MODERN) public void testProfileStrategyCallbackSideEffect() { final Traversal<Vertex, Vertex> t = get_g_V_out_out_profileXmetricsX(); MockStep mockStep = new MockStep(t.asAdmin()); t.asAdmin().addStep(3, mockStep); t.iterate(); assertTrue(mockStep.callbackCalled); if (!onGraphComputer(t.asAdmin())) { final TraversalMetrics traversalMetrics = t.asAdmin().getSideEffects().get(METRICS_KEY); assertEquals(100, traversalMetrics.getMetrics(3).getCount("bogusCount").longValue()); } }