public async Task <IOrderedEnumerable <mdisk> > GetStorage(string date = "", int minSize = 0, string region = "europe-west", string currency = "usd")
        {
            DateTime?dt;
            VmList   vml = new VmList(configuration);
            String   regionSlug;

            try
            {
                dt = excelAzureBackend.excelAzureHelpers.parseDTString(date);

                regionSlug = await vml.FindRegionSlug(region);

                var validCurrency = excelAzureHelpers.validateCurrency(currency);
            }
            catch (Exception)
            {
                this.Response.StatusCode = 400;

                return(null);
            }

            mdisk        md        = new mdisk(configuration);
            List <mdisk> mdiskList = await md.GetMdisks(regionSlug, currency, dt);

            var result = mdiskList.Where(i => i.size >= minSize && i.pricemonth.HasValue).OrderBy(x => x.pricemonth);

            return(result);
        }
示例#2
0
 public void RemoveMigratingInVm(Vm vm)
 {
     VmDeallocate(vm);
     VmsMigratingIn.Remove(vm);
     VmList.Remove(vm);
     VmScheduler.VmsMigratingIn.Remove(vm.Uid);
     vm.InMigration = false;
 }
示例#3
0
 public void VmDestroy(Vm vm)
 {
     if (vm != null)
     {
         VmDeallocate(vm);
         VmList.Remove(vm);
         vm.Host = null;
     }
 }
示例#4
0
        public async Task <IOrderedEnumerable <vm> > Get(int minCores = 0, int minRam = 0, string os = "linux", string tier = "standard", string region = "europe-west", int ri = 0, string format = "")
        {
            VmList vml    = new VmList(configuration);
            var    vmlist = await vml.GetVmsAsync(region : region, bindingPeriod : ri);

            var result = vmlist.vms.Where(i => i.cores >= minCores && i.ram >= minRam && i.name.IndexOf(os) > -1 && i.name.Contains(tier) && i.price.HasValue).OrderBy(x => x.price);

            return(result);
        }
示例#5
0
 public void VmDestroyAll()
 {
     VmDeallocateAll();
     foreach (Vm vm in VmList)
     {
         vm.Host  = null;
         Storage += vm.Size;
     }
     VmList.Clear();
 }
示例#6
0
    public VmList ListVmsByHostId(string hostId)
    {
        HttpWebResponse response = fetch("/rest/vcenter/vm?filter.hosts.1=" + hostId);

        if ((int)response.StatusCode == 200)
        {
            String body = GetDocumentContents(response);
            VmList list = JsonUtility.FromJson <VmList>(body);
            return(list);
        }
        return(null);
    }
        public async Task <String> RegionsCSV()
        {
            VmList vml     = new VmList(configuration);
            var    regions = await vml.GetRegions();

            StringBuilder s = new StringBuilder();

            foreach (var item in regions)
            {
                s.Append(item.Value <string>("slug"));
                s.Append(";");
            }
            return(s.ToString());
        }
示例#8
0
        public FilesTabVM2(IRepository <SyncableFileRemote> filesRepo, AppFileGrouper fileGrouper, IFileSynchronizer fileSynchronizer, ID7Client d7Client, BinUploaderCfgFile cfgFile)
        {
            _grouper      = ForwardLogs(fileGrouper);
            _synchronizer = ForwardLogs(fileSynchronizer);
            _remotes      = ForwardLogs(filesRepo);
            //_cfgFile         = ForwardLogs(cfgFile);
            //_d7Client        = ForwardLogs(d7Client);
            MainList         = new VmList <RemoteVsLocalFile>();
            UploadChangesCmd = AsyncCommand.Create(token => UploadChanges(token));

            _remotes.SetClient(d7Client, cfgFile);
            _synchronizer.SetClient(d7Client);

            SetEventHandlers();
        }
