/* * Copyright (c) 2014 EMC Corporation * All Rights Reserved */ package com.emc.storageos.systemservices.impl.logsvc.performance; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import org.junit.Ignore; import org.junit.Test; import com.emc.storageos.systemservices.impl.logsvc.stream.LogFileStream; import com.emc.storageos.systemservices.impl.logsvc.LogMessage; import com.emc.storageos.systemservices.impl.logsvc.LogStatusInfo; import com.emc.storageos.systemservices.impl.logsvc.util.LogUtil; import com.emc.vipr.model.sys.logging.LogRequest; public class LogStreamPerfTest { /** * Test performance without filter */ @Test @Ignore public void testPerformanceNoFilter() throws Exception { System.out.println("starting testPerformanceNoFilter"); String svcName = "bigFile-dbsvc"; LogRequest req = new LogRequest.Builder().build(); LogStatusInfo status = new LogStatusInfo(); LogFileStream stream = new LogFileStream(svcName, new ArrayList<File>(), req, status); long startTime = 0; long endTime = 0; startTime = System.nanoTime(); while (true) { LogMessage log = stream.readNextLogMessage(); if (log == null) { endTime = System.nanoTime(); break; } } double fileSize = (double) stream.getTotalSizeCount() / (1024L * 1024L); double elapsedTime = (double) (endTime - startTime) / 1000000000.0; double speed = fileSize / elapsedTime; // System.out.println("Total files size(after compressed) is " + // fileSize + "MB. Log messages count is " // + stream.getTotalLogCount()); // System.out.println("Speed of LogStream without Filter is: " + speed // + " MB/sed"); System.out .println("Total files size(after decompressing) is 4286.8 MB. Log messages count is " + stream.getTotalLogCount()); System.out.println("Speed of LogStream without Filter is: " + 4286.8 / elapsedTime + " MB/sec and " + stream.getTotalLogCount() / elapsedTime + " logs/sec"); System.out.println("done testPerformanceNoFilter"); } /** * Test performance without filter */ @Test @Ignore public void testReadCompressedFilePerformance() throws Exception { System.out.println("starting testReadCompressedFilePerformance"); List<String> fileNames = new ArrayList<String>(); fileNames .add("/data/shared-logging/internalLibraries/logging/src/main/data/streamData/bigFile-dbsvc.log.20131120-163815.gz"); fileNames .add("/data/shared-logging/internalLibraries/logging/src/main/data/streamData/bigFile-dbsvc.log.20131120-163816.gz"); fileNames .add("/data/shared-logging/internalLibraries/logging/src/main/data/streamData/bigFile-dbsvc.log.20131120-163817.gz"); fileNames .add("/data/shared-logging/internalLibraries/logging/src/main/data/streamData/bigFile-dbsvc.log.20131120-163818.gz"); fileNames .add("/data/shared-logging/internalLibraries/logging/src/main/data/streamData/bigFile-dbsvc.log.20140116-091650.gz"); fileNames .add("/data/shared-logging/internalLibraries/logging/src/main/data/streamData/bigFile-dbsvc.log.20140116-181956.gz"); fileNames .add("/data/shared-logging/internalLibraries/logging/src/main/data/streamData/bigFile-dbsvc.log"); BufferedReader reader = null; long startTime = System.nanoTime(); for (String file : fileNames) { System.out.println("Reading " + file); if (LogUtil.logFileZipped(file)) { reader = LogUtil.getBufferedReaderForBZ2File(file); } else { reader = new BufferedReader(new FileReader(file)); } while (true) { String line = reader.readLine(); if (line == null) { break; } } } long endTime = System.nanoTime(); reader.close(); double elapsedTime = (double) (endTime - startTime) / 1000000000.0; System.out .println("Total files size(after decompressed) is 4286.8 MB."); System.out.println("Speed of reading compressed file is: " + 4286.8 / elapsedTime + " MB/sec"); System.out.println("done testReadCompressedFilePerformance"); } /** * Test performance with time range filter */ @Test @Ignore public void testPerformanceTimeFilter() throws Exception { System.out.println("starting testPerformanceTimeFilter"); String svcName = "bigFile-dbsvc"; 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).build(); LogStatusInfo status = new LogStatusInfo(); LogFileStream stream = new LogFileStream(svcName, new ArrayList<File>(), req, status); long startTime = 0; long endTime = 0; startTime = System.nanoTime(); while (true) { LogMessage log = stream.readNextLogMessage(); if (log == null) { endTime = System.nanoTime(); break; } } double fileSize = (double) stream.getTotalSizeCount() / (1024L * 1024L); double elapsedTime = (double) (endTime - startTime) / 1000000000.0; double speed = fileSize / elapsedTime; System.out.println("Total files size is " + fileSize + "MB. Log messages count is " + stream.getTotalLogCount()); System.out.println("Speed of LogStream with time range Filter is: " + speed + " Mbs"); System.out .println("Total files size(after decompressing) is 3436.7 MB. Log messages count is " + stream.getTotalLogCount()); System.out.println("Speed of LogStream with time filter is: " + 3436.7 / elapsedTime + " MB/sec"); System.out.println("done testPerformanceTimeFilter"); } /** * Test performance with time, level and pattern filters, the speed should * be faster than 50 Mbs */ @Test @Ignore public void testPerformanceMultipleFilters() throws Exception { System.out.println("starting testPerformanceMultipleFilters"); String svcName = "bigFile-dbsvc"; 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).build(); LogStatusInfo status = new LogStatusInfo(); LogFileStream stream = new LogFileStream(svcName, new ArrayList<File>(), req, status); long startTime = 0; long endTime = 0; startTime = System.nanoTime(); while (true) { LogMessage log = stream.readNextLogMessage(); if (log == null) { endTime = System.nanoTime(); break; } } double fileSize = (double) stream.getTotalSizeCount() / (1024L * 1024L); double elapsedTime = (double) (endTime - startTime) / 1000000000.0; double speed = fileSize / elapsedTime; System.out.println("Total files size is " + fileSize + "MB. Log messages count is " + stream.getTotalLogCount()); System.out.println("Speed of LogStream with multiple Filters is: " + speed + " Mbs"); System.out .println("Total files size(after decompressing) is 3436.7 MB. Log messages count is " + stream.getTotalLogCount()); System.out.println("Speed of LogStream with multiple Filters is: " + 3436.7 / elapsedTime + " MB/sec"); System.out.println("done testPerformanceMultipleFilters"); } @Test public void testPerformance() throws Exception { List<File> files = new ArrayList<>(); files.add(new File("/opt/storageos/logs/testData/controllersvc.log")); files.add(new File("/opt/storageos/logs/testData/controllersvc.log.20131120-163817.gz")); LogRequest req = new LogRequest.Builder().build(); LogStatusInfo status = new LogStatusInfo(); LogFileStream stream = new LogFileStream("", files, req, status); long startTime = 0; long endTime = 0; startTime = System.nanoTime(); while (true) { LogMessage log = stream.readNextLogMessage(); if (log == null) { endTime = System.nanoTime(); break; } } double elapsedTime = (double) (endTime - startTime) / 1000000000.0; double speed = 1510.8 / elapsedTime; System.out.println("Total read 1510.8 MB; Used " + elapsedTime + " sec; Average " + speed + " MB/sec."); } }