package status import ( "pms-api-go/api/admin/adminModel" "pms-api-go/internal/app/ami/action" "pms-api-go/internal/app/mysql" "pms-api-go/internal/app/redis" socketio "pms-api-go/internal/app/socket_io" "pms-api-go/pkg/lfshook" "strings" "time" ) // InitAsterisk 初始化状态 func InitAsterisk() { var extensions []adminModel.GeoipRule if err := mysql.DBOrmInstance.Find(&extensions); err != nil { lfshook.NewLogger().Errorf("db find failure %+v", err) return } // 清空存在的状态 redis.ExtensionClean() // PJSIPShowContacts 查询注册状态 data, err := action.PJSIPShowContacts() if err != nil { lfshook.NewLogger().Errorf("PJSIPShowContacts error %+v", err) return } extens := make([]string, 0) // core show contacts for _, point := range data { exten := strings.Split(point.ObjectName, ";")[0] exten = strings.TrimSpace(exten) addr := point.ViaAddr // 远程注册 addr 不能取 ViaAddr, 通过 uri 获取 info := strings.Split(point.Uri, "@") if len(info) == 2 { addr = strings.Split(info[1], ":")[0] } redis.ExtensionSet(exten, point.Uri, addr, point.RoundtripUsec) extens = append(extens, exten) } initDNDStatus(&extens) initExtensionStatus() // 触发任务可能修改了文件 // go action.Command("dialplan reload") } func initDNDStatus(extensions *[]string) { for _, extension := range *extensions { value, _ := action.DBGet("DND", extension) if value != "" { redis.ExtensionDNDSet(extension, value) } } } func initExtensionStatus() { events, err := action.ExtensionStateList() if err != nil { lfshook.NewLogger().Error(err) return } for _, event := range events { //lfshook.NewLogger().Infof("init event %+v", event) redis.ExtensionSetStatus(event) } } func initScheduleChannel() { ticker := time.NewTicker(1500 * time.Millisecond) for { <-ticker.C data, err := action.CoreShowChannels() if err != nil { lfshook.NewLogger().Errorf("initScheduleChannel %+v", err) continue } socketio.SocketIOServer.BroadcastToNamespace("", "CustomCoreShowChannel", data) } }