]>
Commit | Line | Data |
---|---|---|
15c0b25d AP |
1 | package csm |
2 | ||
3 | import ( | |
4 | "strconv" | |
5 | "time" | |
107c1cdb ND |
6 | |
7 | "github.com/aws/aws-sdk-go/aws" | |
15c0b25d AP |
8 | ) |
9 | ||
10 | type metricTime time.Time | |
11 | ||
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 | |
15 | } | |
16 | ||
17 | type metric struct { | |
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"` | |
24 | ||
25 | AttemptCount *int `json:"AttemptCount,omitempty"` | |
26 | Latency *int `json:"Latency,omitempty"` | |
27 | ||
28 | Fqdn *string `json:"Fqdn,omitempty"` | |
29 | UserAgent *string `json:"UserAgent,omitempty"` | |
30 | AttemptLatency *int `json:"AttemptLatency,omitempty"` | |
31 | ||
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"` | |
38 | ||
39 | AWSException *string `json:"AwsException,omitempty"` | |
40 | AWSExceptionMessage *string `json:"AwsExceptionMessage,omitempty"` | |
41 | SDKException *string `json:"SdkException,omitempty"` | |
42 | SDKExceptionMessage *string `json:"SdkExceptionMessage,omitempty"` | |
43 | ||
107c1cdb ND |
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"` | |
49 | ||
15c0b25d AP |
50 | DestinationIP *string `json:"DestinationIp,omitempty"` |
51 | ConnectionReused *int `json:"ConnectionReused,omitempty"` | |
52 | ||
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"` | |
107c1cdb ND |
59 | |
60 | MaxRetriesExceeded *int `json:"MaxRetriesExceeded,omitempty"` | |
61 | } | |
62 | ||
63 | func (m *metric) TruncateFields() { | |
64 | m.ClientID = truncateString(m.ClientID, 255) | |
65 | m.UserAgent = truncateString(m.UserAgent, 256) | |
66 | ||
67 | m.AWSException = truncateString(m.AWSException, 128) | |
68 | m.AWSExceptionMessage = truncateString(m.AWSExceptionMessage, 512) | |
69 | ||
70 | m.SDKException = truncateString(m.SDKException, 128) | |
71 | m.SDKExceptionMessage = truncateString(m.SDKExceptionMessage, 512) | |
72 | ||
73 | m.FinalAWSException = truncateString(m.FinalAWSException, 128) | |
74 | m.FinalAWSExceptionMessage = truncateString(m.FinalAWSExceptionMessage, 512) | |
75 | ||
76 | m.FinalSDKException = truncateString(m.FinalSDKException, 128) | |
77 | m.FinalSDKExceptionMessage = truncateString(m.FinalSDKExceptionMessage, 512) | |
78 | } | |
79 | ||
80 | func truncateString(v *string, l int) *string { | |
81 | if v != nil && len(*v) > l { | |
82 | nv := (*v)[:l] | |
83 | return &nv | |
84 | } | |
85 | ||
86 | return v | |
87 | } | |
88 | ||
89 | func (m *metric) SetException(e metricException) { | |
90 | switch te := e.(type) { | |
91 | case awsException: | |
92 | m.AWSException = aws.String(te.exception) | |
93 | m.AWSExceptionMessage = aws.String(te.message) | |
94 | case sdkException: | |
95 | m.SDKException = aws.String(te.exception) | |
96 | m.SDKExceptionMessage = aws.String(te.message) | |
97 | } | |
98 | } | |
99 | ||
100 | func (m *metric) SetFinalException(e metricException) { | |
101 | switch te := e.(type) { | |
102 | case awsException: | |
103 | m.FinalAWSException = aws.String(te.exception) | |
104 | m.FinalAWSExceptionMessage = aws.String(te.message) | |
105 | case sdkException: | |
106 | m.FinalSDKException = aws.String(te.exception) | |
107 | m.FinalSDKExceptionMessage = aws.String(te.message) | |
108 | } | |
15c0b25d | 109 | } |