package alert import ( "sync" "modelRT/constant" ) var ( once sync.Once _globalManagerMu sync.RWMutex _globalManager *EventManager ) // Event define alert event struct type Event struct { ComponentID int64 AnchorName string Level constant.AlertLevel Message string StartTime int64 } // EventManager define store and manager alert event struct type EventManager struct { events map[constant.AlertLevel][]Event } // AddEvent 添加一个新的报警事件 func (am *EventManager) AddEvent(event Event) { am.events[event.Level] = append(am.events[event.Level], event) } // GetEventsByLevel 根据报警等级查找报警事件 func (am *EventManager) GetEventsByLevel(level constant.AlertLevel) []Event { return am.events[level] } // InitAlertEventManager define new alert event manager func InitAlertEventManager() *EventManager { return &EventManager{ events: make(map[constant.AlertLevel][]Event), } } // InitAlertManagerInstance return instance of zap logger func InitAlertManagerInstance() *EventManager { once.Do(func() { _globalManager = InitAlertEventManager() }) return _globalManager } // GetAlertMangerInstance returns the global alert manager instance It's safe for concurrent use. func GetAlertMangerInstance() *EventManager { _globalManagerMu.RLock() manager := _globalManager _globalManagerMu.RUnlock() return manager }