mirror of
https://github.com/kubeshark/kubeshark.git
synced 2025-08-15 15:15:31 +00:00
* close gopacket conn immediately * increase last ack threshold to 3 seconds * remove empty condition * add periodic stats * protect connections from concurrent updates * implement basic throttling base on live streams count * remove assembler mutex * pr fixes * change max conns default to 500 * create connectionId type * fix linter
99 lines
3.0 KiB
Go
99 lines
3.0 KiB
Go
package api
|
|
|
|
import (
|
|
"sync/atomic"
|
|
"time"
|
|
)
|
|
|
|
type AppStats struct {
|
|
StartTime time.Time `json:"-"`
|
|
ProcessedBytes uint64 `json:"processedBytes"`
|
|
PacketsCount uint64 `json:"packetsCount"`
|
|
TcpPacketsCount uint64 `json:"tcpPacketsCount"`
|
|
IgnoredPacketsCount uint64 `json:"ignoredPacketsCount"`
|
|
ReassembledTcpPayloadsCount uint64 `json:"reassembledTcpPayloadsCount"`
|
|
TlsConnectionsCount uint64 `json:"tlsConnectionsCount"`
|
|
MatchedPairs uint64 `json:"matchedPairs"`
|
|
DroppedTcpStreams uint64 `json:"droppedTcpStreams"`
|
|
LiveTcpStreams uint64 `json:"liveTcpStreams"`
|
|
IgnoredLastAckCount uint64 `json:"ignoredLastAckCount"`
|
|
ThrottledPackets uint64 `json:"throttledPackets"`
|
|
}
|
|
|
|
func (as *AppStats) IncMatchedPairs() {
|
|
atomic.AddUint64(&as.MatchedPairs, 1)
|
|
}
|
|
|
|
func (as *AppStats) IncDroppedTcpStreams() {
|
|
atomic.AddUint64(&as.DroppedTcpStreams, 1)
|
|
}
|
|
|
|
func (as *AppStats) IncPacketsCount() uint64 {
|
|
atomic.AddUint64(&as.PacketsCount, 1)
|
|
return as.PacketsCount
|
|
}
|
|
|
|
func (as *AppStats) IncTcpPacketsCount() {
|
|
atomic.AddUint64(&as.TcpPacketsCount, 1)
|
|
}
|
|
|
|
func (as *AppStats) IncIgnoredPacketsCount() {
|
|
atomic.AddUint64(&as.IgnoredPacketsCount, 1)
|
|
}
|
|
|
|
func (as *AppStats) IncIgnoredLastAckCount() {
|
|
atomic.AddUint64(&as.IgnoredLastAckCount, 1)
|
|
}
|
|
|
|
func (as *AppStats) IncThrottledPackets() {
|
|
atomic.AddUint64(&as.ThrottledPackets, 1)
|
|
}
|
|
|
|
func (as *AppStats) IncReassembledTcpPayloadsCount() {
|
|
atomic.AddUint64(&as.ReassembledTcpPayloadsCount, 1)
|
|
}
|
|
|
|
func (as *AppStats) IncTlsConnectionsCount() {
|
|
atomic.AddUint64(&as.TlsConnectionsCount, 1)
|
|
}
|
|
|
|
func (as *AppStats) IncLiveTcpStreams() {
|
|
atomic.AddUint64(&as.LiveTcpStreams, 1)
|
|
}
|
|
|
|
func (as *AppStats) DecLiveTcpStreams() {
|
|
atomic.AddUint64(&as.LiveTcpStreams, ^uint64(0))
|
|
}
|
|
|
|
func (as *AppStats) UpdateProcessedBytes(size uint64) {
|
|
atomic.AddUint64(&as.ProcessedBytes, size)
|
|
}
|
|
|
|
func (as *AppStats) SetStartTime(startTime time.Time) {
|
|
as.StartTime = startTime
|
|
}
|
|
|
|
func (as *AppStats) DumpStats() *AppStats {
|
|
currentAppStats := &AppStats{StartTime: as.StartTime}
|
|
|
|
currentAppStats.ProcessedBytes = resetUint64(&as.ProcessedBytes)
|
|
currentAppStats.PacketsCount = resetUint64(&as.PacketsCount)
|
|
currentAppStats.TcpPacketsCount = resetUint64(&as.TcpPacketsCount)
|
|
currentAppStats.IgnoredPacketsCount = resetUint64(&as.IgnoredPacketsCount)
|
|
currentAppStats.ReassembledTcpPayloadsCount = resetUint64(&as.ReassembledTcpPayloadsCount)
|
|
currentAppStats.TlsConnectionsCount = resetUint64(&as.TlsConnectionsCount)
|
|
currentAppStats.MatchedPairs = resetUint64(&as.MatchedPairs)
|
|
currentAppStats.DroppedTcpStreams = resetUint64(&as.DroppedTcpStreams)
|
|
currentAppStats.IgnoredLastAckCount = resetUint64(&as.IgnoredLastAckCount)
|
|
currentAppStats.ThrottledPackets = resetUint64(&as.ThrottledPackets)
|
|
currentAppStats.LiveTcpStreams = as.LiveTcpStreams
|
|
|
|
return currentAppStats
|
|
}
|
|
|
|
func resetUint64(ref *uint64) (val uint64) {
|
|
val = atomic.LoadUint64(ref)
|
|
atomic.StoreUint64(ref, 0)
|
|
return
|
|
}
|