7 "github.com/aws/aws-sdk-go/aws"
10 type metricTime time.Time
12 func (t metricTime) MarshalJSON() ([]byte, error) {
13 ns := time.Duration(time.Time(t).UnixNano())
14 return []byte(strconv.FormatInt(int64(ns/time.Millisecond), 10)), nil
18 ClientID *string `json:"ClientId,omitempty"`
19 API *string `json:"Api,omitempty"`
20 Service *string `json:"Service,omitempty"`
21 Timestamp *metricTime `json:"Timestamp,omitempty"`
22 Type *string `json:"Type,omitempty"`
23 Version *int `json:"Version,omitempty"`
25 AttemptCount *int `json:"AttemptCount,omitempty"`
26 Latency *int `json:"Latency,omitempty"`
28 Fqdn *string `json:"Fqdn,omitempty"`
29 UserAgent *string `json:"UserAgent,omitempty"`
30 AttemptLatency *int `json:"AttemptLatency,omitempty"`
32 SessionToken *string `json:"SessionToken,omitempty"`
33 Region *string `json:"Region,omitempty"`
34 AccessKey *string `json:"AccessKey,omitempty"`
35 HTTPStatusCode *int `json:"HttpStatusCode,omitempty"`
36 XAmzID2 *string `json:"XAmzId2,omitempty"`
37 XAmzRequestID *string `json:"XAmznRequestId,omitempty"`
39 AWSException *string `json:"AwsException,omitempty"`
40 AWSExceptionMessage *string `json:"AwsExceptionMessage,omitempty"`
41 SDKException *string `json:"SdkException,omitempty"`
42 SDKExceptionMessage *string `json:"SdkExceptionMessage,omitempty"`
44 FinalHTTPStatusCode *int `json:"FinalHttpStatusCode,omitempty"`
45 FinalAWSException *string `json:"FinalAwsException,omitempty"`
46 FinalAWSExceptionMessage *string `json:"FinalAwsExceptionMessage,omitempty"`
47 FinalSDKException *string `json:"FinalSdkException,omitempty"`
48 FinalSDKExceptionMessage *string `json:"FinalSdkExceptionMessage,omitempty"`
50 DestinationIP *string `json:"DestinationIp,omitempty"`
51 ConnectionReused *int `json:"ConnectionReused,omitempty"`
53 AcquireConnectionLatency *int `json:"AcquireConnectionLatency,omitempty"`
54 ConnectLatency *int `json:"ConnectLatency,omitempty"`
55 RequestLatency *int `json:"RequestLatency,omitempty"`
56 DNSLatency *int `json:"DnsLatency,omitempty"`
57 TCPLatency *int `json:"TcpLatency,omitempty"`
58 SSLLatency *int `json:"SslLatency,omitempty"`
60 MaxRetriesExceeded *int `json:"MaxRetriesExceeded,omitempty"`
63 func (m *metric) TruncateFields() {
64 m.ClientID = truncateString(m.ClientID, 255)
65 m.UserAgent = truncateString(m.UserAgent, 256)
67 m.AWSException = truncateString(m.AWSException, 128)
68 m.AWSExceptionMessage = truncateString(m.AWSExceptionMessage, 512)
70 m.SDKException = truncateString(m.SDKException, 128)
71 m.SDKExceptionMessage = truncateString(m.SDKExceptionMessage, 512)
73 m.FinalAWSException = truncateString(m.FinalAWSException, 128)
74 m.FinalAWSExceptionMessage = truncateString(m.FinalAWSExceptionMessage, 512)
76 m.FinalSDKException = truncateString(m.FinalSDKException, 128)
77 m.FinalSDKExceptionMessage = truncateString(m.FinalSDKExceptionMessage, 512)
80 func truncateString(v *string, l int) *string {
81 if v != nil && len(*v) > l {
89 func (m *metric) SetException(e metricException) {
90 switch te := e.(type) {
92 m.AWSException = aws.String(te.exception)
93 m.AWSExceptionMessage = aws.String(te.message)
95 m.SDKException = aws.String(te.exception)
96 m.SDKExceptionMessage = aws.String(te.message)
100 func (m *metric) SetFinalException(e metricException) {
101 switch te := e.(type) {
103 m.FinalAWSException = aws.String(te.exception)
104 m.FinalAWSExceptionMessage = aws.String(te.message)
106 m.FinalSDKException = aws.String(te.exception)
107 m.FinalSDKExceptionMessage = aws.String(te.message)