private DistinctObservation newObservation(final long timestamp, final Throwable observation) { final StringWriter stringWriter = new StringWriter(); observation.printStackTrace(new PrintWriter(stringWriter)); final byte[] encodedError = stringWriter.toString().getBytes(UTF_8); final int length = ENCODED_ERROR_OFFSET + encodedError.length; final int offset = nextOffset; if ((offset + length) > buffer.capacity()) { return INSUFFICIENT_SPACE; } buffer.putBytes(offset + ENCODED_ERROR_OFFSET, encodedError); buffer.putLong(offset + FIRST_OBSERVATION_TIMESTAMP_OFFSET, timestamp); nextOffset = align(offset + length, RECORD_ALIGNMENT); final DistinctObservation distinctObservation = new DistinctObservation(observation, offset); distinctObservations = prepend(distinctObservations, distinctObservation); buffer.putIntOrdered(offset + LENGTH_OFFSET, length); return distinctObservation; }
private DistinctObservation newObservation(final long timestamp, final Throwable observation) { final StringWriter stringWriter = new StringWriter(); observation.printStackTrace(new PrintWriter(stringWriter)); final byte[] encodedError = stringWriter.toString().getBytes(UTF_8); final int length = ENCODED_ERROR_OFFSET + encodedError.length; final int offset = nextOffset; if ((offset + length) > buffer.capacity()) { return INSUFFICIENT_SPACE; } buffer.putBytes(offset + ENCODED_ERROR_OFFSET, encodedError); buffer.putLong(offset + FIRST_OBSERVATION_TIMESTAMP_OFFSET, timestamp); nextOffset = align(offset + length, RECORD_ALIGNMENT); final DistinctObservation distinctObservation = new DistinctObservation(observation, offset); distinctObservations = prepend(distinctObservations, distinctObservation); buffer.putIntOrdered(offset + LENGTH_OFFSET, length); return distinctObservation; }
private DistinctObservation newObservation( final long timestamp, final DistinctObservation[] existingObservations, final Throwable observation) { DistinctObservation existingObservation = null; if (existingObservations != distinctObservations) { existingObservation = find(distinctObservations, observation); } if (null == existingObservation) { final StringWriter stringWriter = new StringWriter(); observation.printStackTrace(new PrintWriter(stringWriter)); final byte[] encodedError = stringWriter.toString().getBytes(UTF_8); final int length = ENCODED_ERROR_OFFSET + encodedError.length; final int offset = nextOffset; if ((offset + length) > buffer.capacity()) { return INSUFFICIENT_SPACE; } buffer.putBytes(offset + ENCODED_ERROR_OFFSET, encodedError); buffer.putLong(offset + FIRST_OBSERVATION_TIMESTAMP_OFFSET, timestamp); nextOffset = align(offset + length, RECORD_ALIGNMENT); existingObservation = new DistinctObservation(observation, offset); distinctObservations = prepend(distinctObservations, existingObservation); buffer.putIntOrdered(offset + LENGTH_OFFSET, length); } return existingObservation; }