/
cloud.go
128 lines (96 loc) · 3.5 KB
/
cloud.go
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
package model
import (
"time"
"github.com/alecthomas/units"
)
type CloudVendor int
const (
AWS CloudVendor = 1 + iota
GCP
LYR
)
var vendors = [...]string{
"AWS",
"GCP",
"LYR",
}
func (c CloudVendor) String() string { return vendors[c-1] }
type CloudVendorDefinition struct {
VendorID CloudVendor `json:"vendorId" binding:"required"`
Name string `json:"name" binding:"required"`
ShortName string `json:"shortName" binding:"required"`
ParentCompany string `json:"parentCompany" binding:"required"`
ImageUrl string `json:"imageUrl" binding:"required"`
}
type GlobalRegionDefinition struct {
ID string `json:"id" binding:"required"`
Name string `json:"name" binding:"required"`
Description string `json:"description"`
Center *LngLatGeo `json:"center"`
Radius int `json:"radius"`
RegionIDs []string `json:"regionIds"`
}
type CloudCredential struct {
Id string `json:"id" binding:"required"`
KeyId string `json:"keyId" binding:"required"`
VendorID CloudVendor `json:"vendorId" binding:"required"`
RelatedAccount string `json:"relatedAccount" binding:"required"`
CreationTime time.Time `json:"creationTime" binding:"required"`
UseCount int `json:"useCount" binding:"required"`
Credential []byte `json:"credential" binding:"required"`
}
type DeploymentEndpoint struct {
ID string `json:"id" binding:"required"`
CodeID string `json:"codeId" binding:"required"`
CodeIDs []string `json:"codeIds"`
Name string `json:"name" binding:"required"`
Type string `json:"type" binding:"required"`
VendorID CloudVendor `json:"vendorId" binding:"required"`
RegionID string `json:"regionId" binding:"required"`
Endpoint string `json:"endpoint" binding:"required"`
Memory string `json:"memory" binding:"required"`
Timeout time.Duration `json:"duration" binding:"required"`
Metadata string `json:"metadata"`
Namespace string `json:"namespace"`
RelatedVega string `json:"relatedvega"`
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"`
}
type FrameworkDefinition struct {
Name string `json:"name" binding:"required"`
ImageUrl string `json:"imageUrl" binding:"required"`
}
type StorageDefinition struct {
Name string `json:"name" binding:"required"`
ImageUrl string `json:"imageUrl" binding:"required"`
Type string `json:"type" binding:"required"`
Endpoint string `json:"endpoint" binding:"required"`
}
type CloudRegionDefinition struct {
ID string `json:"id" binding:"required"`
VendorID CloudVendor `json:"vendorId" binding:"required"`
RegionID string `json:"regionId" binding:"required"`
Type string `json:"type" binding:"required"`
Location *LngLatGeo `json:"location" binding:"required"`
Framework FrameworkDefinition `json:"framework" binding:"required"`
Storage StorageDefinition `json:"storage" binding:"required"`
//
}
type LngLatGeo struct {
Longitute float64 `json:"longitude"`
Latitude float64 `json:"latitude"`
Address *LocationDescription `json:"address"`
}
type LocationDescription struct {
City AddressName `json:"city"`
Country AddressName `json:"country"`
StateProvince AddressName `json:"stateProvince"`
}
type AddressName struct {
LongName string `json:"longName"`
ShortName string `json:"shortName"`
}
func (deployment *DeploymentEndpoint) GetInitialConsumptionUnit() int64 {
b, _ := units.ParseBase2Bytes(deployment.Memory + "B")
return int64(b) / int64(128*units.MiB)
}