private void run() throws IOException, FlumeException,
EventDeliveryException {
LineReader reader = null;
RpcClient rpcClient = RpcClientFactory.getDefaultInstance(hostname, port,
BATCH_SIZE);
try {
if (fileName != null) {
reader = new BufferedLineReader(new FileReader(new File(fileName)));
} else if (dirName != null) {
reader = new SpoolingFileLineReader(new File(dirName), ".COMPLETED",
BATCH_SIZE, MAX_LINE_LENGTH);
}
else {
reader = new BufferedLineReader(new InputStreamReader(System.in));
}
long lastCheck = System.currentTimeMillis();
long sentBytes = 0;
int batchSize = rpcClient.getBatchSize();
List<String> lines = Lists.newLinkedList();
while (!(lines = reader.readLines(batchSize)).isEmpty()) {
List<Event> eventBuffer = Lists.newArrayList();
for (String line : lines) {
Event event = EventBuilder.withBody(line, Charsets.UTF_8);
setHeaders(event);
eventBuffer.add(event);
sentBytes += event.getBody().length;
sent++;
long now = System.currentTimeMillis();
if (now >= lastCheck + 5000) {
logger.debug("Packed {} bytes, {} events", sentBytes, sent);
lastCheck = now;
}
}
rpcClient.appendBatch(eventBuffer);
}
logger.debug("Finished");
} finally {
if (reader != null) {
logger.debug("Closing reader");
reader.close();
}
logger.debug("Closing RPC client");
rpcClient.close();
}
}