1
0
Fork 0
mirror of https://github.com/anyproto/any-sync.git synced 2025-06-11 18:20:28 +09:00
any-sync/commonspace/sync/syncmetric.go
2024-06-25 14:20:08 +02:00

83 lines
2.3 KiB
Go

package sync
import (
"sync"
"sync/atomic"
"github.com/anyproto/any-sync/commonspace/sync/syncdeps"
"github.com/anyproto/any-sync/metric"
)
type syncMetric struct {
sync.Mutex
incomingMsgCount atomic.Int32
incomingMsgSize atomic.Int64
outgoingMsgCount atomic.Int32
outgoingMsgSize atomic.Int64
incomingReqCount atomic.Int32
incomingReqSize atomic.Int64
outgoingReqCount atomic.Int32
outgoingReqSize atomic.Int64
receivedRespCount atomic.Int32
receivedRespSize atomic.Int64
sentRespCount atomic.Int32
sentRespSize atomic.Int64
totalSize atomic.Int64
}
func (m *syncMetric) SyncMetricState() metric.SyncMetricState {
return metric.SyncMetricState{
IncomingMsgCount: uint32(m.incomingMsgCount.Load()),
IncomingMsgSize: uint64(m.incomingMsgSize.Load()),
OutgoingMsgCount: uint32(m.outgoingMsgCount.Load()),
OutgoingMsgSize: uint64(m.outgoingMsgSize.Load()),
IncomingReqCount: uint32(m.incomingReqCount.Load()),
IncomingReqSize: uint64(m.incomingReqSize.Load()),
OutgoingReqCount: uint32(m.outgoingReqCount.Load()),
OutgoingReqSize: uint64(m.outgoingReqSize.Load()),
ReceivedRespCount: uint32(m.receivedRespCount.Load()),
ReceivedRespSize: uint64(m.receivedRespSize.Load()),
SentRespCount: uint32(m.sentRespCount.Load()),
SentRespSize: uint64(m.sentRespSize.Load()),
TotalSize: uint64(m.totalSize.Load()),
}
}
func (m *syncMetric) UpdateQueueSize(size uint64, msgType int, add bool) {
var (
atSize *atomic.Int64
atCount *atomic.Int32
)
switch msgType {
case syncdeps.MsgTypeIncoming:
atSize = &m.incomingMsgSize
atCount = &m.incomingMsgCount
case syncdeps.MsgTypeOutgoing:
atSize = &m.outgoingMsgSize
atCount = &m.outgoingMsgCount
case syncdeps.MsgTypeIncomingRequest:
atSize = &m.incomingReqSize
atCount = &m.incomingReqCount
case syncdeps.MsgTypeOutgoingRequest:
atSize = &m.outgoingReqSize
atCount = &m.outgoingReqCount
case syncdeps.MsgTypeReceivedResponse:
atSize = &m.receivedRespSize
atCount = &m.receivedRespCount
case syncdeps.MsgTypeSentResponse:
atSize = &m.sentRespSize
atCount = &m.sentRespCount
default:
return
}
intSize := int64(size)
if add {
atSize.Add(intSize)
atCount.Add(1)
m.totalSize.Add(intSize)
} else {
atSize.Add(-intSize)
atCount.Add(-1)
m.totalSize.Add(-intSize)
}
}