index.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package status
  2. import (
  3. "pms-api-go/api/admin/adminModel"
  4. "pms-api-go/internal/app/ami/action"
  5. "pms-api-go/internal/app/mysql"
  6. "pms-api-go/internal/app/redis"
  7. socketio "pms-api-go/internal/app/socket_io"
  8. "pms-api-go/pkg/lfshook"
  9. "strings"
  10. "time"
  11. )
  12. // InitAsterisk 初始化状态
  13. func InitAsterisk() {
  14. var extensions []adminModel.GeoipRule
  15. if err := mysql.DBOrmInstance.Find(&extensions); err != nil {
  16. lfshook.NewLogger().Errorf("db find failure %+v", err)
  17. return
  18. }
  19. // 清空存在的状态
  20. redis.ExtensionClean()
  21. // PJSIPShowContacts 查询注册状态
  22. data, err := action.PJSIPShowContacts()
  23. if err != nil {
  24. lfshook.NewLogger().Errorf("PJSIPShowContacts error %+v", err)
  25. return
  26. }
  27. extens := make([]string, 0)
  28. // core show contacts
  29. for _, point := range data {
  30. exten := strings.Split(point.ObjectName, ";")[0]
  31. exten = strings.TrimSpace(exten)
  32. addr := point.ViaAddr
  33. // 远程注册 addr 不能取 ViaAddr, 通过 uri 获取
  34. info := strings.Split(point.Uri, "@")
  35. if len(info) == 2 {
  36. addr = strings.Split(info[1], ":")[0]
  37. }
  38. redis.ExtensionSet(exten, point.Uri, addr, point.RoundtripUsec)
  39. extens = append(extens, exten)
  40. }
  41. initDNDStatus(&extens)
  42. initExtensionStatus()
  43. // 触发任务可能修改了文件
  44. // go action.Command("dialplan reload")
  45. }
  46. func initDNDStatus(extensions *[]string) {
  47. for _, extension := range *extensions {
  48. value, _ := action.DBGet("DND", extension)
  49. if value != "" {
  50. redis.ExtensionDNDSet(extension, value)
  51. }
  52. }
  53. }
  54. func initExtensionStatus() {
  55. events, err := action.ExtensionStateList()
  56. if err != nil {
  57. lfshook.NewLogger().Error(err)
  58. return
  59. }
  60. for _, event := range events {
  61. //lfshook.NewLogger().Infof("init event %+v", event)
  62. redis.ExtensionSetStatus(event)
  63. }
  64. }
  65. func initScheduleChannel() {
  66. ticker := time.NewTicker(1500 * time.Millisecond)
  67. for {
  68. <-ticker.C
  69. data, err := action.CoreShowChannels()
  70. if err != nil {
  71. lfshook.NewLogger().Errorf("initScheduleChannel %+v", err)
  72. continue
  73. }
  74. socketio.SocketIOServer.BroadcastToNamespace("", "CustomCoreShowChannel", data)
  75. }
  76. }