terraform/vendor/github.com/newrelic/go-agent/internal/connect_reply.go

115 lines
3.4 KiB
Go

package internal
import (
"strings"
"time"
)
// AgentRunID identifies the current connection with the collector.
type AgentRunID string
func (id AgentRunID) String() string {
return string(id)
}
// AppRun contains information regarding a single connection session with the
// collector. It is created upon application connect and is afterwards
// immutable.
type AppRun struct {
*ConnectReply
Collector string
}
// ConnectReply contains all of the settings and state send down from the
// collector. It should not be modified after creation.
type ConnectReply struct {
RunID AgentRunID `json:"agent_run_id"`
// Transaction Name Modifiers
SegmentTerms segmentRules `json:"transaction_segment_terms"`
TxnNameRules metricRules `json:"transaction_name_rules"`
URLRules metricRules `json:"url_rules"`
MetricRules metricRules `json:"metric_name_rules"`
// Cross Process
EncodingKey string `json:"encoding_key"`
CrossProcessID string `json:"cross_process_id"`
TrustedAccounts []int `json:"trusted_account_ids"`
// Settings
KeyTxnApdex map[string]float64 `json:"web_transactions_apdex"`
ApdexThresholdSeconds float64 `json:"apdex_t"`
CollectAnalyticsEvents bool `json:"collect_analytics_events"`
CollectCustomEvents bool `json:"collect_custom_events"`
CollectTraces bool `json:"collect_traces"`
CollectErrors bool `json:"collect_errors"`
CollectErrorEvents bool `json:"collect_error_events"`
// RUM
AgentLoader string `json:"js_agent_loader"`
Beacon string `json:"beacon"`
BrowserKey string `json:"browser_key"`
AppID string `json:"application_id"`
ErrorBeacon string `json:"error_beacon"`
JSAgentFile string `json:"js_agent_file"`
Messages []struct {
Message string `json:"message"`
Level string `json:"level"`
} `json:"messages"`
}
// ConnectReplyDefaults returns a newly allocated ConnectReply with the proper
// default settings. A pointer to a global is not used to prevent consumers
// from changing the default settings.
func ConnectReplyDefaults() *ConnectReply {
return &ConnectReply{
ApdexThresholdSeconds: 0.5,
CollectAnalyticsEvents: true,
CollectCustomEvents: true,
CollectTraces: true,
CollectErrors: true,
CollectErrorEvents: true,
}
}
// CalculateApdexThreshold calculates the apdex threshold.
func CalculateApdexThreshold(c *ConnectReply, txnName string) time.Duration {
if t, ok := c.KeyTxnApdex[txnName]; ok {
return floatSecondsToDuration(t)
}
return floatSecondsToDuration(c.ApdexThresholdSeconds)
}
// CreateFullTxnName uses collector rules and the appropriate metric prefix to
// construct the full transaction metric name from the name given by the
// consumer.
func CreateFullTxnName(input string, reply *ConnectReply, isWeb bool) string {
var afterURLRules string
if "" != input {
afterURLRules = reply.URLRules.Apply(input)
if "" == afterURLRules {
return ""
}
}
prefix := backgroundMetricPrefix
if isWeb {
prefix = webMetricPrefix
}
var beforeNameRules string
if strings.HasPrefix(afterURLRules, "/") {
beforeNameRules = prefix + afterURLRules
} else {
beforeNameRules = prefix + "/" + afterURLRules
}
afterNameRules := reply.TxnNameRules.Apply(beforeNameRules)
if "" == afterNameRules {
return ""
}
return reply.SegmentTerms.apply(afterNameRules)
}