/* * Copyright (c) 2014 EMC Corporation * All Rights Reserved */ package com.emc.storageos.systemservices.impl.logsvc; import java.io.BufferedOutputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.OutputStream; import org.apache.commons.compress.compressors.CompressorException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.emc.storageos.systemservices.impl.logsvc.merger.LogStreamMerger; import com.emc.vipr.model.sys.logging.LogRequest; public class LogNetworkWriter { private LogStreamMerger merger; // Logger reference. private static final Logger logger = LoggerFactory.getLogger(LogNetworkWriter.class); public LogNetworkWriter(LogRequest req, LogSvcPropertiesLoader propertiesLoader) { this.merger = new LogStreamMerger(req, propertiesLoader); } public void write(OutputStream outputStream) throws IOException { logger.trace("LogNetworkWriter.write()"); LogMessage log; int testLogCount = 0; try (BufferedOutputStream bos = new BufferedOutputStream(outputStream, LogConstants.BUFFER_SIZE); DataOutputStream dos = new DataOutputStream(bos)) { while (true) { if (!merger.getStatus().isEmpty()) { LogStatusInfo status = merger.getStatus(); status.write(dos); } if ((log = merger.readNextMergedLogMessage()) != null) { dos.write(LogACKCode.ACK_LOG_ENTRY); log.write(dos); testLogCount++; } else { break; } } logger.debug("testLogCount={}", testLogCount); dos.write(LogACKCode.ACK_FIN); dos.flush(); } catch (CompressorException e) { logger.error("Exception in write:", e); } } }