| 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) |
| } |
| } |