示例#9
0
        public async Task <string> StoreVMs(int ri = 0, string format = "", string currency = "usd")
        {
            client = new HttpClient();
            VmList            vml  = new VmList(configuration);
            excelAzureHelpers xhlp = new excelAzureHelpers(configuration);
            //var taskList = new List<Task<HttpResponseMessage>>();
            var url      = xhlp.GetVMURL(ri, currency.ToLower(), null);
            var response = await client.GetAsync(url);

            var result = await response.Content.ReadAsStringAsync();

            var uri = await storeBlob(result, DateTime.UtcNow, "vm", currency, ri);

            return("Stored VM's at " + uri.AbsoluteUri);
        }
示例#10
0
        public FilesTabVM2(IRepository<SyncableFileRemote> filesRepo, AppFileGrouper fileGrouper, IFileSynchronizer fileSynchronizer, ID7Client d7Client, BinUploaderCfgFile cfgFile)
        {
            _grouper         = ForwardLogs(fileGrouper);
            _synchronizer    = ForwardLogs(fileSynchronizer);
            _remotes         = ForwardLogs(filesRepo);
            //_cfgFile         = ForwardLogs(cfgFile);
            //_d7Client        = ForwardLogs(d7Client);
            MainList         = new VmList<RemoteVsLocalFile>();
            UploadChangesCmd = AsyncCommand.Create(token => UploadChanges(token));

            _remotes.SetClient(d7Client, cfgFile);
            _synchronizer.SetClient(d7Client);

            SetEventHandlers();
        }
示例#11
0
        public async Task <string> GetUSSDCSV(int minSize = 0, string region = "europe-west", string currency = "usd", bool store = false, string date = null)
        {
            DateTime?dt;
            VmList   vml = new VmList(configuration);
            String   regionSlug;

            try
            {
                dt = excelAzureBackend.excelAzureHelpers.parseDTString(date);

                regionSlug = await vml.FindRegionSlug(region);

                var validCurrency = excelAzureHelpers.validateCurrency(currency);
            }
            catch (Exception)
            {
                this.Response.StatusCode = 400;

                return("");
            }

            UltraSSDs       md        = new UltraSSDs(configuration);
            List <UltraSSD> mdiskList = await md.GetUltraSSDs(region, currency, dt);

            var           result = mdiskList.Where(i => i.size >= minSize).OrderBy(x => x.size);
            StringBuilder s      = new StringBuilder();
            DataTable     datbl  = JsonConvert.DeserializeObject <DataTable>(JsonConvert.SerializeObject(result), new JsonSerializerSettings
            {
                FloatParseHandling = FloatParseHandling.Decimal
            });

            foreach (DataColumn column in datbl.Columns)
            {
                s.Append(column.ColumnName + ";");
            }
            s.Append(Environment.NewLine);

            foreach (DataRow row in datbl.Rows)
            {
                for (var i = 0; i < datbl.Columns.Count; i++)
                {
                    s.Append(row[i] + ";");
                }
                s.Append(Environment.NewLine);
            }
            return(s.ToString());
        }
示例#12
0
        public MainWindowVmBase(UserSessionVM userSessionVM)
        {
            WindowState = WindowState.Normal;
            IsVisible   = true;
            NaviTabs    = new VmList <WorkspaceVmBase>();
            MainTabs    = new VmList <WorkspaceVmBase>();
            OtherTabs   = new VmList <WorkspaceVmBase>();
            UserSession = ForwardLogs(userSessionVM);

            MainTabs.CollectionChanged += OnWorkspacesChanged;

            NaviTabs.ItemPicked += ResetDetailsState;
            MainTabs.ItemPicked += ResetDetailsState;


            CompletelyLoaded += (s, e) => { Refresh(); };
        }
