mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-12-22 13:00:19 +00:00
78cb7af46f
Signed-off-by: Niels de Vos <ndevos@redhat.com>
110 lines
3.7 KiB
Go
110 lines
3.7 KiB
Go
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)
|
|
}
|
|
}
|