package clients;
import api.MachineGroup;
import api.ReservationService;
import com.google.inject.Guice;
import com.google.inject.Injector;
import edu.ucsb.jpregel.clouds.CloudMachineGroup;
import edu.ucsb.jpregel.clouds.modules.AWSModule;
import edu.ucsb.jpregel.system.ClientToMaster;
import edu.ucsb.jpregel.system.Job;
import edu.ucsb.jpregel.system.JobRunData;
import edu.ucsb.jpregel.system.MasterGraphMakerBinaryTree2;
import edu.ucsb.jpregel.system.MasterOutputMakerStandard;
import edu.ucsb.jpregel.system.Worker;
import edu.ucsb.jpregel.system.WorkerGraphMakerBinaryTree2;
import edu.ucsb.jpregel.system.WorkerOutputMakerStandard;
import java.io.File;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.util.concurrent.Future;
import org.jclouds.ec2.domain.InstanceType;
import vertices.VertexShortestPathBinaryTree;
/**
*
* @param args [0] directory name on S3
* [1] numbers of worker machines
* [2] access key
* [3] secret key
* @author Charles
*/
public class SsspBinaryTreeEc2
{
public static void main( String[] args ) throws Exception
{
int numWorkers = Integer.parseInt(args[1]);
final AWSModule awsModule = new AWSModule(args[2], args[3]);
new ObjectOutputStream(new FileOutputStream(new File(CloudMachineGroup.CREDENTIALS_MODULE))).writeObject(awsModule);
Injector injector = Guice.createInjector(awsModule);
ReservationService instance = injector.getInstance(ReservationService.class);
Future<MachineGroup<ClientToMaster>> reserveMaster = instance.reserveMaster(InstanceType.M1_SMALL);
Future<MachineGroup<Worker>> reserveWorkers = instance.reserveWorkers(InstanceType.M1_SMALL, numWorkers);
Future<ClientToMaster> master = reserveMaster.get().deploy(args[1]);
reserveWorkers.get().deploy(reserveMaster.get().getHostname());
final ClientToMaster rMaster = master.get();
Job job3 = new Job("Binary Tree Shortest Path", // jobName
args[0],
new VertexShortestPathBinaryTree(), // vertexFactory
new MasterGraphMakerBinaryTree2(),
new WorkerGraphMakerBinaryTree2(),
new MasterOutputMakerStandard(),
new WorkerOutputMakerStandard());
JobRunData run3 = rMaster.run(job3);
System.out.println(run3);
reserveMaster.get().terminate();
reserveWorkers.get().terminate();
System.exit(0);
}
}