示例#13
0
        public async Task <string> GetVM(int minCores = 0, int minRam = 0, string os = "linux", string tier = "standard", string region = "europe-west", int ri = 0, string format = "", string currency = "usd")
        {
            VmList vml      = new VmList(configuration);
            var    taskList = new List <Task <VmList> >();

            taskList.Add(vml.GetVmsAsync(region: region, bindingPeriod: 0, currency: currency));
            taskList.Add(vml.GetVmsAsync(region: region, bindingPeriod: 1, currency: currency));
            taskList.Add(vml.GetVmsAsync(region: region, bindingPeriod: 3, currency: currency));

            taskList.Add(vml.GetVmsAsyncSoftware(region: region, bindingPeriod: 0, currency: currency));
            taskList.Add(vml.GetVmsAsyncSoftware(region: region, bindingPeriod: 1, currency: currency));
            taskList.Add(vml.GetVmsAsyncSoftware(region: region, bindingPeriod: 3, currency: currency));

            await Task.WhenAll(taskList.ToArray());

            List <vm> vms = new List <vm>();

            //VmList vms = new VmList();
            for (int i = 0; i < taskList.Count; i++)
            {
                vms.AddRange(taskList[i].Result.vms);
            }
            var           result = vms.Where(i => i.cores >= minCores && i.ram >= minRam && i.name.Contains(tier) && i.price.HasValue).OrderBy(x => x.price);
            StringBuilder s      = new StringBuilder();
            DataTable     dt     = JsonConvert.DeserializeObject <DataTable>(JsonConvert.SerializeObject(result));

            foreach (DataColumn column in dt.Columns)
            {
                s.Append(column.ColumnName + ";");
            }
            s.Append(Environment.NewLine);

            foreach (DataRow row in dt.Rows)
            {
                for (var i = 0; i < dt.Columns.Count; i++)
                {
                    s.Append(row[i] + ";");
                }
                s.Append(Environment.NewLine);
            }



            return(s.ToString());
        }
示例#14
0
 public void ReallocateMigratingInVms()
 {
     foreach (Vm vm in VmsMigratingIn)
     {
         if (!VmList.Contains(vm))
         {
             VmList.Add(vm);
         }
         if (!VmScheduler.VmsMigratingIn.Contains(vm.Uid))
         {
             VmScheduler.VmsMigratingIn.Add(vm.Uid);
         }
         RamProvisioner.AllocateRamForVm(vm, vm.GetCurrentRequestedRam());
         BwProvisioner.AllocateBwForVm(vm, vm.GetCurrentRequestedBw());
         VmScheduler.AllocatePesForVm(vm, vm.GetCurrentRequestedMips());
         Storage = Storage - vm.Size;
     }
 }
示例#15
0
        public void AddMigratingInVm(Vm vm)
        {
            vm.InMigration = true;

            if (!VmsMigratingIn.Contains(vm))
            {
                if (Storage < vm.Size)
                {
                    Log.WriteConcatLine("[VmScheduler.addMigratingInVm] Allocation of VM #", vm.Id, " to Host #",
                                        Id, " failed by storage");
                    Environment.Exit(0);
                }

                if (!RamProvisioner.AllocateRamForVm(vm, vm.GetCurrentRequestedRam()))
                {
                    Log.WriteConcatLine("[VmScheduler.addMigratingInVm] Allocation of VM #", vm.Id, " to Host #",
                                        Id, " failed by RAM");
                    Environment.Exit(0);
                }

                if (!BwProvisioner.AllocateBwForVm(vm, vm.GetCurrentRequestedBw()))
                {
                    Log.WriteLine("[VmScheduler.addMigratingInVm] Allocation of VM #" + vm.Id + " to Host #"
                                  + Id + " failed by BW");
                    Environment.Exit(0);
                }

                VmScheduler.VmsMigratingIn.Add(vm.Uid);
                if (!VmScheduler.AllocatePesForVm(vm, vm.GetCurrentRequestedMips()))
                {
                    Log.WriteLine("[VmScheduler.addMigratingInVm] Allocation of VM #" + vm.Id + " to Host #"
                                  + Id + " failed by MIPS");
                    Environment.Exit(0);
                }

                Storage = Storage - vm.Size;

                VmsMigratingIn.Add(vm);
                VmList.Add(vm);
                UpdateVmsProcessing(Core.CloudSim.Clock);
                vm.Host.UpdateVmsProcessing(Core.CloudSim.Clock);
            }
        }
