115 lines
3.4 KiB
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)
|
||
|
}
|