github.com/aavshr/aws-sdk-go@v1.41.3/aws/csm/metric.go (about)

     1  package csm
     2  
     3  import (
     4  	"strconv"
     5  	"time"
     6  
     7  	"github.com/aavshr/aws-sdk-go/aws"
     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  
    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  
    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"`
    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  	}
   109  }