示例#16
0
        public async Task <IOrderedEnumerable <vm> > Get(string date = "", int minCores = 0, int minRam = 0, string os = "linux", string tier = "standard", string region = "europe-west", int ri = 0, string format = "", string currency = "usd")
        {
            DateTime?dt;
            VmList   vml = new VmList(configuration);
            String   regionSlug;

            try
            {
                dt = excelAzureBackend.excelAzureHelpers.parseDTString(date);

                regionSlug = await vml.FindRegionSlug(region);

                var validCurrency = excelAzureHelpers.validateCurrency(currency);
            }
            catch (Exception)
            {
                this.Response.StatusCode = 400;

                return(null);
            }
            var taskList = new List <Task <VmList> >();

            taskList.Add(vml.GetVmsAsync(region: region, bindingPeriod: 0, currency: currency, date: dt));
            taskList.Add(vml.GetVmsAsync(region: region, bindingPeriod: 1, currency: currency, date: dt));
            taskList.Add(vml.GetVmsAsync(region: region, bindingPeriod: 3, currency: currency, date: dt));

            await Task.WhenAll(taskList.ToArray());

            VmList vms = new VmList(configuration);

            for (int i = 0; i < taskList.Count; i++)
            {
                vms.vms.AddRange(taskList[i].Result.vms);
            }


            //var result = vms.vms.Where(i => i.cores >= minCores && i.ram >= minRam && i.name.Contains(tier) && i.price.HasValue).OrderBy(x => x.price);
            var result = vms.vms.Where(i => i.cores >= minCores && i.ram >= minRam && i.name.Contains(tier?.ToString() ?? "") && i.price.HasValue).OrderBy(x => x.price);

            //var responsetext = JsonConvert.SerializeObject(result);

            return(result);
        }
示例#17
0
        public bool VmCreate(Vm vm)
        {
            if (Storage < vm.Size)
            {
                Log.WriteConcatLine(
                    "[VmScheduler.vmCreate] Allocation of VM #", vm.Id,
                    " to Host #", Id, " failed by storage");
                return(false);
            }

            if (!RamProvisioner.AllocateRamForVm(vm, vm.GetCurrentRequestedRam()))
            {
                Log.WriteConcatLine("[VmScheduler.vmCreate] Allocation of VM #", vm.Id, " to Host #", Id,
                                    " failed by RAM");
                return(false);
            }

            if (!BwProvisioner.AllocateBwForVm(vm, vm.GetCurrentRequestedBw()))
            {
                Log.WriteConcatLine("[VmScheduler.vmCreate] Allocation of VM #", vm.Id, " to Host #", Id,
                                    " failed by BW");
                RamProvisioner.DeallocateRamForVm(vm);
                return(false);
            }

            if (!VmScheduler.AllocatePesForVm(vm, vm.GetCurrentRequestedMips()))
            {
                Log.WriteConcatLine("[VmScheduler.vmCreate] Allocation of VM #", vm.Id, " to Host #", Id,
                                    " failed by MIPS");
                RamProvisioner.DeallocateRamForVm(vm);
                BwProvisioner.DeallocateBwForVm(vm);
                return(false);
            }

            Storage = Storage - vm.Size;
            VmList.Add(vm);
            vm.Host = this;
            return(true);
        }
