public Task <IEnumerable <OptimisedResult> > Handle(SingleCloudOptimizedCommand request, CancellationToken cancellationToken) { var benchmarkVMSize = SetBenchmarkVMSize(request.ConcurrentUsers); CloudServiceProvider benchmarkProvider; if (request.BenchmarkCloudProvier == CloudProvider.AWS) { var vm = _awsTemplate.FindBy(c => c.VMSizeType == benchmarkVMSize && c.Active).OrderBy(c => c.PricePerHour).FirstOrDefault(); if (vm == null) { throw new Exception("No VM found for AWS"); } benchmarkProvider = new CloudServiceProvider { CloudTemplateId = vm.Id, CloudProvider = Optimizer.Enums.CloudProvider.AWS, Name = vm.Name, Time = request.ExperimentLengthInSeconds, CostPerHour = vm.PricePerHour, VMSize = (Optimizer.Enums.VMSize)benchmarkVMSize }; } else //if (request.BenchmarkProvider == CloudProvider.Azure) { var vm = _azureTemplate.FindBy(c => c.VMSizeType == benchmarkVMSize && c.Active).OrderBy(c => c.PricePerHour).FirstOrDefault(); if (vm == null) { throw new Exception("No VM found for Azure"); } benchmarkProvider = new CloudServiceProvider { CloudTemplateId = vm.Id, CloudProvider = Optimizer.Enums.CloudProvider.Azure, Name = vm.Name, Time = request.ExperimentLengthInSeconds, CostPerHour = vm.PricePerHour, VMSize = (Optimizer.Enums.VMSize)benchmarkVMSize }; } List <CloudServiceProvider> vmHosts = new List <CloudServiceProvider>(); if (request.HostCloudProvider == CloudProvider.AWS) { var vms = _awsTemplate.FindBy(c => c.Active).OrderBy(c => c.PricePerHour); if (vms == null) { throw new Exception("No VMs found for AWS"); } foreach (var vm in vms) { vmHosts.Add(new CloudServiceProvider { CloudTemplateId = vm.Id, CloudProvider = Optimizer.Enums.CloudProvider.AWS, CostPerHour = vm.PricePerHour, Name = vm.Name, Time = request.ExperimentLengthInSeconds, VMSize = (Optimizer.Enums.VMSize)vm.VMSizeType }); } } if (request.HostCloudProvider == CloudProvider.Azure) { var vms = _azureTemplate.FindBy(c => c.Active).OrderBy(c => c.PricePerHour); if (vms == null) { throw new Exception("No VMs found for Azure"); } foreach (var vm in vms) { vmHosts.Add(new CloudServiceProvider { CloudTemplateId = vm.Id, CloudProvider = Optimizer.Enums.CloudProvider.Azure, CostPerHour = vm.PricePerHour, Name = vm.Name, Time = request.ExperimentLengthInSeconds, VMSize = (Optimizer.Enums.VMSize)vm.VMSizeType }); } } decimal estimateCost = 0; var optimizedList = _optimizer.SingleProvider(vmHosts, benchmarkProvider, request.MaxCost, out estimateCost); return(Task.FromResult <IEnumerable <OptimisedResult> >(optimizedList)); }