-
Notifications
You must be signed in to change notification settings - Fork 119
/
proxy.go
94 lines (75 loc) · 2.77 KB
/
proxy.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
// Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with the License. A copy of the License is located at
//
// http://aws.amazon.com/apache2.0/
//
// or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
package sampling
import (
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/credentials"
"github.com/aws/aws-sdk-go/aws/endpoints"
"github.com/aws/aws-sdk-go/aws/request"
"github.com/aws/aws-sdk-go/aws/session"
xraySvc "github.com/aws/aws-sdk-go/service/xray"
"github.com/aws/aws-xray-sdk-go/daemoncfg"
"github.com/aws/aws-xray-sdk-go/internal/logger"
)
// proxy is an implementation of svcProxy that forwards requests to the XRay daemon
type proxy struct {
// XRay client for sending unsigned proxied requests to the daemon
xray *xraySvc.XRay
}
// NewProxy returns a Proxy
func newProxy(d *daemoncfg.DaemonEndpoints) (svcProxy, error) {
if d == nil {
d = daemoncfg.GetDaemonEndpoints()
}
logger.Infof("X-Ray proxy using address : %v", d.TCPAddr.String())
url := "http://" + d.TCPAddr.String()
// Endpoint resolver for proxying requests through the daemon
f := func(service, region string, optFns ...func(*endpoints.Options)) (endpoints.ResolvedEndpoint, error) {
return endpoints.ResolvedEndpoint{
URL: url,
}, nil
}
// Dummy session for unsigned requests
sess, err := session.NewSession(&aws.Config{
Region: aws.String("us-west-1"),
Credentials: credentials.NewStaticCredentials("", "", ""),
EndpointResolver: endpoints.ResolverFunc(f),
})
if err != nil {
return nil, err
}
x := xraySvc.New(sess)
// Remove Signer and replace with No-Op handler
x.Handlers.Sign.Clear()
x.Handlers.Sign.PushBack(func(*request.Request) {
// Do nothing
})
p := &proxy{xray: x}
return p, nil
}
// GetSamplingTargets calls the XRay daemon for sampling targets
func (p *proxy) GetSamplingTargets(s []*xraySvc.SamplingStatisticsDocument) (*xraySvc.GetSamplingTargetsOutput, error) {
input := &xraySvc.GetSamplingTargetsInput{
SamplingStatisticsDocuments: s,
}
output, err := p.xray.GetSamplingTargets(input)
if err != nil {
return nil, err
}
return output, nil
}
// GetSamplingRules calls the XRay daemon for sampling rules
func (p *proxy) GetSamplingRules() ([]*xraySvc.SamplingRuleRecord, error) {
input := &xraySvc.GetSamplingRulesInput{}
output, err := p.xray.GetSamplingRules(input)
if err != nil {
return nil, err
}
rules := output.SamplingRuleRecords
return rules, nil
}