/*
* Copyright (c) 2015 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.systemservices.impl.logsvc.parse;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.junit.Ignore;
import org.junit.Test;
public class RegexPerformenceTest {
private static final String[] logs = {
"2014-01-16 19:00:01,519 [pool-35-thread-1] INFO DefaultSingletonBeanRegistry.java (line 433) Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@25f13769: defining beans [namespaces,scanner,registeredProfiles,reference-profile,profile-prop,profileProcessor,providerVersionSupport,resultClass-softwareIdentity,softwareIdentity-prop,softwareIdentityProcessor,system,resultClass-system,system-prop,scannerProcessor,model,reference-comp,resultClass-chassis,model-prop,modelProcessor,argscreator,smiutility,cimClient,block,commandgenerator,executor,null,bool,bool-true]; root of factory hierarchy",
"2014-01-16 18:58:24,025 [pool-10-thread-1] INFO ProcessMonitor.java (line 34) ",
"Memory Usage Metrics",
"Total Memory: 379MB;",
"Available Free Memory: 146MB;",
"Available Maximum Memory : 910MB;",
"Used Memory: 233MB;",
"Max used Memory : 366MB at 2014-01-01 23:03:24.025 UTC;",
"2014-01-16 07:12:47,336 [pool-44-thread-1] WARN StoragePortProcessor.java (line 135) Port Discovery failed for CLARiiON+APM00121500018+SP",
"java.lang.NullPointerException",
"at com.emc.storageos.volumecontroller.impl.plugins.discovery.smis.processor.StorageProcessor.checkStoragePortExistsInDB(StorageProcessor.java:230)",
"at com.emc.storageos.volumecontroller.impl.plugins.discovery.smis.processor.StoragePortProcessor.processResult(StoragePortProcessor.java:126)",
"at com.emc.storageos.plugins.common.Executor.processResult(Executor.java:147)",
"at com.emc.storageos.plugins.common.Executor.executeOperation(Executor.java:182)",
"at com.emc.storageos.plugins.common.Executor.execute(Executor.java:114)",
"at com.emc.storageos.volumecontroller.impl.plugins.SMICommunicationInterface.discover(SMICommunicationInterface.java:363)",
"at com.emc.storageos.volumecontroller.impl.plugins.discovery.smis.DataCollectionJobInvoker.invoke(DataCollectionJobInvoker.java:132)",
"at com.emc.storageos.volumecontroller.impl.plugins.discovery.smis.DataCollectionJobInvoker.process(DataCollectionJobInvoker.java:86)",
"at com.emc.storageos.volumecontroller.impl.plugins.discovery.smis.DataCollectionJobConsumer.invokeJob(DataCollectionJobConsumer.java:260)",
"at com.emc.storageos.volumecontroller.impl.plugins.discovery.smis.DataCollectionJobConsumer.consumeItem(DataCollectionJobConsumer.java:202)",
"at com.emc.storageos.volumecontroller.impl.plugins.discovery.smis.DataCollectionJobConsumer.consumeItem(DataCollectionJobConsumer.java:66)",
"at com.emc.storageos.coordinator.client.service.impl.DistributedQueueConsumer$1.run(DistributedQueueConsumer.java:66)",
"at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)",
"at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)",
"at java.lang.Thread.run(Thread.java:662)",
"2014-01-16 17:07:57,561 [LogLevelResetter] INFO LoggingMBean.java (line 322) Starting log level config reset, lastResetTime = 0",
};
private static final Pattern REGEX1 = Pattern
.compile("^(\\d{4})-(\\d{2})-(\\d{2}) (\\d{2}):(\\d{2}):(\\d{2})\\,(\\d{3}) (.+?) (.+?) (.+?) ((.+?) (.+?))\\s+(.*)$");
private static final Pattern REGEX2 = Pattern
.compile("^(\\d{4})-(\\d{2})-(\\d{2}) (\\d{2}):(\\d{2}):(\\d{2})\\,(\\d{3}) (\\S+?)\\s{1,2}+(\\S+?)\\s{1,2}+(\\S+?) ((\\S+?) (\\S+?))\\s+(.*)$");
@Test
// @Ignore
public
void testRegexPerformance() {
System.out.println("starting testRegexPerformance");
long startTime = System.nanoTime();
for (int i = 0; i < 10000000; i++) {
for (String log : logs) {
REGEX1.matcher(log);
}
}
long endTime = System.nanoTime();
System.out.println("Total used " + (endTime - startTime) + " nanoseconds");
System.out.println("done testRegexPerformance");
}
@Test
// @Ignore
public
void testRegexPerformance2() {
System.out.println("starting testRegexPerformance2");
long startTime = System.nanoTime();
for (int i = 0; i < 10000000; i++) {
for (String log : logs) {
REGEX2.matcher(log);
}
}
long endTime = System.nanoTime();
System.out.println("Total used " + (endTime - startTime) + " nanoseconds");
System.out.println("done testRegexPerformanc2");
}
@Test
@Ignore
public void testRegexCorrectness() {
System.out.println("starting testRegexCorrectness");
for (String log : logs) {
Matcher m = REGEX2.matcher(log);
if (m.matches()) {
System.out.println("match!");
int year = Integer.valueOf(m.group(1));
int month = Integer.valueOf(m.group(2));
int days = Integer.valueOf(m.group(3));
int hours = Integer.valueOf(m.group(4));
int mins = Integer.valueOf(m.group(5));
int secs = Integer.valueOf(m.group(6));
int msecs = Integer.valueOf(m.group(7));
System.out.println(year + "-" + month + "-" + days + "-" +
hours + "-" + mins + "-" + secs + "-" + msecs);
String thread = m.group(8);
thread = thread == null ? null : thread.trim();
System.out.println("Thread " + thread);
String level = m.group(9);
level = level == null ? null : level.trim();
System.out.println("level " + level);
String process = m.group(10);
process = process == null ? null : process.trim();
System.out.println("process " + process);
String lineNo = m.group(13);
System.out.println(lineNo);
String msg = m.group(14);
if (msg == null || msg.trim().length() == 0) {
msg = "";
} else {
msg = msg.trim();
}
System.out.println("msg " + msg);
} else {
System.out.println("does not match");
}
}
}
}