/
collector.go
98 lines (82 loc) · 2.27 KB
/
collector.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
//
// Copyright 2020 New Relic Corporation. All rights reserved.
// SPDX-License-Identifier: Apache-2.0
//
package collector
import (
"crypto/sha256"
"encoding/base64"
"net/url"
"regexp"
)
const (
CommandMetrics string = "metric_data"
CommandErrors = "error_data"
CommandTraces = "transaction_sample_data"
CommandSlowSQLs = "sql_trace_data"
CommandCustomEvents = "custom_event_data"
CommandErrorEvents = "error_event_data"
CommandTxnEvents = "analytic_event_data"
CommandConnect = "connect"
CommandPreconnect = "preconnect"
CommandSpanEvents = "span_event_data"
CommandLogEvents = "log_event_data"
CommandPhpPackages = "update_loaded_modules"
)
const (
protocolVersion = "17"
)
// LicenseKey represents a license key for an account.
type LicenseKey string
func (cmd *RpmCmd) String() string {
if cmd.RunID != "" {
return cmd.Name + " " + cmd.RunID
}
return cmd.Name
}
func (cmd *RpmCmd) url(obfuscate bool) string {
var u url.URL
u.Host = cmd.Collector
u.Path = "agent_listener/invoke_raw_method"
u.Scheme = "https"
query := url.Values{}
query.Set("marshal_format", "json")
query.Set("protocol_version", protocolVersion)
query.Set("method", cmd.Name)
if obfuscate {
query.Set("license_key", cmd.License.String())
} else {
query.Set("license_key", string(cmd.License))
}
if cmd.RunID != "" {
query.Set("run_id", cmd.RunID)
}
u.RawQuery = query.Encode()
return u.String()
}
// String obfuscates the license key by removing all but a safe prefix
// and suffix.
func (key LicenseKey) String() string {
if n := len(key); n > 4 {
return string(key[0:2] + ".." + key[n-2:])
}
return string(key)
}
func (key LicenseKey) Sha256() string {
sum := sha256.Sum256([]byte(key))
return base64.StdEncoding.EncodeToString(sum[:])
}
var (
preconnectHostDefault = "collector.newrelic.com"
preconnectRegionLicenseRegex = regexp.MustCompile(`(^.+?)x`)
)
func CalculatePreconnectHost(license LicenseKey, overrideHost string) string {
if "" != overrideHost {
return overrideHost
}
m := preconnectRegionLicenseRegex.FindStringSubmatch(string(license))
if len(m) > 1 {
return "collector." + m[1] + ".nr-data.net"
}
return preconnectHostDefault
}