modelRT/alert/init.go

61 lines
1.4 KiB
Go

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
}