@Override public void addSubMeasurement(String subMeasurementName, TimingInfo ti) { List<TimingInfo> timings = subMeasurementsByName.get(subMeasurementName); if (timings == null) { timings = new ArrayList<TimingInfo>(); subMeasurementsByName.put(subMeasurementName, timings); } if (ti.isEndTimeKnown()) { timings.add(ti); } else { LogFactory.getLog(getClass()).debug( "Skip submeasurement timing info with no end time for " + subMeasurementName); } }
public final Long getEndEpochTimeMilliIfKnown() { return isStartEpochTimeMilliKnown() && isEndTimeKnown() // make use of the wall clock time and elpased time ? startEpochTimeMilli.longValue() + TimeUnit.NANOSECONDS.toMillis(endTimeNano.longValue() - startTimeNano) : null; }
public final Double getTimeTakenMillisIfKnown() { return isEndTimeKnown() ? durationMilliOf(startTimeNano, endTimeNano) : null ; }
/** * Returns a request type specific metrics for * {@link Field#ClientExecuteTime} which is special in the sense that it * makes a more accurate measurement by taking the {@link TimingInfo} at the * root into account. */ protected List<MetricDatum> latencyOfClientExecuteTime(Request<?> req, Object response) { AWSRequestMetrics m = req.getAWSRequestMetrics(); TimingInfo root = m.getTimingInfo(); final String metricName = Field.ClientExecuteTime.name(); if (root.isEndTimeKnown()) { // being defensive List<Dimension> dims = new ArrayList<Dimension>(); dims.add(new Dimension() .withName(Dimensions.MetricType.name()) .withValue(metricName)); // request type specific dims.add(new Dimension() .withName(Dimensions.RequestType.name()) .withValue(requestType(req))); MetricDatum datum = new MetricDatum() .withMetricName(req.getServiceName()) .withDimensions(dims) .withUnit(StandardUnit.Milliseconds) .withValue(root.getTimeTakenMillisIfKnown()); return Collections.singletonList(datum); } return Collections.emptyList(); }
new ArrayList<MetricDatum>(subMeasures.size()); for (TimingInfo sub : subMeasures) { if (sub.isEndTimeKnown()) { // being defensive List<Dimension> dims = new ArrayList<Dimension>(); dims.add(new Dimension()
/** * @return the end epoch time in milliseconds. */ public final Long getEndEpochTimeMilliIfKnown() { return isStartEpochTimeMilliKnown() && isEndTimeKnown() // make use of the wall clock time and elpased time ? startEpochTimeMilli.longValue() + TimeUnit.NANOSECONDS.toMillis(endTimeNano.longValue() - startTimeNano) : null; }
public final Long getEndEpochTimeMilliIfKnown() { return isStartEpochTimeMilliKnown() && isEndTimeKnown() // make use of the wall clock time and elpased time ? startEpochTimeMilli.longValue() + TimeUnit.NANOSECONDS.toMillis(endTimeNano.longValue() - startTimeNano) : null; }
@Override public void addSubMeasurement(String subMeasurementName, TimingInfo ti) { List<TimingInfo> timings = subMeasurementsByName.get(subMeasurementName); if (timings == null) { timings = new ArrayList<TimingInfo>(); subMeasurementsByName.put(subMeasurementName, timings); } if (ti.isEndTimeKnown()) { timings.add(ti); } else { LogFactory.getLog(getClass()).debug( "Skip submeasurement timing info with no end time for " + subMeasurementName); } }
public final Double getTimeTakenMillisIfKnown() { return isEndTimeKnown() ? durationMilliOf(startTimeNano, endTimeNano) : null ; }
/** * @return the time duration in nano if known. */ public final Double getTimeTakenMillisIfKnown() { return isEndTimeKnown() ? durationMilliOf(startTimeNano, endTimeNano) : null; }
@Override public void addSubMeasurement(String subMeasurementName, TimingInfo ti) { List<TimingInfo> timings = subMeasurementsByName.get(subMeasurementName); if (timings == null) { timings = new ArrayList<TimingInfo>(); subMeasurementsByName.put(subMeasurementName, timings); } if (ti.isEndTimeKnown()) { timings.add(ti); } else { LogFactory.getLog(getClass()).debug( "Skip submeasurement timing info with no end time for " + subMeasurementName); } }
@Test public void absurdTimingWithClockIfKnown() throws InterruptedException { final long startTimeMilli = System.currentTimeMillis(); final long startTimeNano = System.nanoTime(); Thread.sleep(1);// sleep for 1 millisecond final long endTimeNano = System.nanoTime(); // absurdly swap the start/end times TimingInfo ti = TimingInfo.newTimingInfoFullSupport(startTimeMilli, endTimeNano, startTimeNano); assertTrue(ti.isStartEpochTimeMilliKnown()); assertTrue(ti.getStartTimeNano() > startTimeNano); assertTrue(ti.getStartEpochTimeMilliIfKnown().longValue() == startTimeMilli); assertTrue(ti.isEndTimeKnown()); assertTrue(ti.getEndTimeNanoIfKnown().longValue() < endTimeNano); long end_epoch_time = startTimeMilli + TimeUnit.NANOSECONDS.toMillis(startTimeNano - endTimeNano); assertTrue(ti.getEndEpochTimeMilliIfKnown().longValue() == end_epoch_time); assertTrue(ti.getEndEpochTimeMilliIfKnown().longValue() == ti.getEndEpochTimeMilli()); double double_diff = TimeUnit.NANOSECONDS.toMicros(startTimeNano - endTimeNano) / 1000.0; assertTrue(ti.getTimeTakenMillisIfKnown().doubleValue() == double_diff); long long_diff = TimeUnit.NANOSECONDS.toMillis(startTimeNano - endTimeNano); assertTrue(ti.getTimeTakenMillisIfKnown().longValue() == long_diff); }
@Test public void newTimingWithClockTimeIfKnown() throws InterruptedException { final long startTimeMilli = System.currentTimeMillis(); final long startTimeNano = System.nanoTime(); Thread.sleep(1);// sleep for 1 millisecond final long endTimeNano = System.nanoTime(); TimingInfo ti = TimingInfo.newTimingInfoFullSupport(startTimeMilli, startTimeNano, endTimeNano); assertTrue(ti.isStartEpochTimeMilliKnown()); assertTrue(ti.getStartTimeNano() == startTimeNano); assertTrue(ti.getStartEpochTimeMilliIfKnown().longValue() == startTimeMilli); assertTrue(ti.isEndTimeKnown()); assertTrue(ti.getEndTimeNanoIfKnown().longValue() > startTimeNano); assertTrue(ti.getEndEpochTimeMilliIfKnown().longValue() >= startTimeMilli); assertTrue(ti.getEndEpochTimeMilliIfKnown().longValue() == ti.getEndEpochTimeMilli()); assertTrue(ti.getTimeTakenMillisIfKnown().longValue() >= 0); }
@Test public void absurdTimingWithNoClockIfKnown() throws InterruptedException { final long startTimeNano = System.nanoTime(); Thread.sleep(1);// sleep for 1 millisecond final long endTimeNano = System.nanoTime(); // absurdly swap the start/end times TimingInfo ti = TimingInfo.newTimingInfoFullSupport(endTimeNano, startTimeNano); assertFalse(ti.isStartEpochTimeMilliKnown()); assertTrue(ti.getStartTimeNano() > startTimeNano); assertNull(ti.getStartEpochTimeMilliIfKnown()); assertTrue(ti.isEndTimeKnown()); assertTrue(ti.getEndTimeNanoIfKnown().longValue() < endTimeNano); assertNull(ti.getEndEpochTimeMilliIfKnown()); double double_diff = TimeUnit.NANOSECONDS.toMicros(startTimeNano - endTimeNano) / 1000.0; assertTrue(ti.getTimeTakenMillisIfKnown().doubleValue() == double_diff); long long_diff = TimeUnit.NANOSECONDS.toMillis(startTimeNano - endTimeNano); assertTrue(ti.getTimeTakenMillisIfKnown().longValue() == long_diff); }
@Test public void newTimingWithNoClockTimeIfKnown() throws InterruptedException { final long startTimeNano = System.nanoTime(); Thread.sleep(1);// sleep for 1 millisecond final long endTimeNano = System.nanoTime(); TimingInfo ti = TimingInfo.newTimingInfoFullSupport(startTimeNano, endTimeNano); assertFalse(ti.isStartEpochTimeMilliKnown()); assertTrue(ti.getStartTimeNano() == startTimeNano); assertNull(ti.getStartEpochTimeMilliIfKnown()); assertTrue(ti.isEndTimeKnown()); assertTrue(ti.getEndTimeNanoIfKnown().longValue() > startTimeNano); assertNull(ti.getEndEpochTimeMilliIfKnown()); assertTrue(ti.getTimeTakenMillisIfKnown().longValue() >= 0); }
@Test public void absurdTimingWithClock() throws InterruptedException { final long startTimeMilli = System.currentTimeMillis(); final long startTimeNano = System.nanoTime(); Thread.sleep(1);// sleep for 1 millisecond final long endTimeNano = System.nanoTime(); // absurdly swap the start/end times TimingInfo ti = TimingInfo.newTimingInfoFullSupport(startTimeMilli, endTimeNano, startTimeNano); assertTrue(ti.isStartEpochTimeMilliKnown()); assertTrue(ti.getStartTimeNano() > startTimeNano); assertTrue(ti.getStartEpochTimeMilli() == startTimeMilli); assertTrue(ti.isEndTimeKnown()); assertTrue(ti.getEndTimeNano() < endTimeNano); long end_epoch_time = startTimeMilli + TimeUnit.NANOSECONDS.toMillis(startTimeNano - endTimeNano); assertTrue(ti.getEndEpochTimeMilli() == end_epoch_time); assertTrue(ti.getEndTime() == ti.getEndEpochTimeMilli()); double double_diff = TimeUnit.NANOSECONDS.toMicros(startTimeNano - endTimeNano) / 1000.0; assertTrue(ti.getTimeTakenMillis() == double_diff); long long_diff = TimeUnit.NANOSECONDS.toMillis(startTimeNano - endTimeNano); assertTrue(ti.getElapsedTimeMillis() == long_diff); }
@Test public void startEndTimingIfKnown() { // Start timing final long startTimeNano = System.nanoTime(); final long startTimeMilli = System.currentTimeMillis(); TimingInfo ti = TimingInfo.startTimingFullSupport(); assertTrue(ti.isStartEpochTimeMilliKnown()); assertTrue(ti.getStartTimeNano() >= startTimeNano); assertTrue(ti.getStartEpochTimeMilliIfKnown().longValue() >= startTimeMilli); // End time is not known assertFalse(ti.isEndTimeKnown()); assertNull(ti.getEndTimeNanoIfKnown()); assertNull(ti.getEndEpochTimeMilliIfKnown()); assertNull(ti.getTimeTakenMillisIfKnown()); // End timing ti.endTiming(); assertTrue(ti.isEndTimeKnown()); assertTrue(ti.getEndTimeNanoIfKnown().longValue() >= startTimeNano); assertTrue(ti.getEndEpochTimeMilliIfKnown().longValue() >= startTimeMilli); assertTrue(ti.getEndEpochTimeMilli() == ti.getEndEpochTimeMilliIfKnown().longValue()); assertTrue(ti.getTimeTakenMillisIfKnown().longValue() >= 0); }
@Test public void absurdTimingWithNoClock() throws InterruptedException { final long startTimeNano = System.nanoTime(); Thread.sleep(1);// sleep for 1 millisecond final long endTimeNano = System.nanoTime(); // absurdly swap the start/end times TimingInfo ti = TimingInfo.newTimingInfoFullSupport(endTimeNano, startTimeNano); assertFalse(ti.isStartEpochTimeMilliKnown()); assertTrue(ti.getStartTimeNano() > startTimeNano); assertTrue(ti.getStartEpochTimeMilli() == UNKNOWN); assertTrue(ti.isEndTimeKnown()); assertTrue(ti.getEndTimeNano() < endTimeNano); assertTrue(ti.getEndEpochTimeMilli() == UNKNOWN); assertTrue(ti.getEndTime() == ti.getEndEpochTimeMilli()); double double_diff = TimeUnit.NANOSECONDS.toMicros(startTimeNano - endTimeNano) / 1000.0; assertTrue(ti.getTimeTakenMillis() == double_diff); long long_diff = TimeUnit.NANOSECONDS.toMillis(startTimeNano - endTimeNano); assertTrue(ti.getElapsedTimeMillis() == long_diff); }
@Test public void newTimingWithClockTime() throws InterruptedException { final long startTimeMilli = System.currentTimeMillis(); final long startTimeNano = System.nanoTime(); Thread.sleep(1);// sleep for 1 millisecond final long endTimeNano = System.nanoTime(); TimingInfo ti = TimingInfo.newTimingInfoFullSupport(startTimeMilli, startTimeNano, endTimeNano); assertTrue(ti.isStartEpochTimeMilliKnown()); assertTrue(ti.getStartTimeNano() == startTimeNano); assertTrue(ti.getStartEpochTimeMilli() == startTimeMilli); assertTrue(ti.isEndTimeKnown()); assertTrue(ti.getEndTimeNano() > startTimeNano); assertTrue(ti.getEndEpochTimeMilli() >= startTimeMilli); assertTrue(ti.getEndTime() == ti.getEndEpochTimeMilli()); assertTrue(ti.getTimeTakenMillis() >= 0); assertTrue(ti.getElapsedTimeMillis() >= 0); }
@Test public void newTimingWithNoClockTime() throws InterruptedException { final long startTimeNano = System.nanoTime(); Thread.sleep(1);// sleep for 1 millisecond final long endTimeNano = System.nanoTime(); TimingInfo ti = TimingInfo.newTimingInfoFullSupport(startTimeNano, endTimeNano); assertFalse(ti.isStartEpochTimeMilliKnown()); assertTrue(ti.getStartTimeNano() == startTimeNano); assertTrue(ti.getStartEpochTimeMilli() == UNKNOWN); assertTrue(ti.isEndTimeKnown()); assertTrue(ti.getEndTimeNano() > startTimeNano); assertTrue(ti.getEndEpochTimeMilli() == UNKNOWN); assertTrue(ti.getEndTime() == ti.getEndEpochTimeMilli()); assertTrue(ti.getTimeTakenMillis() >= 0); assertTrue(ti.getElapsedTimeMillis() >= 0); }