/* * Copyright (c) 2014 EMC Corporation * All Rights Reserved */ package com.emc.storageos.systemservices.impl.logsvc.performance; import java.io.BufferedOutputStream; import java.io.PipedInputStream; import java.io.PipedOutputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.junit.BeforeClass; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.emc.storageos.systemservices.impl.logsvc.LogMessage; import com.emc.storageos.systemservices.impl.logsvc.stream.LogNetworkReader; import com.emc.storageos.systemservices.impl.logsvc.LogNetworkWriter; import com.emc.storageos.systemservices.impl.logsvc.LogStatusInfo; import com.emc.storageos.systemservices.impl.logsvc.LogSvcPropertiesLoader; import com.emc.vipr.model.sys.logging.LogRequest; public class LogNetworkReaderPerfTest { private static final Logger log = LoggerFactory.getLogger(LogNetworkReaderPerfTest.class); private static volatile LogSvcPropertiesLoader propertiesLoader; @BeforeClass public static void setup() { propertiesLoader = new LogSvcPropertiesLoader() { public List<String> getLogFilePaths() { return Arrays.asList("/opt/storageos/logs/testData/*.log"); } public List<String> getExcludedLogFilePaths() { return Arrays.asList("/opt/storageos/logs/*native.log"); } }; } @Test public void testPerformance() throws Exception { List<String> svcs = new ArrayList<String>() { { add("controllersvc"); add("coordinatorsvc"); add("apisvc"); } }; int bufSize = 1024 * 64; LogRequest req = new LogRequest.Builder().baseNames(svcs).build(); final LogNetworkWriter writer = new LogNetworkWriter(req, propertiesLoader); try (final PipedOutputStream out = new PipedOutputStream(); final BufferedOutputStream outputStream = new BufferedOutputStream(out, bufSize); final PipedInputStream inputStream = new PipedInputStream(out)) { LogNetworkReader reader = new LogNetworkReader("vipr1","vipr1", inputStream, new LogStatusInfo()); long totalSize = 0; long startTime = System.nanoTime(); new Thread( new Runnable() { public void run() { try { writer.write(outputStream); } catch (Exception e) { e.printStackTrace(); // NOSONAR // ("squid:S1148 suppress sonar warning on printStackTrace. It's a test case and exceptions are meant to be printed to stdout/stderr") } } }).start(); LogMessage log = null; while ((log = reader.readNextLogMessage()) != null) { totalSize += log.toStringOriginalFormat().getBytes().length; } long endTime = System.nanoTime(); totalSize /= (1024L * 1024L); double elapsedTime = (double) (endTime - startTime) / 1000000000.0; System.out.println("Total read " + totalSize + " MB;" + " Used " + elapsedTime + " sec; Average " + (totalSize / elapsedTime) + " MB/sec."); } } }