/* * Copyright (c) 2014 EMC Corporation * All Rights Reserved */ package com.emc.storageos.systemservices.impl.logsvc.performance; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.Date; import java.util.List; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; import com.emc.storageos.systemservices.impl.logsvc.LogSvcPropertiesLoader; import com.emc.storageos.systemservices.impl.logsvc.LogMessage; import com.emc.storageos.systemservices.impl.logsvc.merger.LogStreamMerger; import com.emc.vipr.model.sys.logging.LogRequest; public class LogStreamMergerPerfTest { 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 @Ignore public void testMergePerformanceTimeRangeFilter() throws Exception { List<String> svcs = new ArrayList<String>() { { add("controllersvc"); add("coordinatorsvc"); add("apisvc"); } }; Calendar calendar = Calendar.getInstance(); calendar.set(2013, 10, 20, 16, 38, 16); Date startTimeFilter = calendar.getTime(); calendar.set(2014, 0, 16, 16, 38, 0); Date endTimeFilter = calendar.getTime(); LogRequest req = new LogRequest.Builder().startTime(startTimeFilter).endTime(endTimeFilter) .baseNames(svcs).build(); LogStreamMerger merger = new LogStreamMerger(req, propertiesLoader); long startTime = System.nanoTime(); while (true) { LogMessage log = merger.readNextMergedLogMessage(); if (log == null) { break; } } long endTime = System.nanoTime(); int num = merger.getStreamList().length; long totalSize = 0; for (int i = 0; i < num; i++) { totalSize += merger.getStreamList()[i].getTotalSizeCount(); } totalSize = totalSize / (1024L * 1024L); double elapsedTime = (double) (endTime - startTime) / 1000000000.0; System.out.println("Performance with time range filter"); System.out.println("Total read " + totalSize + " MB;" + " Average " + (totalSize / elapsedTime) + " MB/sec."); } @Test @Ignore public void testMergePerformanceMultipleFilters() throws Exception { List<String> svcs = new ArrayList<String>() { { add("controllersvc"); add("coordinatorsvc"); add("apisvc"); } }; String pattern = "Memory"; Calendar calendar = Calendar.getInstance(); calendar.set(2013, 10, 20, 16, 38, 16); Date startTimeFilter = calendar.getTime(); calendar.set(2014, 0, 16, 16, 38, 0); Date endTimeFilter = calendar.getTime(); LogRequest req = new LogRequest.Builder().startTime(startTimeFilter).endTime(endTimeFilter) .logLevel(7).regex(pattern).baseNames(svcs).build(); LogStreamMerger merger = new LogStreamMerger(req, propertiesLoader); long startTime = System.nanoTime(); while (true) { LogMessage log = merger.readNextMergedLogMessage(); if (log == null) { break; } } long endTime = System.nanoTime(); int num = merger.getStreamList().length; long totalSize = 0; for (int i = 0; i < num; i++) { totalSize += merger.getStreamList()[i].getTotalSizeCount(); } totalSize = totalSize / (1024L * 1024L); double elapsedTime = (double) (endTime - startTime) / 1000000000.0; System.out.println("Performance with time, level, pattern filters"); System.out.println("Total read " + totalSize + " MB;" + " Average " + (totalSize / elapsedTime) + " MB/sec."); } @Test public void testMergePerformance() throws Exception { List<String> svcs = new ArrayList<String>() { { add("controllersvc"); add("coordinatorsvc"); add("apisvc"); } }; LogRequest req = new LogRequest.Builder().baseNames(svcs).build(); LogStreamMerger merger = new LogStreamMerger(req, propertiesLoader); long startTime = System.nanoTime(); while (true) { LogMessage log = merger.readNextMergedLogMessage(); if (log == null) { break; } } long endTime = System.nanoTime(); int num = merger.getStreamList().length; long totalSize = 0; for (int i = 0; i < num; i++) { totalSize += merger.getStreamList()[i].getTotalSizeCount(); } totalSize = 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."); } }