public static IBucketClient CreateClient(CloudServiceProvider service, ICredential credential) { HttpClient httpClient = new HttpClient(); switch (service) { case CloudServiceProvider.AWS: if (!(credential is AWSCredential)) { throw new ArgumentException("AWS needs AWSCredential!"); } AWSCredential aws = credential as AWSCredential; return(new AWSBucketClient(httpClient, aws.accessKeyID, aws.accessKeySecret, aws.region)); case CloudServiceProvider.Azure: if (!(credential is AzureCredential)) { throw new ArgumentException("Azure needs AzureCredential!"); } AzureCredential azure = credential as AzureCredential; return(new AzureBucketClient(azure.AccountName, azure.Secret)); case CloudServiceProvider.GCP: if (!(credential is GCPCredential)) { throw new ArgumentException("Google Cloud Platform needs GCPCredential!"); } GCPCredential gcp = credential as GCPCredential; return(new GCPBucketClient(gcp.projectID, gcp.secretJSON)); case CloudServiceProvider.DigitalOcean: if (!(credential is DigitalOceanCredential)) { throw new ArgumentException("Digital Ocean needs DigitalOceanCredential!"); } DigitalOceanCredential DO = credential as DigitalOceanCredential; return(new DigitalOceanBucketClient(httpClient, DO.accessKeyID, DO.accessKeySecret, DO.region)); case CloudServiceProvider.AliCloud: throw new NotImplementedException(); } return(null); }
public IBucketClient GetBucket(CloudServiceProvider provider) { switch (provider) { case CloudServiceProvider.AWS: return(AWSBucket); case CloudServiceProvider.Azure: return(AzureBucket); case CloudServiceProvider.GCP: return(GCPBucket); case CloudServiceProvider.DigitalOcean: return(DOBucket); case CloudServiceProvider.AliCloud: throw new NotImplementedException(); default: throw new ArgumentException("No such provider: " + provider.ToString()); } }
public List <OptimisedResult> SingleProvider(List <CloudServiceProvider> cloudListHost, CloudServiceProvider benchmarkHost, decimal maxCost, out decimal estimateCost) { estimateCost = 0; cloudListHost.RemoveAll(c => c.CloudProvider == benchmarkHost.CloudProvider); cloudListHost = cloudListHost.OrderBy(c => c.CostPerHour).ThenBy(c => c.VMSize).ToList(); var optimizdList = new List <OptimisedResult>(); foreach (var vm in cloudListHost) { var totalCost = vm.TotalCost + benchmarkHost.TotalCost; if ((estimateCost + totalCost) > maxCost) { break; } optimizdList.Add(new OptimisedResult { HostVM = vm, BenchmarkVM = benchmarkHost }); estimateCost += totalCost; } return(optimizdList); }
public List <CloudServiceProvider> SortF(List <CloudServiceProvider> cloudListHost1, List <CloudServiceProvider> cloudListHost2, CloudServiceProvider benchmarkHost, decimal maxCost) { throw new NotImplementedException(); }
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)); }