// 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 }