File: metric.go

package info (click to toggle)
golang-github-aws-aws-sdk-go 1.16.18%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: buster, buster-backports, experimental
  • size: 93,084 kB
  • sloc: ruby: 193; makefile: 174; xml: 11
file content (109 lines) | stat: -rw-r--r-- 3,818 bytes parent folder | download | duplicates (6)
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
99
100
101
102
103
104
105
106
107
108
109
package csm

import (
	"strconv"
	"time"

	"github.com/aws/aws-sdk-go/aws"
)

type metricTime time.Time

func (t metricTime) MarshalJSON() ([]byte, error) {
	ns := time.Duration(time.Time(t).UnixNano())
	return []byte(strconv.FormatInt(int64(ns/time.Millisecond), 10)), nil
}

type metric struct {
	ClientID  *string     `json:"ClientId,omitempty"`
	API       *string     `json:"Api,omitempty"`
	Service   *string     `json:"Service,omitempty"`
	Timestamp *metricTime `json:"Timestamp,omitempty"`
	Type      *string     `json:"Type,omitempty"`
	Version   *int        `json:"Version,omitempty"`

	AttemptCount *int `json:"AttemptCount,omitempty"`
	Latency      *int `json:"Latency,omitempty"`

	Fqdn           *string `json:"Fqdn,omitempty"`
	UserAgent      *string `json:"UserAgent,omitempty"`
	AttemptLatency *int    `json:"AttemptLatency,omitempty"`

	SessionToken   *string `json:"SessionToken,omitempty"`
	Region         *string `json:"Region,omitempty"`
	AccessKey      *string `json:"AccessKey,omitempty"`
	HTTPStatusCode *int    `json:"HttpStatusCode,omitempty"`
	XAmzID2        *string `json:"XAmzId2,omitempty"`
	XAmzRequestID  *string `json:"XAmznRequestId,omitempty"`

	AWSException        *string `json:"AwsException,omitempty"`
	AWSExceptionMessage *string `json:"AwsExceptionMessage,omitempty"`
	SDKException        *string `json:"SdkException,omitempty"`
	SDKExceptionMessage *string `json:"SdkExceptionMessage,omitempty"`

	FinalHTTPStatusCode      *int    `json:"FinalHttpStatusCode,omitempty"`
	FinalAWSException        *string `json:"FinalAwsException,omitempty"`
	FinalAWSExceptionMessage *string `json:"FinalAwsExceptionMessage,omitempty"`
	FinalSDKException        *string `json:"FinalSdkException,omitempty"`
	FinalSDKExceptionMessage *string `json:"FinalSdkExceptionMessage,omitempty"`

	DestinationIP    *string `json:"DestinationIp,omitempty"`
	ConnectionReused *int    `json:"ConnectionReused,omitempty"`

	AcquireConnectionLatency *int `json:"AcquireConnectionLatency,omitempty"`
	ConnectLatency           *int `json:"ConnectLatency,omitempty"`
	RequestLatency           *int `json:"RequestLatency,omitempty"`
	DNSLatency               *int `json:"DnsLatency,omitempty"`
	TCPLatency               *int `json:"TcpLatency,omitempty"`
	SSLLatency               *int `json:"SslLatency,omitempty"`

	MaxRetriesExceeded *int `json:"MaxRetriesExceeded,omitempty"`
}

func (m *metric) TruncateFields() {
	m.ClientID = truncateString(m.ClientID, 255)
	m.UserAgent = truncateString(m.UserAgent, 256)

	m.AWSException = truncateString(m.AWSException, 128)
	m.AWSExceptionMessage = truncateString(m.AWSExceptionMessage, 512)

	m.SDKException = truncateString(m.SDKException, 128)
	m.SDKExceptionMessage = truncateString(m.SDKExceptionMessage, 512)

	m.FinalAWSException = truncateString(m.FinalAWSException, 128)
	m.FinalAWSExceptionMessage = truncateString(m.FinalAWSExceptionMessage, 512)

	m.FinalSDKException = truncateString(m.FinalSDKException, 128)
	m.FinalSDKExceptionMessage = truncateString(m.FinalSDKExceptionMessage, 512)
}

func truncateString(v *string, l int) *string {
	if v != nil && len(*v) > l {
		nv := (*v)[:l]
		return &nv
	}

	return v
}

func (m *metric) SetException(e metricException) {
	switch te := e.(type) {
	case awsException:
		m.AWSException = aws.String(te.exception)
		m.AWSExceptionMessage = aws.String(te.message)
	case sdkException:
		m.SDKException = aws.String(te.exception)
		m.SDKExceptionMessage = aws.String(te.message)
	}
}

func (m *metric) SetFinalException(e metricException) {
	switch te := e.(type) {
	case awsException:
		m.FinalAWSException = aws.String(te.exception)
		m.FinalAWSExceptionMessage = aws.String(te.message)
	case sdkException:
		m.FinalSDKException = aws.String(te.exception)
		m.FinalSDKExceptionMessage = aws.String(te.message)
	}
}