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);
        }
Esempio n. 2
0
        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());
            }
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
 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));
        }