package me.chanjar.tomcat.valves; import java.net.UnknownHostException; import org.apache.catalina.Valve; import org.apache.catalina.startup.Tomcat; import org.apache.catalina.valves.AccessLogValve; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.junit.Test; import me.chanjar.tomcat.util.PostGenerator; import com.mongodb.DB; import com.mongodb.MongoClient; import com.mongodb.MongoClientURI; public class MongoLogBenchmark extends AbstractValveTest { String url = "mongodb://localhost"; String dbName = "test_logs"; String collName = "tomcat_access_logs"; String pattern = "all"; MongoClient mongoClient = null; DB db = null; @Override protected void setUpValve(Tomcat tomcat) throws UnknownHostException { // remove AccessLogValve for (Valve vl : tomcat.getHost().getPipeline().getValves()) { if (vl.getClass().equals(AccessLogValve.class)) { tomcat.getHost().getPipeline().removeValve(vl); } } mongoClient = new MongoClient(new MongoClientURI(url)); db = mongoClient.getDB(dbName); MongoAccessLogValve mavl = new MongoAccessLogValve(); mavl.setUri(url); mavl.setDbName(dbName); mavl.setCollName(collName); mavl.setPattern(pattern); tomcat.getHost().getPipeline().addValve(mavl); } @Override public void tearDown() throws Exception { super.tearDown(); // drop collection db.getCollection(collName).drop(); db.dropDatabase(); } @Test public void benchmark() throws Exception { Tomcat tomcat = getTomcatInstance(); tomcat.start(); CloseableHttpClient httpclient = HttpClients.createDefault(); int[] iterationsArray = {100/*, 1000, 10000, 100000*/}; long total = 0; for(int iterations : iterationsArray) { for (int i = 0; i < iterations; i++) { HttpUriRequest post = PostGenerator.gen(tomcat.getConnector().getLocalPort()); long start = System.currentTimeMillis(); httpclient.execute(post).close(); total += System.currentTimeMillis() - start; } sb.append(iterations + " iterations using MongoAccessLogValve took " + total + "ms").append("\n"); } } }