示例#18
0
        public async Task <string> GetStorageCSV(int minSize = 0, string region = "europe-west", string currency = "usd", bool store = false, string date = null)
        {
            DateTime?dt;
            VmList   vml = new VmList(configuration);
            String   regionSlug;

            try
            {
                dt = excelAzureBackend.excelAzureHelpers.parseDTString(date);

                regionSlug = await vml.FindRegionSlug(region);

                var validCurrency = excelAzureHelpers.validateCurrency(currency);
            }
            catch (Exception)
            {
                this.Response.StatusCode = 400;

                return("");
            }

            mdisk        md        = new mdisk(configuration);
            List <mdisk> mdiskList = await md.GetMdisks(regionSlug, currency, dt);

            var result = mdiskList.Where(i => i.size >= minSize && i.pricemonth.HasValue).OrderBy(x => x.pricemonth);

            if (store)
            {
                string EndpointUri  = configuration.GetValue <string>("CosmosDBSettings:EndpointUri");
                string PrimaryKey   = configuration.GetValue <string>("CosmosDBSettings:PrimaryKey");
                string databaseName = configuration.GetValue <string>("CosmosDBSettings:databaseName");

                DocumentClient Dbclient;
                DboMdisks      dbomdisks = new DboMdisks();
                dbomdisks.mdisks   = result.ToList <mdisk>();
                dbomdisks.region   = region;
                dbomdisks.currency = currency;
                dbomdisks.date     = DateTime.Now;

                // Save result to DocumentDB
                Dbclient = new DocumentClient(new Uri(EndpointUri), PrimaryKey);
                await Dbclient.CreateDocumentAsync(UriFactory.CreateDocumentCollectionUri(databaseName, "mdisks"), dbomdisks);
            }

            StringBuilder s     = new StringBuilder();
            DataTable     datbl = JsonConvert.DeserializeObject <DataTable>(JsonConvert.SerializeObject(result));

            foreach (DataColumn column in datbl.Columns)
            {
                s.Append(column.ColumnName + ";");
            }
            s.Append(Environment.NewLine);

            foreach (DataRow row in datbl.Rows)
            {
                for (var i = 0; i < datbl.Columns.Count; i++)
                {
                    s.Append(row[i] + ";");
                }
                s.Append(Environment.NewLine);
            }
            return(s.ToString());
        }
示例#19
0
    // Use this for initialization
    void Start()
    {
        RESTConnection n = new RESTConnection();

        n.Start();

        GameObject CloneVM;
        GameObject ClonedPedistal;

        UnityEngine.UI.Text[] VMDetails;
        float XPosition;
        float YPosition;
        float ZPosition;
        float OriginalYPosition;
        float HostXPosition;
        float HostYPosition;
        float HostZPosition;
        float HostOriginalYPosition;
        float HostOriginalZPosition;

        HostXPosition = -2f;
        HostYPosition = 0f;
        HostZPosition = 5f;

        HostOriginalYPosition = HostYPosition;
        HostOriginalZPosition = HostZPosition;

        XPosition = HostXPosition + -0.25f;
        YPosition = 5.5415f;
        ZPosition = HostZPosition + -0.30f;

        OriginalYPosition = YPosition;

        RESTConnection.HostList vmhosts = n.ListHosts();

        // Iterate through all ESXi hosts
        for (int i = 0; i < vmhosts.value.Count; i++)
        {
            // Name of ESXi host
            string vmhostName = vmhosts.value[i].name;
            // Id of ESXi host
            string vmhostId = vmhosts.value[i].host;
            XPosition = HostXPosition + -0.25f;
            ZPosition = HostZPosition + -0.30f;

            // Clone the SourceObject for our New Pedistal
            ClonedPedistal = Instantiate(SourcePedistal);

            ClonedPedistal.transform.position = new Vector3(HostXPosition, HostOriginalYPosition, HostOriginalZPosition);
            ClonedPedistal.name = vmhostName;

            // Change the name of the Pedestal Text
            ClonedPedistal.GetComponentInChildren <Text>().text = vmhostName;

            // Retrieve VMs from ESXi host
            VmList vms = n.ListVmsByHostId(vmhostId);
            for (int j = 0; j < vms.value.Count; j++)
            {
                vapitypes.VmDetails details = n.GetVmDetails(vms.value[j].vm);
                string vmDetails            = n.GetVmDetailsStr(details);
                string vmName = vms.value[j].name;

                // Clone the SourceObject for our New VM
                CloneVM = Instantiate(SourceVMObject);
                CloneVM.transform.SetParent(ClonedPedistal.transform);
                CloneVM.transform.position = new Vector3(XPosition, OriginalYPosition, ZPosition);

                CloneVM.name = vmName;

                // Fill in the Details on the Summary canvas
                VMDetails         = CloneVM.GetComponentsInChildren <UnityEngine.UI.Text>();
                VMDetails[0].text = vmName;
                VMDetails[1].text = vmDetails;

                ShowInfo vmInfo = CloneVM.GetComponent <ShowInfo>();
                vmInfo.name = vmName;
                vmInfo.type = "VM";

                vmInfo.resources = new List <HUD.Resource>();
                vmInfo.resources.Add(new HUD.Resource("CPU", 2, 0.5f));
                vmInfo.resources.Add(new HUD.Resource("MEM", 4, 0.75f));

                vmInfo.statistics = new List <HUD.Statistic>();

                string CPU = n.GetNumCPUStr(details);
                vmInfo.statistics.Add(new HUD.Statistic(CPU, "CPU:"));

                string MEM = n.GetMEMStr(details);
                vmInfo.statistics.Add(new HUD.Statistic(MEM, "Memory:"));

                string GuestOS = n.GetOSStr(details);
                vmInfo.statistics.Add(new HUD.Statistic(GuestOS, "OS:"));

                string Power = n.GetPowerStr(details);
                vmInfo.statistics.Add(new HUD.Statistic(Power, "Power:"));

                //CloneVM.GetComponents();

                // Set the location of the cloned VM
                XPosition += 0.20f;

                if ((j + 1) % 4 == 0)
                {
                    XPosition  = HostXPosition + -0.25f;
                    ZPosition += 0.15f;
                }
                //Debug.Log("VM: " + vmDetails);
            }
            HostXPosition = HostXPosition + 1.5f;
        }
    }
