package com.stacksync.syncservice.test.benchmark; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.UUID; import com.stacksync.commons.models.Device; import com.stacksync.commons.models.Item; import com.stacksync.commons.models.User; import com.stacksync.commons.models.Workspace; import com.stacksync.syncservice.exceptions.dao.DAOException; import com.stacksync.syncservice.test.benchmark.db.DatabaseHelper; public class DBBenchmark extends Thread { private static final int LEVELS = 3; private static final int USERS = 30; private String name; private int numUser; private int fsDepth; private MetadataGenerator metadataGen; private DatabaseHelper dbHelper; public DBBenchmark(int numUser) throws Exception { super("TName" + numUser); this.name = "TName" + numUser; this.numUser = numUser; this.fsDepth = LEVELS; this.dbHelper = new DatabaseHelper(); this.metadataGen = new MetadataGenerator(); } public void fillDB(Workspace workspace, Device device) { int firstLevel = 0; try { this.createAndStoreMetadata(workspace, device, firstLevel, null); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (DAOException e) { e.printStackTrace(); } } public void createAndStoreMetadata(Workspace workspace, Device device, int currentLevel, Item parent) throws IllegalArgumentException, DAOException { if (currentLevel >= this.fsDepth) { return; } List<Item> objectsLevel = metadataGen.generateLevel(workspace, device, parent); this.dbHelper.storeObjects(objectsLevel); for (Item object : objectsLevel) { if (object.isFolder()) { createAndStoreMetadata(workspace, device, currentLevel + 1, object); } } System.out.println("***** " + name + " --> Stored objects: " + objectsLevel.size() + " at level: " + currentLevel); } @Override public void run(){ Random randGenerator = new Random(); System.out.println("============================"); System.out.println("=========Thread " + name + "========="); System.out.println("============================"); System.out.println("============================"); System.out.println("Creating user: " + numUser); int randomUser = randGenerator.nextInt(); String name = "benchmark" + randomUser; String cloudId = name; try { User user = new User(UUID.randomUUID(), "tester1", "tester1", "AUTH_12312312", "a@a.a", 100L, 0L, 0L); dbHelper.addUser(user); Workspace workspace = new Workspace(null, 1, user, false, false); dbHelper.addWorkspace(user, workspace); String deviceName = name + "_device"; Device device = new Device(null, deviceName, user); dbHelper.addDevice(device); fillDB(workspace, device); System.out.println("User -> " + user); System.out.println("Workspace -> " + workspace); System.out.println("Device -> " + device); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (DAOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { try { int numThreads = 1; List<DBBenchmark> benchmarks = new ArrayList<DBBenchmark>(); for (int numUser = 0; numUser < USERS; numUser+=numThreads) { for(int i=0; i<numThreads; i++){ DBBenchmark benchmark = new DBBenchmark(numUser+i); benchmark.start(); benchmarks.add(benchmark); } for(DBBenchmark benchmark: benchmarks){ benchmark.join(); } benchmarks.clear(); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }