73 lines
2.1 KiB
Go
73 lines
2.1 KiB
Go
// Package realtimedata define real time data operation functions
|
|
package realtimedata
|
|
|
|
import (
|
|
"sync"
|
|
)
|
|
|
|
// ComputeConfig define struct of measurement computation
|
|
type ComputeConfig struct {
|
|
Cause map[string]any
|
|
Action map[string]any
|
|
// TODO 预留自由调整的入口
|
|
// min consecutive breach count
|
|
minBreachCount int
|
|
Duration int
|
|
DataSize int64
|
|
QueryKey string
|
|
StopGchan chan struct{}
|
|
Analyzer RealTimeAnalyzer
|
|
}
|
|
|
|
// MeasComputeState define struct of manages the state of measurement computations using sync.Map
|
|
type MeasComputeState struct {
|
|
measMap sync.Map
|
|
}
|
|
|
|
// NewMeasComputeState define func to create and returns a new instance of MeasComputeState
|
|
func NewMeasComputeState() *MeasComputeState {
|
|
return &MeasComputeState{}
|
|
}
|
|
|
|
// Store define func to store a compute configuration for the specified key
|
|
func (m *MeasComputeState) Store(key string, config *ComputeConfig) {
|
|
m.measMap.Store(key, config)
|
|
}
|
|
|
|
// Load define func to retrieve the compute configuration for the specified key
|
|
func (m *MeasComputeState) Load(key string) (*ComputeConfig, bool) {
|
|
value, ok := m.measMap.Load(key)
|
|
if !ok {
|
|
return nil, false
|
|
}
|
|
return value.(*ComputeConfig), true
|
|
}
|
|
|
|
// Delete define func to remove the compute configuration for the specified key
|
|
func (m *MeasComputeState) Delete(key string) {
|
|
m.measMap.Delete(key)
|
|
}
|
|
|
|
// LoadOrStore define func to returns the existing compute configuration for the key if present,otherwise stores and returns the given configuration
|
|
func (m *MeasComputeState) LoadOrStore(key string, config *ComputeConfig) (*ComputeConfig, bool) {
|
|
value, loaded := m.measMap.LoadOrStore(key, config)
|
|
return value.(*ComputeConfig), loaded
|
|
}
|
|
|
|
// Range define func to iterate over all key-configuration pairs in the map
|
|
func (m *MeasComputeState) Range(f func(key string, config *ComputeConfig) bool) {
|
|
m.measMap.Range(func(key, value any) bool {
|
|
return f(key.(string), value.(*ComputeConfig))
|
|
})
|
|
}
|
|
|
|
// Len define func to return the number of compute configurations in the map
|
|
func (m *MeasComputeState) Len() int {
|
|
count := 0
|
|
m.measMap.Range(func(_, _ any) bool {
|
|
count++
|
|
return true
|
|
})
|
|
return count
|
|
}
|