示例#20
0
    // Use this for initialization
    void Start()
    {
        RESTConnection n = new RESTConnection();

        n.Start();

        GameObject CloneVM;
        GameObject ClonedPedistal;

        UnityEngine.UI.Text[] VMDetails;
        float XPosition;
        float YPosition;
        float ZPosition;
        float OriginalYPosition;
        float HostXPosition;
        float HostYPosition;
        float HostZPosition;
        float HostOriginalYPosition;
        float HostOriginalZPosition;

        HostXPosition = -2f;
        HostYPosition = 0f;
        HostZPosition = 5f;

        HostOriginalYPosition = HostYPosition;
        HostOriginalZPosition = HostZPosition;

        XPosition = HostXPosition + -0.25f;
        YPosition = 5.5415f;
        ZPosition = HostZPosition + -0.30f;

        OriginalYPosition = YPosition;

        RESTConnection.HostList vmhosts = n.ListHosts();

        // Iterate through all ESXi hosts
        for (int i = 0; i < vmhosts.value.Count; i++)
        {
            // Name of ESXi host
            string vmhostName = vmhosts.value[i].name;
            // Id of ESXi host
            string vmhostId = vmhosts.value[i].host;
            XPosition = HostXPosition + -0.25f;
            ZPosition = HostZPosition + -0.30f;

            // Clone the SourceObject for our New Pedistal
            ClonedPedistal = Instantiate(SourcePedistal);

            ClonedPedistal.transform.position = new Vector3(HostXPosition, HostOriginalYPosition, HostOriginalZPosition);
            ClonedPedistal.name = vmhostName;

            // Change the name of the Pedestal Text
            ClonedPedistal.GetComponentInChildren <Text>().text = vmhostName;

            // Retrieve VMs from ESXi host
            VmList vms = n.ListVmsByHostId(vmhostId);
            for (int j = 0; j < vms.value.Count; j++)
            {
                vapitypes.VmDetails details = n.GetVmDetails(vms.value[j].vm);
                string vmDetails            = n.GetVmDetailsStr(details);
                string vmName = vms.value[j].name;

                // Clone the SourceObject for our New VM
                CloneVM = Instantiate(SourceVMObject);
                CloneVM.transform.SetParent(ClonedPedistal.transform);
                CloneVM.transform.position = new Vector3(XPosition, OriginalYPosition, ZPosition);

                CloneVM.name = vmName;

                // Fill in the Details on the Summary canvas
                VMDetails         = CloneVM.GetComponentsInChildren <UnityEngine.UI.Text>();
                VMDetails[0].text = vmName;
                VMDetails[1].text = vmDetails;


                //CloneVM.GetComponents();

                // Set the location of the cloned VM
                XPosition += 0.20f;

                if ((j + 1) % 4 == 0)
                {
                    XPosition  = HostXPosition + -0.25f;
                    ZPosition += 0.15f;
                }
                //Debug.Log("VM: " + vmDetails);
            }
            HostXPosition = HostXPosition + 1.5f;
        }
    }
