private int encodeRecords(final Collection<IMonitoringRecord> records, final ByteBuffer buffer, final IRegistry<String> stringRegistry) { final int offsetBefore = buffer.position(); for (final IMonitoringRecord record : records) { // Since writeBytes does not contain the type name and the logging timestamp, // these two fields must be serialized separately final String typeName = record.getClass().getName(); final int typeNameId = stringRegistry.get(typeName); buffer.putInt(typeNameId); buffer.putLong(record.getLoggingTimestamp()); record.serialize(DefaultValueSerializer.create(buffer, stringRegistry)); } final int offsetAfter = buffer.position(); return (offsetAfter - offsetBefore); }
private int encodeRecords(final Collection<IMonitoringRecord> records, final ByteBuffer buffer, final IWriterRegistry<String> writerRegistry) { final int offsetBefore = buffer.position(); for (final IMonitoringRecord record : records) { // Since writeBytes does not contain the type name and the logging timestamp, // these two fields must be serialized separately final String typeName = record.getClass().getName(); final int typeNameId = writerRegistry.getId(typeName); buffer.putInt(typeNameId); buffer.putLong(record.getLoggingTimestamp()); record.serialize(BinaryValueSerializer.create(buffer, writerRegistry)); } final int offsetAfter = buffer.position(); return (offsetAfter - offsetBefore); }
@Override public void serialize(final IMonitoringRecord record, final int id) throws IOException { final String header = String.format("$%d;%d", id, record.getLoggingTimestamp()); this.buffer.put(header); record.serialize(this.serializer); this.buffer.put(LINE_SEPARATOR); this.buffer.flip(); try { while (this.buffer.hasRemaining()) { this.numOfBytes += this.outputChannel.write(this.charset.encode(this.buffer)); } this.numOfEntries++; this.buffer.clear(); if (this.flushLogFile) { this.serializedStream.flush(); } } catch (final IOException e) { LOGGER.error("Caught exception while writing to the channel.", e); WriterUtil.close(this.outputChannel, LOGGER); } }
@Override public void writeMonitoringRecord(final IMonitoringRecord record) { final String recordClassName = record.getClass().getName(); this.writerRegistry.register(recordClassName); final PrintWriter fileWriter = this.fileWriterPool.getFileWriter(); this.buffer.clear(); fileWriter.print('$'); fileWriter.print(this.writerRegistry.getId(recordClassName)); fileWriter.print(';'); fileWriter.print(record.getLoggingTimestamp()); record.serialize(this.serializer); this.buffer.flip(); fileWriter.print(this.buffer.toString()); fileWriter.println(); if (this.flush) { fileWriter.flush(); } }
@Override public void serialize(final IMonitoringRecord record, final int id) throws IOException { this.requestBufferSpace(4 + 8 + record.getSize()); this.buffer.putInt(id); this.buffer.putLong(record.getLoggingTimestamp()); record.serialize(this.serializer); this.numOfEntries++; }
@Override public void writeMonitoringRecord(final IMonitoringRecord monitoringRecord) { // monitoringRecord.registerStrings(this.registerStringsAdapter); final ByteBuffer recordBuffer = this.buffer; final int requiredBufferSize = SIZE_OF_ENVELOPE + 4 + 8 + monitoringRecord.getSize(); if (recordBuffer.capacity() < requiredBufferSize) { throw new IllegalStateException("Insufficient buffer capacity for string registry data"); } // register monitoringRecord class name final String recordClassName = monitoringRecord.getClass().getName(); this.writerRegistry.register(recordClassName); // Prepend envelope data recordBuffer.put(REGULAR_RECORD_ID); recordBuffer.putLong(this.writerRegistry.getId()); // serialized monitoringRecord recordBuffer.putInt(this.writerRegistry.getId(recordClassName)); recordBuffer.putLong(monitoringRecord.getLoggingTimestamp()); monitoringRecord.serialize(BinaryValueSerializer.create(recordBuffer, this.writerRegistry)); this.publishBuffer(recordBuffer); }
@Override public void writeMonitoringRecord(final IMonitoringRecord monitoringRecord) { final ByteBuffer buffer = this.recordBuffer; final int requiredBufferSize = 4 + 8 + monitoringRecord.getSize(); if (requiredBufferSize > buffer.remaining()) { WriterUtil.flushBuffer(buffer, this.monitoringRecordChannel, LOG); } final String recordClassName = monitoringRecord.getClass().getName(); this.serializer.putString(recordClassName); this.serializer.putLong(monitoringRecord.getLoggingTimestamp()); monitoringRecord.serialize(this.serializer); if (this.flush) { WriterUtil.flushBuffer(buffer, this.monitoringRecordChannel, LOG); } }
@Override public void writeMonitoringRecord(final IMonitoringRecord monitoringRecord) { monitoringRecord.registerStrings(this.registerStringsAdapter); final ByteBuffer recordBuffer = this.buffer; final int requiredBufferSize = SIZE_OF_ENVELOPE + 4 + 8 + monitoringRecord.getSize(); if (recordBuffer.capacity() < requiredBufferSize) { throw new IllegalStateException("Insufficient buffer capacity for string registry data"); } // register monitoringRecord class name final String recordClassName = monitoringRecord.getClass().getName(); this.writerRegistry.register(recordClassName); // Prepend envelope data recordBuffer.put(REGULAR_RECORD_ID); recordBuffer.putLong(this.writerRegistry.getId()); // serialized monitoringRecord recordBuffer.putInt(this.writerRegistry.getId(recordClassName)); recordBuffer.putLong(monitoringRecord.getLoggingTimestamp()); monitoringRecord.serialize(DefaultValueSerializer.create(recordBuffer, this.writeBytesAdapter)); this.publishBuffer(recordBuffer); }
@Override public void writeMonitoringRecord(final IMonitoringRecord monitoringRecord) { final ByteBuffer buffer = this.recordBuffer; final int requiredBufferSize = 4 + 8 + monitoringRecord.getSize(); if (requiredBufferSize > buffer.remaining()) { WriterUtil.flushBuffer(buffer, this.monitoringRecordChannel, LOGGER); } final String recordClassName = monitoringRecord.getClass().getName(); this.serializer.putString(recordClassName); this.serializer.putLong(monitoringRecord.getLoggingTimestamp()); monitoringRecord.serialize(this.serializer); if (this.flush) { WriterUtil.flushBuffer(buffer, this.monitoringRecordChannel, LOGGER); } }
@Override public void writeMonitoringRecord(final IMonitoringRecord monitoringRecord) { final ByteBuffer buffer = this.recordBuffer; final int requiredBufferSize = 4 + 8 + monitoringRecord.getSize(); if (requiredBufferSize > buffer.remaining()) { WriterUtil.flushBuffer(buffer, this.monitoringRecordChannel, LOG); } final String recordClassName = monitoringRecord.getClass().getName(); this.serializer.putString(recordClassName); this.serializer.putLong(monitoringRecord.getLoggingTimestamp()); monitoringRecord.serialize(this.serializer); if (this.flush) { WriterUtil.flushBuffer(buffer, this.monitoringRecordChannel, LOG); } }
@Override public void writeMonitoringRecord(final IMonitoringRecord monitoringRecord) { final PooledFileChannel channel = this.fileWriterPool.getFileWriter(this.buffer); monitoringRecord.registerStrings(this.registerStringsAdapter); final ByteBuffer recordBuffer = this.buffer; if ((4 + 8 + monitoringRecord.getSize()) > recordBuffer.remaining()) { channel.flush(recordBuffer, LOG); } final String recordClassName = monitoringRecord.getClass().getName(); this.writerRegistry.register(recordClassName); recordBuffer.putInt(this.writerRegistry.getId(recordClassName)); recordBuffer.putLong(monitoringRecord.getLoggingTimestamp()); monitoringRecord.serialize(DefaultValueSerializer.create(recordBuffer, this.writeBytesAdapter)); if (this.flush) { channel.flush(recordBuffer, LOG); } }
@Override public void writeMonitoringRecord(final IMonitoringRecord monitoringRecord) { final ByteBuffer recordBuffer = this.buffer; if ((4 + 8 + monitoringRecord.getSize()) > recordBuffer.remaining()) { // Always flush the registryBuffer before flushing the recordBuffer. Otherwise // the monitoring records could arrive before their string records WriterUtil.flushBuffer(this.registryBuffer, this.socketChannel, LOGGER); WriterUtil.flushBuffer(recordBuffer, this.socketChannel, LOGGER); } final String recordClassName = monitoringRecord.getClass().getName(); this.serializer.putString(recordClassName); this.serializer.putLong(monitoringRecord.getLoggingTimestamp()); monitoringRecord.serialize(this.serializer); if (this.flush) { // Always flush the registryBuffer before flushing the recordBuffer. Otherwise // the monitoring records could arrive before their string records WriterUtil.flushBuffer(this.registryBuffer, this.socketChannel, LOGGER); WriterUtil.flushBuffer(recordBuffer, this.socketChannel, LOGGER); } }
@Override public void writeMonitoringRecord(final IMonitoringRecord monitoringRecord) { final ByteBuffer recordBuffer = this.buffer; if ((4 + 8 + monitoringRecord.getSize()) > recordBuffer.remaining()) { // Always flush the registryBuffer before flushing the recordBuffer. // Otherwise the monitoring records could arrive before their string // records WriterUtil.flushBuffer(this.registryBuffer, this.socketChannel, LOG); WriterUtil.flushBuffer(recordBuffer, this.socketChannel, LOG); } final String recordClassName = monitoringRecord.getClass().getName(); this.serializer.putString(recordClassName); this.serializer.putLong(monitoringRecord.getLoggingTimestamp()); monitoringRecord.serialize(this.serializer); if (this.flush) { // Always flush the registryBuffer before flushing the recordBuffer. // Otherwise the monitoring records could arrive before their string // records WriterUtil.flushBuffer(this.registryBuffer, this.socketChannel, LOG); WriterUtil.flushBuffer(recordBuffer, this.socketChannel, LOG); } }