Package edu.iit.cs553

Source Code of edu.iit.cs553.Main

package edu.iit.cs553;

import java.io.DataInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;

public class Main {

  /**
   * @param args
   * @throws IOException
   * @throws InterruptedException
   */
  public static void main(String[] args) throws IOException, InterruptedException, IncorrectArgumentsException
  {
    // Arguments retrieval
    // int portNumber;
    // String workersType;
    // int numberOfLocalWorkers = 0;
    // try
    // {
    // if (args.length > 4 || !args[0].equals("-s") ||
    // !(args[2].equals("-rw") || args[2].equals("-lw")))
    // {
    // throw new IncorrectArgumentsException();
    // }
    // portNumber = Integer.parseInt(args[1]);
    // workersType = new String();
    // String option = args[2];
    // if (option.equals("-lw"))
    // {
    // workersType = "local";
    // numberOfLocalWorkers = Integer.parseInt(args[3]);
    // System.out.println("Type of workers: local");
    // System.out.println("Number of local workers: " +
    // numberOfLocalWorkers);
    // } else if (option.equals("-rw"))
    // {
    // workersType = "remote";
    // System.out.println("Type of workers: remote");
    // } else
    // {
    // throw new IncorrectArgumentsException();
    // }
    // } catch (ArrayIndexOutOfBoundsException e)
    // {
    // throw new IncorrectArgumentsException();
    // }

    // Paragraphe � effacer par la suite, utilis� pour faire des tests au
    // sein d'Eclipse
    int portNumber = 1111;
    String workersType = "remote";
    int numberOfLocalWorkers = 32;

    try
    {
      ServerSocket serverSocket = new ServerSocket(portNumber);
      System.out.println("The server is listening to port: " + portNumber + ".\n");
      LocalExecutionManager localExecutionManager = new LocalExecutionManager();

      Socket socket = serverSocket.accept();

      System.out.println("A connection has been established.");
      DataInputStream in = new DataInputStream(socket.getInputStream());

      List<Map<Integer, Long>> workload = new ArrayList<Map<Integer, Long>>();
      int numberOfTasks = in.readInt();
      System.out.println("Number of tasks: " + numberOfTasks + "\n");

      byte[] buffer = new byte[20];
      for (int i = 0; i < numberOfTasks; i++)
      {
        in.readFully(buffer);
        String taskInString = new String(buffer);
        addToWorkload(workload, taskInString);
      }

      if (workersType.equals("local"))
      {
        double totalExecutionTime = localExecutionManager.executeTasks(workload, numberOfLocalWorkers);
        System.out.println("\nTotal execution time: " + totalExecutionTime + "ms" + " i.e. " + totalExecutionTime / 1000 + "s");
      } else if (workersType.equals("remote"))
      {
        Dispatcher dispatcher = new Dispatcher();
        Provisioner provisioner = new Provisioner();
        dispatcher.sendTasksToSQSQueue(workload);

        // System.out.println("\nSleeping for 8 minutes giving Cloud Watch time to refresh its results.");
        // Thread.sleep(8 * 60 * 1000);
        // System.out.println("Sleep finished.");

        // provisioner.allocateNeededWorkersUsingCloudWatchMonitor();
        provisioner.allocateNeededWorkersWithoutCloudWatch(workload.size());
        // provisioner.displayInstancesStates();
      }

      // Displaying workload
      // for (Map<Integer, Long> task : workload)
      // {
      // Set<Integer> keySet = task.keySet();
      // Iterator iterator = keySet.iterator();
      // int key = (Integer) iterator.next();
      // System.out.println(key + " " + task.get(key));
      // }

    } catch (IOException e)
    {
      System.err.println("Could not listen to port: " + portNumber + ". Please try another one.");
      System.exit(-1);
    }
  }

  private static void addToWorkload(List<Map<Integer, Long>> workload, String taskInString)
  {
    Map<Integer, Long> task = getTaskFromString(taskInString);
    workload.add(task);
  }

  private static Map<Integer, Long> getTaskFromString(String taskInString)
  {
    Map<Integer, Long> task = new HashMap<Integer, Long>();
    int key = Integer.parseInt(StringUtils.substringBefore(taskInString, " "));
    double sleepDurationInDouble = Double.parseDouble(StringUtils.substringAfter(taskInString, " "));
    long sleepDuration = (long) sleepDurationInDouble;
    task.put(key, sleepDuration);
    return task;
  }
}
TOP

Related Classes of edu.iit.cs553.Main

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.