-
Notifications
You must be signed in to change notification settings - Fork 0
/
config.go
119 lines (105 loc) · 5.39 KB
/
config.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
package eureka
import (
"encoding/xml"
"fmt"
)
type ApplicationsInfo struct {
Applications *Applications `json:"applications"`
}
type Applications struct {
XMLName xml.Name `xml:"applications"`
VersionsDelta string `xml:"versions__delta,omitempty"`
AppsHashcode string `xml:"apps__hashcode,omitempty"`
ApplicationList []Application `xml:"application"`
}
type Application struct {
XMLName xml.Name `xml:"application"`
Name string `xml:"name"`
Instances []Instance `xml:"instance"`
}
type InstanceInfo struct {
Instance *Instance `json:"instance"`
}
type Instance struct {
XMLName xml.Name `xml:"instance"`
HostName string `xml:"hostName" json:"hostName"`
HomePageURL string `xml:"homePageUrl,omitempty" json:"homePageUrl,omitempty"`
StatusPageURL string `xml:"statusPageUrl" json:"statusPageUrl"`
HealthCheckURL string `xml:"healthCheckUrl,omitempty" json:"healthCheckUrl,omitempty"`
App string `xml:"app" json:"app"`
IPAddr string `xml:"ipAddr" json:"ipAddr"`
VipAddress string `xml:"vipAddress" json:"vipAddress"`
SecureVipAddress string `xml:"secureVipAddress,omitempty" json:"secureVipAddress,omitempty"`
Status string `xml:"status" json:"status"`
Port *Port `xml:"port,omitempty" json:"port,omitempty"`
SecurePort *Port `xml:"securePort,omitempty" json:"securePort,omitempty"`
DataCenterInfo *DataCenterInfo `xml:"dataCenterInfo" json:"dataCenterInfo"`
LeaseInfo *LeaseInfo `xml:"leaseInfo,omitempty" json:"leaseInfo,omitempty"`
Metadata map[string]interface{} `xml:"-" json:"metadata,omitempty"`
IsCoordinatingDiscoveryServer string `xml:"isCoordinatingDiscoveryServer,omitempty" json:"isCoordinatingDiscoveryServer,omitempty"`
LastUpdatedTimestamp string `xml:"lastUpdatedTimestamp,omitempty" json:"lastUpdatedTimestamp,omitempty"`
LastDirtyTimestamp string `xml:"lastDirtyTimestamp,omitempty" json:"lastDirtyTimestamp,omitempty"`
ActionType string `xml:"actionType,omitempty" json:"actionType,omitempty"`
OverriddenStatus string `xml:"overriddenstatus,omitempty" json:"overriddenstatus,omitempty"`
CountryID int `xml:"countryId,omitempty" json:"countryId,omitempty"`
InstanceID string `xml:"instanceId,omitempty" json:"instanceId,omitempty"`
}
// Port 端口
type Port struct {
Port int `xml:",chardata" json:"$"`
Enabled string `xml:"enabled,attr" json:"@enabled"`
}
// DataCenterInfo
type DataCenterInfo struct {
Name string `xml:"name" json:"name"`
Class string `xml:"class,attr" json:"@class"`
Metadata *DataCenterMetadata `xml:"metadata,omitempty" json:"metadata,omitempty"`
}
// DataCenterMetadata
type DataCenterMetadata struct {
AmiLaunchIndex string `xml:"ami-launch-index,omitempty" json:"ami-launch-index,omitempty"`
LocalHostname string `xml:"local-hostname,omitempty" json:"local-hostname,omitempty"`
AvailabilityZone string `xml:"availability-zone,omitempty" json:"availability-zone,omitempty"`
InstanceID string `xml:"instance-id,omitempty" json:"instance-id,omitempty"`
PublicIpv4 string `xml:"public-ipv4,omitempty" json:"public-ipv4,omitempty"`
PublicHostname string `xml:"public-hostname,omitempty" json:"public-hostname,omitempty"`
AmiManifestPath string `xml:"ami-manifest-path,omitempty" json:"ami-manifest-path,omitempty"`
LocalIpv4 string `xml:"local-ipv4,omitempty" json:"local-ipv4,omitempty"`
Hostname string `xml:"hostname,omitempty" json:"hostname,omitempty"`
AmiID string `xml:"ami-id,omitempty" json:"ami-id,omitempty"`
InstanceType string `xml:"instance-type,omitempty" json:"instance-type,omitempty"`
}
// LeaseInfo
type LeaseInfo struct {
RenewalIntervalInSecs int `xml:"renewalIntervalInSecs,omitempty" json:"renewalIntervalInSecs,omitempty"`
DurationInSecs int `xml:"durationInSecs,omitempty" json:"durationInSecs,omitempty"`
}
// newInstance
func newInstance(config *eurekaConfig) *Instance {
instance := &Instance{
InstanceID: fmt.Sprintf("%s:%s:%d", config.appIP, config.appName, config.port),
HostName: config.appIP,
App: config.appName,
IPAddr: config.appIP,
Port: &Port{
Port: config.port,
Enabled: "true",
},
VipAddress: config.appName,
SecureVipAddress: config.appName,
LeaseInfo: &LeaseInfo{
RenewalIntervalInSecs: config.renewalIntervalInSecs,
DurationInSecs: config.durationInSecs,
},
Status: "UP",
OverriddenStatus: "UNKNOWN",
DataCenterInfo: &DataCenterInfo{
Name: "MyOwn",
Class: "com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo",
},
Metadata: config.metadata,
}
instance.HomePageURL = fmt.Sprintf("http://%s:%d", config.appIP, config.port)
instance.StatusPageURL = fmt.Sprintf("http://%s:%d/info", config.appIP, config.port)
return instance
}