61 lines
1.4 KiB
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
|
|
}
|