Skip to content

Commit

Permalink
fingerprint code refactor
Browse files Browse the repository at this point in the history
Some code cleanup:

* Use a field for setting EC2 metadata instead of env-vars in testing;
but keep environment variables for backward compatibility reasons

* Update tests to use testify
  • Loading branch information
Mahmood Ali committed Nov 26, 2019
1 parent f24dd5b commit b55bc64
Show file tree
Hide file tree
Showing 3 changed files with 151 additions and 250 deletions.
36 changes: 20 additions & 16 deletions client/fingerprint/env_aws.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,31 +49,22 @@ var ec2InstanceSpeedMap = map[*regexp.Regexp]int{
// EnvAWSFingerprint is used to fingerprint AWS metadata
type EnvAWSFingerprint struct {
StaticFingerprinter

// endpoint for EC2 metadata as expected by AWS SDK
endpoint string

logger log.Logger
}

// NewEnvAWSFingerprint is used to create a fingerprint from AWS metadata
func NewEnvAWSFingerprint(logger log.Logger) Fingerprint {
f := &EnvAWSFingerprint{
logger: logger.Named("env_aws"),
logger: logger.Named("env_aws"),
endpoint: strings.TrimSuffix(os.Getenv("AWS_ENV_URL"), "/meta-data/"),
}
return f
}

func ec2MetaClient(timeout time.Duration) *ec2metadata.EC2Metadata {
client := &http.Client{
Timeout: timeout,
Transport: cleanhttp.DefaultTransport(),
}

c := aws.NewConfig().WithHTTPClient(client)
if endpoint := os.Getenv("AWS_ENV_URL"); endpoint != "" {
endpoint = strings.TrimSuffix(endpoint, "/meta-data/")
c = c.WithEndpoint(endpoint)
}
return ec2metadata.New(session.New(), c)
}

func (f *EnvAWSFingerprint) Fingerprint(request *FingerprintRequest, response *FingerprintResponse) error {
cfg := request.Config

Expand All @@ -84,7 +75,7 @@ func (f *EnvAWSFingerprint) Fingerprint(request *FingerprintRequest, response *F
timeout = 1 * time.Millisecond
}

ec2meta := ec2MetaClient(timeout)
ec2meta := ec2MetaClient(f.endpoint, timeout)

if !ec2meta.Available() {
return nil
Expand Down Expand Up @@ -199,3 +190,16 @@ func (f *EnvAWSFingerprint) linkSpeed(ec2meta *ec2metadata.EC2Metadata) int {

return netSpeed
}

func ec2MetaClient(endpoint string, timeout time.Duration) *ec2metadata.EC2Metadata {
client := &http.Client{
Timeout: timeout,
Transport: cleanhttp.DefaultTransport(),
}

c := aws.NewConfig().WithHTTPClient(client)
if endpoint != "" {
c = c.WithEndpoint(endpoint)
}
return ec2metadata.New(session.New(), c)
}
Loading

0 comments on commit b55bc64

Please sign in to comment.