/** * Record an occurrence, this is just short-hand for {@link #record(double) record(1.0)} */ public void record() { if (shouldRecord()) { record(1.0); } }
/** * Record a value with this sensor * @param value The value to record * @throws QuotaViolationException if recording this value moves a metric beyond its configured maximum or minimum * bound */ public void record(double value) { if (shouldRecord()) { record(value, time.milliseconds()); } }
public void record(double value, long timeMs, boolean checkQuotas) { if (shouldRecord()) { this.lastRecordTime = timeMs; synchronized (this) { synchronized (metricLock()) { // increment all the stats for (Stat stat : this.stats) stat.record(config, value, timeMs); } if (checkQuotas) checkQuotas(timeMs); } for (Sensor parent : parents) parent.record(value, timeMs, checkQuotas); } }
@Test public void testShouldRecord() { MetricConfig debugConfig = new MetricConfig().recordLevel(Sensor.RecordingLevel.DEBUG); MetricConfig infoConfig = new MetricConfig().recordLevel(Sensor.RecordingLevel.INFO); Sensor infoSensor = new Sensor(null, "infoSensor", null, debugConfig, new SystemTime(), 0, Sensor.RecordingLevel.INFO); assertTrue(infoSensor.shouldRecord()); infoSensor = new Sensor(null, "infoSensor", null, debugConfig, new SystemTime(), 0, Sensor.RecordingLevel.DEBUG); assertTrue(infoSensor.shouldRecord()); Sensor debugSensor = new Sensor(null, "debugSensor", null, infoConfig, new SystemTime(), 0, Sensor.RecordingLevel.INFO); assertTrue(debugSensor.shouldRecord()); debugSensor = new Sensor(null, "debugSensor", null, infoConfig, new SystemTime(), 0, Sensor.RecordingLevel.DEBUG); assertFalse(debugSensor.shouldRecord()); }
@Override public void flush() { if (flushTime.shouldRecord()) { measureLatency( () -> { inner.flush(); return null; }, flushTime); } else { inner.flush(); } }
@Override public void putAll(final List<KeyValue<K, V>> entries) { if (putAllTime.shouldRecord()) { measureLatency( () -> { inner.putAll(innerEntries(entries)); return null; }, putAllTime); } else { inner.putAll(innerEntries(entries)); } }
@Override public V get(final K key) { try { if (getTime.shouldRecord()) { return measureLatency(() -> outerValue(inner.get(Bytes.wrap(serdes.rawKey(key)))), getTime); } else { return outerValue(inner.get(Bytes.wrap(serdes.rawKey(key)))); } } catch (final ProcessorStateException e) { final String message = String.format(e.getMessage(), key); throw new ProcessorStateException(message, e); } }
@Override public V delete(final K key) { try { if (deleteTime.shouldRecord()) { return measureLatency(() -> outerValue(inner.delete(Bytes.wrap(serdes.rawKey(key)))), deleteTime); } else { return outerValue(inner.delete(Bytes.wrap(serdes.rawKey(key)))); } } catch (final ProcessorStateException e) { final String message = String.format(e.getMessage(), key); throw new ProcessorStateException(message, e); } }
@Override public void put(final K key, final V value) { try { if (putTime.shouldRecord()) { measureLatency(() -> { inner.put(Bytes.wrap(serdes.rawKey(key)), serdes.rawValue(value)); return null; }, putTime); } else { inner.put(Bytes.wrap(serdes.rawKey(key)), serdes.rawValue(value)); } } catch (final ProcessorStateException e) { final String message = String.format(e.getMessage(), key, value); throw new ProcessorStateException(message, e); } }
@Override public V putIfAbsent(final K key, final V value) { if (putIfAbsentTime.shouldRecord()) { return measureLatency( () -> outerValue(inner.putIfAbsent(Bytes.wrap(serdes.rawKey(key)), serdes.rawValue(value))), putIfAbsentTime); } else { return outerValue(inner.putIfAbsent(Bytes.wrap(serdes.rawKey(key)), serdes.rawValue(value))); } }
if (restoreTime.shouldRecord()) { measureLatency( () -> {