Init
This commit is contained in:
122
pkg/common/common.go
Normal file
122
pkg/common/common.go
Normal file
@@ -0,0 +1,122 @@
|
||||
package common
|
||||
|
||||
import (
|
||||
"math"
|
||||
"time"
|
||||
)
|
||||
|
||||
// Min or max (time.Duration datatype.)
|
||||
func MinMaxTimeDuration(array []time.Duration) (time.Duration, time.Duration) {
|
||||
if len(array) == 0 {
|
||||
return 0 * time.Microsecond, 0 * time.Microsecond
|
||||
} else {
|
||||
var max time.Duration = array[0]
|
||||
var min time.Duration = array[0]
|
||||
|
||||
for j := 1; j < len(array); j++ {
|
||||
value := array[j]
|
||||
if max < value {
|
||||
max = value
|
||||
}
|
||||
if min > value {
|
||||
min = value
|
||||
}
|
||||
}
|
||||
return min, max
|
||||
}
|
||||
}
|
||||
|
||||
// Sum (time.Duration datatype.)
|
||||
func SumTimeDuration(array []time.Duration) time.Duration {
|
||||
var result time.Duration = 0 * time.Microsecond
|
||||
for _, v := range array {
|
||||
result += v
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
// Mean (time.Duration datatype.)
|
||||
func MeanTimeDuration(array []time.Duration) time.Duration {
|
||||
sumArr := float64(SumTimeDuration(array)/time.Microsecond) / float64(len(array))
|
||||
|
||||
return time.Duration(sumArr) * time.Microsecond
|
||||
}
|
||||
|
||||
// stdDev (time.Duration datatype.)
|
||||
func StdDevTimeDuration(array []time.Duration) time.Duration {
|
||||
|
||||
square := float64(0)
|
||||
|
||||
for j := 1; j < len(array); j++ {
|
||||
square += float64((array[j]-MeanTimeDuration(array))/time.Microsecond) * float64((array[j]-MeanTimeDuration(array))/time.Microsecond)
|
||||
}
|
||||
|
||||
return time.Duration(math.Sqrt(square/float64(len(array)))) * time.Microsecond
|
||||
}
|
||||
|
||||
// Min or max function (int datatype.)
|
||||
func MinMax(array []int) (int, int) {
|
||||
if len(array) == 0 {
|
||||
return 0, 0
|
||||
} else {
|
||||
var max int = array[0]
|
||||
var min int = array[0]
|
||||
for _, value := range array {
|
||||
if max < value {
|
||||
max = value
|
||||
}
|
||||
if min > value {
|
||||
min = value
|
||||
}
|
||||
}
|
||||
return min, max
|
||||
}
|
||||
}
|
||||
|
||||
// Sum (int datatype.)
|
||||
func Sum(array []int) int {
|
||||
var result int = 0
|
||||
for _, v := range array {
|
||||
result += v
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
// Mean (float64 datatype.)
|
||||
func Mean(array []int) float64 {
|
||||
if len(array) == 0 {
|
||||
return 0.0
|
||||
} else {
|
||||
sumArr := float64(Sum(array)) / float64(len(array))
|
||||
|
||||
return float64(sumArr)
|
||||
}
|
||||
}
|
||||
|
||||
// stdDev (float64 datatype.)
|
||||
func StdDev(array []int) float64 {
|
||||
if len(array) == 0 {
|
||||
return 0.0
|
||||
} else {
|
||||
square := float64(0)
|
||||
|
||||
for _, v := range array {
|
||||
square += (float64(v) - Mean(array)) * (float64(v) - Mean(array))
|
||||
}
|
||||
|
||||
return math.Sqrt(square / float64(len(array)))
|
||||
}
|
||||
}
|
||||
|
||||
// Takes a slice and looks for an element in it. If found it will
|
||||
// return it's key, otherwise it will return -1 and a bool of false.
|
||||
func IfPresentInSlice(slice []int, val int) (int, bool) {
|
||||
for i, item := range slice {
|
||||
if item == val {
|
||||
return i, true
|
||||
}
|
||||
}
|
||||
return -1, false
|
||||
}
|
106
pkg/common/flowFields.go
Normal file
106
pkg/common/flowFields.go
Normal file
@@ -0,0 +1,106 @@
|
||||
package common
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/deepfence/FlowMeter/pkg/constants"
|
||||
)
|
||||
|
||||
type FlowFeatures struct {
|
||||
SrcIP interface{}
|
||||
DstIP interface{}
|
||||
Protocol interface{}
|
||||
SrcPort interface{}
|
||||
DstPort interface{}
|
||||
FlowDuration float64
|
||||
FlowLength float64
|
||||
FwdFlowLength float64
|
||||
BwdFlowLength float64
|
||||
PacketSizeTotal float64
|
||||
PacketSizeMean float64
|
||||
PacketSizeStd float64
|
||||
PacketSizeMin float64
|
||||
PacketSizeMax float64
|
||||
FwdPacketSizeTotal float64
|
||||
BwdPacketSizeTotal float64
|
||||
FwdPacketSizeMean float64
|
||||
BwdPacketSizeMean float64
|
||||
FwdPacketSizeStd float64
|
||||
BwdPacketSizeStd float64
|
||||
FwdPacketSizeMin float64
|
||||
BwdPacketSizeMin float64
|
||||
FwdPacketSizeMax float64
|
||||
BwdPacketSizeMax float64
|
||||
IATMean float64
|
||||
IATStd float64
|
||||
IATMin float64
|
||||
IATMax float64
|
||||
FwdIATTotal float64
|
||||
BwdIATTotal float64
|
||||
FwdIATMean float64
|
||||
BwdIATMean float64
|
||||
FwdIATStd float64
|
||||
BwdIATStd float64
|
||||
FwdIATMin float64
|
||||
BwdIATMin float64
|
||||
FwdIATMax float64
|
||||
BwdIATMax float64
|
||||
FlowLengthPerTime float64
|
||||
FwdFlowLengthPerTime float64
|
||||
BwdFlowLengthPerTime float64
|
||||
PacketSizeTotalPerTime float64
|
||||
FwdPacketSizeTotalPerTime float64
|
||||
BwdPacketSizeTotalPerTime float64
|
||||
}
|
||||
|
||||
// Create feature struct with appropriate datatypes for features.
|
||||
func FlowData(values []interface{}) FlowFeatures {
|
||||
flow := FlowFeatures{
|
||||
SrcIP: values[constants.MapKeys["srcIP"]],
|
||||
DstIP: values[constants.MapKeys["dstIP"]],
|
||||
Protocol: values[constants.MapKeys["protocol"]],
|
||||
SrcPort: values[constants.MapKeys["srcPort"]],
|
||||
DstPort: values[constants.MapKeys["dstPort"]],
|
||||
FlowDuration: float64(values[constants.MapKeys["flowDuration"]].(time.Duration) / time.Nanosecond),
|
||||
FlowLength: float64(values[constants.MapKeys["flowLength"]].(int)),
|
||||
FwdFlowLength: float64(values[constants.MapKeys["fwdFlowLength"]].(int)),
|
||||
BwdFlowLength: float64(values[constants.MapKeys["bwdFlowLength"]].(int)),
|
||||
PacketSizeTotal: float64(values[constants.MapKeys["packetSizeTotal"]].(int)),
|
||||
PacketSizeMean: values[constants.MapKeys["packetSizeMean"]].(float64),
|
||||
PacketSizeStd: values[constants.MapKeys["packetSizeStd"]].(float64),
|
||||
PacketSizeMin: float64(values[constants.MapKeys["packetSizeMin"]].(int)),
|
||||
PacketSizeMax: float64(values[constants.MapKeys["packetSizeMax"]].(int)),
|
||||
FwdPacketSizeTotal: float64(values[constants.MapKeys["fwdPacketSizeTotal"]].(int)),
|
||||
BwdPacketSizeTotal: float64(values[constants.MapKeys["bwdPacketSizeTotal"]].(int)),
|
||||
FwdPacketSizeMean: values[constants.MapKeys["fwdPacketSizeMean"]].(float64),
|
||||
BwdPacketSizeMean: values[constants.MapKeys["bwdPacketSizeMean"]].(float64),
|
||||
FwdPacketSizeStd: values[constants.MapKeys["fwdPacketSizeStd"]].(float64),
|
||||
BwdPacketSizeStd: values[constants.MapKeys["bwdPacketSizeStd"]].(float64),
|
||||
FwdPacketSizeMin: float64(values[constants.MapKeys["fwdPacketSizeMin"]].(int)),
|
||||
BwdPacketSizeMin: float64(values[constants.MapKeys["bwdPacketSizeMin"]].(int)),
|
||||
FwdPacketSizeMax: float64(values[constants.MapKeys["fwdPacketSizeMax"]].(int)),
|
||||
BwdPacketSizeMax: float64(values[constants.MapKeys["bwdPacketSizeMax"]].(int)),
|
||||
IATMean: float64(values[constants.MapKeys["IATMean"]].(time.Duration) / time.Nanosecond),
|
||||
IATStd: float64(values[constants.MapKeys["IATStd"]].(time.Duration) / time.Nanosecond),
|
||||
IATMin: float64(values[constants.MapKeys["IATMin"]].(time.Duration) / time.Nanosecond),
|
||||
IATMax: float64(values[constants.MapKeys["IATMax"]].(time.Duration) / time.Nanosecond),
|
||||
FwdIATTotal: float64(values[constants.MapKeys["fwdIATTotal"]].(time.Duration) / time.Nanosecond),
|
||||
BwdIATTotal: float64(values[constants.MapKeys["bwdIATTotal"]].(time.Duration) / time.Nanosecond),
|
||||
FwdIATMean: float64(values[constants.MapKeys["fwdIATMean"]].(time.Duration) / time.Nanosecond),
|
||||
BwdIATMean: float64(values[constants.MapKeys["bwdIATMean"]].(time.Duration) / time.Nanosecond),
|
||||
FwdIATStd: float64(values[constants.MapKeys["fwdIATStd"]].(time.Duration) / time.Nanosecond),
|
||||
BwdIATStd: float64(values[constants.MapKeys["bwdIATStd"]].(time.Duration) / time.Nanosecond),
|
||||
FwdIATMin: float64(values[constants.MapKeys["fwdIATMin"]].(time.Duration) / time.Nanosecond),
|
||||
BwdIATMin: float64(values[constants.MapKeys["bwdIATMin"]].(time.Duration) / time.Nanosecond),
|
||||
FwdIATMax: float64(values[constants.MapKeys["fwdIATMax"]].(time.Duration) / time.Nanosecond),
|
||||
BwdIATMax: float64(values[constants.MapKeys["bwdIATMax"]].(time.Duration) / time.Nanosecond),
|
||||
FlowLengthPerTime: float64(values[constants.MapKeys["flowLength"]].(int)) / float64(values[constants.MapKeys["flowDuration"]].(time.Duration)/time.Nanosecond),
|
||||
FwdFlowLengthPerTime: float64(values[constants.MapKeys["fwdFlowLength"]].(int)) / float64(values[constants.MapKeys["flowDuration"]].(time.Duration)/time.Nanosecond),
|
||||
BwdFlowLengthPerTime: float64(values[constants.MapKeys["bwdFlowLength"]].(int)) / float64(values[constants.MapKeys["flowDuration"]].(time.Duration)/time.Nanosecond),
|
||||
PacketSizeTotalPerTime: float64(values[constants.MapKeys["packetSizeTotal"]].(int)) / float64(values[constants.MapKeys["flowDuration"]].(time.Duration)/time.Nanosecond),
|
||||
FwdPacketSizeTotalPerTime: float64(values[constants.MapKeys["fwdPacketSizeTotal"]].(int)) / float64(values[constants.MapKeys["flowDuration"]].(time.Duration)/time.Nanosecond),
|
||||
BwdPacketSizeTotalPerTime: float64(values[constants.MapKeys["bwdPacketSizeTotal"]].(int)) / float64(values[constants.MapKeys["flowDuration"]].(time.Duration)/time.Nanosecond),
|
||||
}
|
||||
|
||||
return flow
|
||||
}
|
Reference in New Issue
Block a user