-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathinstanceFunctions.cs
More file actions
150 lines (129 loc) · 5.56 KB
/
Copy pathinstanceFunctions.cs
File metadata and controls
150 lines (129 loc) · 5.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using ExcelDna.Integration;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace excelInstance
{
public static class instanceFunctions
{
private static int test = 2;
private static List<VmList> DC = new List<VmList>();
[ExcelFunction(Description = "Get VM")]
public static string getVMc(int minCores, int minRam, int ri, string region, string currency)
{
if (currency.Equals("") || region.Equals("") || minCores.Equals(0) || minRam.Equals(0))
{
return "";
}
else
{
Vm result = new Vm();
//Search
var Search = DC.Where(v => v.region.ToLower() == region.ToLower() && v.currency.ToLower() == currency.ToLower());
if (Search.Count<VmList>() > 1) { throw new Exception(); }
if (Search.Count<VmList>() == 1)
{
if (Search.First<VmList>().vms.Where(i => i.cores >= minCores && i.ram >= minRam && i.price.HasValue).OrderBy(x => x.price).Count<Vm>() > 0)
{
result = (Vm)Search.First<VmList>().vms.Where(i => i.cores >= minCores && i.ram >= minRam && i.price.HasValue).OrderBy(x => x.price).First();
return result.name;
}
else
{
return "Not Found!";
}
}
else
{
Fetcher ft = new Fetcher();
try
{
DC.Add(ft.GetDC(currency, region));
}
catch (Exception)
{
return "Invalid Input!";
}
Search = DC.Where(v => v.region == region.ToLower() && v.currency == currency.ToLower());
if (Search.First<VmList>().vms.Where(i => i.cores >= minCores && i.ram >= minRam && i.price.HasValue).OrderBy(x => x.price).Count<Vm>() > 0)
{
result = (Vm)Search.First<VmList>().vms.Where(i => i.cores >= minCores && i.ram >= minRam && i.price.HasValue).OrderBy(x => x.price).First();
return result.name;
}
else
{
return "Not Found!";
}
}
}
}
[ExcelFunction(Description = "Get Price Hour")]
public static double getPriceHourc(string name, int ri, string region, string currency)
{
if (name.Equals("") || region.Equals("") || currency.Equals("") || ri.Equals(""))
{
throw new ArgumentOutOfRangeException();
}
else
{
Vm result = new Vm();
//Search
var Search = DC.Where(v => v.region.ToLower() == region.ToLower() && v.currency.ToLower() == currency.ToLower());
if (Search.Count<VmList>() > 1) { throw new Exception(); }
if (Search.Count<VmList>() == 1)
{
if (Search.First<VmList>().vms.Where(i => i.name.Equals(name) && i.price.HasValue && i.ri == ri).OrderBy(x => x.price).Count<Vm>() > 0)
{
result = (Vm)Search.First<VmList>().vms.Where(i => i.name.Equals(name) && i.price.HasValue && i.ri == ri).OrderBy(x => x.price).First();
return (double) result.price;
}
else
{
throw new ArgumentOutOfRangeException();
}
}
else
{
Fetcher ft = new Fetcher();
try
{
DC.Add(ft.GetDC(currency, region));
}
catch (Exception)
{
throw new ArgumentOutOfRangeException();
}
Search = DC.Where(v => v.region == region.ToLower() && v.currency == currency.ToLower());
if (Search.First<VmList>().vms.Where(i => i.name.Equals(name) && i.price.HasValue && i.ri == ri).OrderBy(x => x.price).Count<Vm>() > 0)
{
result = (Vm)Search.First<VmList>().vms.Where(i => i.name.Equals(name) && i.price.HasValue && i.ri == ri).OrderBy(x => x.price).First();
return (double) result.price;
}
else
{
throw new ArgumentOutOfRangeException();
}
}
}
}
}
class Fetcher
{
private HttpClient client = new HttpClient();
public VmList GetDC(string currency, string region)
{
var ResponseTask = client.GetAsync("https://vmsizecdnv.azureedge.net/api/values/?seed=123®ion=" + region + "¤cy="+currency);
ResponseTask.Wait();
var response = ResponseTask.Result;
var ContentTask = response.Content.ReadAsStringAsync();
ContentTask.Wait();
var JsonContent = JsonConvert.DeserializeObject<List<Vm>>(ContentTask.Result);
return new VmList() { currency = currency.ToLower(), region = region.ToLower(), vms = JsonContent };
}
}
}