示例#21
0
 public FoldersTabVM(IRepository<SyncableFolderInfo> foldersRepo, BinUploaderCfgFile cfgFile)
 {
     DisplayName  = "Local Folders";
     _repo        = ForwardLogs(foldersRepo);
     MainList     = new VmList<SyncableFolderInfo>();
 }
示例#22
0
        public async Task <dynamic> Get()
        {
            VmList vml = new VmList(configuration);

            return(await vml.GetRegions());
        }
示例#23
0
        public async Task <JArray> Regions()
        {
            VmList vml = new VmList(configuration);

            return(await vml.GetRegions());
        }
示例#24
0
 public FoldersTabVM(IRepository <SyncableFolderInfo> foldersRepo, BinUploaderCfgFile cfgFile)
 {
     DisplayName = "Local Folders";
     _repo       = ForwardLogs(foldersRepo);
     MainList    = new VmList <SyncableFolderInfo>();
 }
示例#25
0
        public async Task <string> GetStorageCSV2(int minSize = 0, string region = "europe-west", string currency = "usd", bool store = false, string date = null)
        {
            DateTime?dt;
            VmList   vml = new VmList(configuration);
            String   regionSlug;

            try
            {
                dt = excelAzureBackend.excelAzureHelpers.parseDTString(date);

                regionSlug = await vml.FindRegionSlug(region);

                var validCurrency = excelAzureHelpers.validateCurrency(currency);
            }
            catch (Exception)
            {
                this.Response.StatusCode = 400;

                return("");
            }
            UltraSSDs ussds    = new UltraSSDs(configuration);
            var       ussdisks = await ussds.GetUltraSSDs(region, currency, dt);

            mdisk        md        = new mdisk(configuration);
            List <mdisk> mdiskList = await md.GetMdisks(regionSlug, currency, dt);

            List <mdisk> ussdMdiskList = new List <mdisk>();


            foreach (var item in mdiskList)
            {
                var compare_ussd = ussds.findUSSD(ussdisks, item.size, item.iops, item.speed, item.pricemonth);
                if (compare_ussd.Count <UltraSSD>() > 0)
                {
                    var ussdPriceMonth = ussds.calculatePriceMonth(compare_ussd[0], item.iops, item.speed);
                    // If the USSD is cheaper, replace the disk with USSD
                    string mdiskname = item.name.Split("-")[1];

                    item.name = "ultrassd-" + mdiskname; item.displayName = compare_ussd[0].displayName; item.isPreview = false; item.size = compare_ussd[0].size; item.pricemonth = ussdPriceMonth; item.priceyear = ussdPriceMonth * 12; item.snapshotPrice = null; item.transactionPrice = null; item.snapshotPriceLrs = null; item.snapshotPriceZrs = null;

                    //ussdMdiskList.Add(new mdisk(configuration) { name = compare_ussd[0].name, displayName = compare_ussd[0].displayName, isPreview = false, size = compare_ussd[0].size, iops = item.iops, speed = item.speed, pricemonth = ussdPriceMonth,  priceyear = ussdPriceMonth*12, snapshotPrice = null, transactionPrice = null });
                }
            }
            ussdMdiskList.ForEach(p => mdiskList.Add(p));


            var result = mdiskList.Where(i => i.size >= minSize && i.pricemonth.HasValue).OrderBy(x => x.pricemonth);

            StringBuilder s     = new StringBuilder();
            DataTable     datbl = JsonConvert.DeserializeObject <DataTable>(JsonConvert.SerializeObject(result));

            foreach (DataColumn column in datbl.Columns)
            {
                s.Append(column.ColumnName + ";");
            }
            s.Append(Environment.NewLine);

            foreach (DataRow row in datbl.Rows)
            {
                for (var i = 0; i < datbl.Columns.Count; i++)
                {
                    s.Append(row[i] + ";");
                }
                s.Append(Environment.NewLine);
            }
            return(s.ToString());
        }
