package streamcruncher.test.func.generic; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import java.sql.Timestamp; import java.util.Arrays; import java.util.Iterator; import java.util.List; import streamcruncher.test.func.BatchResult; /* * Author: Ashwin Jayaprakash Date: Dec 24, 2006 Time: 12:02:07 AM */ /** * todo Not sure how to measure the performance. Latency might be a better * measure. Performance test. Unfinished, need a better way to load and measure * Kernel perf. DB and JVM must be tuned. */ public abstract class ReStockAlertPerfTest extends ReStockAlertTest { @Override protected int getMaxDataRows() { return 1000; } protected int getBatchSize() { return 250; } @Override protected void afterEvent(int counter) { try { if (counter % getBatchSize() == 0) { System.err.println("Sleeping.."); Thread.sleep(1000); } } catch (InterruptedException e) { e.printStackTrace(System.err); } } @Override protected Iterator<Object[]> getData() { Iterator<Object[]> iter = new Iterator<Object[]>() { private int counter = 1; public boolean hasNext() { return counter <= getMaxDataRows(); } public Object[] next() { /* * "country", "state", "city", "item_sku", "item_qty", * "order_time", "order_id" */ Object[] event = null; if (counter % 60 == 0) { event = new Object[] { "US", "California", "San Jose", "ansible", 60, new Timestamp(ReStockAlertPerfTest.this.getEventTimeStamp(counter)), new Long(counter) }; } else { event = new Object[] { "US", "California", "San Jose", "ansible", -1, new Timestamp(ReStockAlertPerfTest.this.getEventTimeStamp(counter)), new Long(counter) }; } System.out.println(Arrays.asList(event)); counter++; return event; } /** * @throws UnsupportedOperationException */ public void remove() { throw new UnsupportedOperationException(); } }; return iter; } @Override protected void verify(List<BatchResult> results) { try { Connection conn = cruncher.createConnection(); Statement statement = conn.createStatement(); statement.execute("drop table stock_level"); statement.close(); conn.close(); } catch (SQLException e) { throw new RuntimeException(e); } // -------------- System.out.println("--Results--"); int counter = 0; for (BatchResult result : results) { System.out.println("Batch created at: " + new Timestamp(result.getTimestamp()) + ". Rows: " + result.getRows().size()); List<Object[]> rows = result.getRows(); System.out.println(" Batch results"); for (Object[] objects : rows) { System.out.print(" "); for (Object object : objects) { System.out.print(object + " "); } String sku = (String) objects[3]; Double currentStock = (Double) objects[4]; counter++; System.out.println(); } } } }