示例#26
0
        public async Task <string> GetVM(int minCores = 0, int minRam = 0, string os = "", string tier = "standard", string region = "europe-west", int ri = 0, string format = "", string currency = "usd", string date = "")
        {
            DateTime?dt;
            VmList   vml = new VmList(configuration);
            String   regionSlug;

            try
            {
                dt = excelAzureBackend.excelAzureHelpers.parseDTString(date);

                regionSlug = await vml.FindRegionSlug(region);

                var validCurrency = excelAzureHelpers.validateCurrency(currency);
            }
            catch (Exception)
            {
                this.Response.StatusCode = 400;

                return("");
            }
            // Search for region slug

            var taskList = new List <Task <VmList> >();

            taskList.Add(vml.GetVmsAsync(region: regionSlug, bindingPeriod: 0, currency: currency, date: dt));
            taskList.Add(vml.GetVmsAsync(region: regionSlug, bindingPeriod: 1, currency: currency, date: dt));
            taskList.Add(vml.GetVmsAsync(region: regionSlug, bindingPeriod: 3, currency: currency, date: dt));

            await Task.WhenAll(taskList.ToArray());

            VmList vms = new VmList(configuration);

            for (int i = 0; i < taskList.Count; i++)
            {
                vms.vms.AddRange(taskList[i].Result.vms);
            }



            var result = vms.vms.Where(i => i.cores >= minCores && i.ram >= minRam && i.name.Contains(tier?.ToString() ?? "") && i.name.Contains(os?.ToString() ?? "") && i.price.HasValue).OrderBy(x => x.price);



/*            if (store)
 *          {
 *              string EndpointUri = configuration.GetValue<string>("CosmosDBSettings:EndpointUri");
 *              string PrimaryKey = configuration.GetValue<string>("CosmosDBSettings:PrimaryKey");
 *              string databaseName = configuration.GetValue<string>("CosmosDBSettings:databaseName");
 *
 *              DocumentClient Dbclient;
 *
 *              Dbo dbo = new Dbo();
 *              dbo.vms = result.ToList<vm>();
 *              dbo.region = region;
 *              dbo.currency = currency;
 *              dbo.date = DateTime.Now;
 *              // Save result to DocumentDB
 *              Dbclient = new DocumentClient(new Uri(EndpointUri), PrimaryKey);
 *              await Dbclient.CreateDocumentAsync(UriFactory.CreateDocumentCollectionUri(databaseName, "vm"), dbo);
 *
 *
 *
 *          }*/
            StringBuilder s     = new StringBuilder();
            DataTable     datbl = JsonConvert.DeserializeObject <DataTable>(JsonConvert.SerializeObject(result));

            foreach (DataColumn column in datbl.Columns)
            {
                s.Append(column.ColumnName + ";");
            }
            s.Append(Environment.NewLine);

            foreach (DataRow row in datbl.Rows)
            {
                for (var i = 0; i < datbl.Columns.Count; i++)
                {
                    s.Append(row[i] + ";");
                }
                s.Append(Environment.NewLine);
            }



            return(s.ToString());
        }