index.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package app
  2. import (
  3. "fmt"
  4. "os/exec"
  5. "pbx-api-gin/internal/app/ami/action"
  6. "pbx-api-gin/internal/app/mysql"
  7. "pbx-api-gin/internal/app/stc"
  8. "pbx-api-gin/internal/app/stc/active"
  9. "pbx-api-gin/internal/app/stc/priority"
  10. "pbx-api-gin/internal/app/stc/socket"
  11. "pbx-api-gin/pkg/lfshook"
  12. "pbx-api-gin/pkg/utils"
  13. "strings"
  14. "time"
  15. )
  16. func StartApp() {
  17. //init mysql
  18. mysql.CreateDBInstance()
  19. //Get cab number acording to IP
  20. IP, err := getIPByCommand()
  21. if err != nil {
  22. lfshook.NewLogger().Infof("Get IP err :%+v", err)
  23. }
  24. if IP[len(IP)-2:] == "81" {
  25. active.CabNum = "8"
  26. } else {
  27. active.CabNum = "1"
  28. }
  29. lfshook.NewLogger().Infof("=================cab number:%s===========", active.CabNum)
  30. //init the active status
  31. active.Actived = true
  32. //get priority
  33. priority.GetPriority()
  34. // 启动带有重连机制的连接管理协程MC1
  35. go stc.StartStcConnection(socket.Conn, "1")
  36. // 启动带有重连机制的连接管理协程MC8
  37. go stc.StartStcConnection(socket.Conn8, "8")
  38. // 启动其他服务...
  39. // 启动 AMI
  40. go func() {
  41. action.StartAMI(func() {
  42. lfshook.NewLogger().Info("ami callback")
  43. }, []func(event map[string]string){})
  44. }()
  45. //refresh extension status
  46. time.Sleep(3 * time.Second)
  47. utils.ExecCmdAsync("/usr/sbin/asterisk", "-rx", "reload")
  48. }
  49. // Get eth0 IP
  50. func getIPByCommand() (string, error) {
  51. cmd := "ifconfig eth0 | grep 'inet addr:' | awk '{print $2}' | cut -d: -f2"
  52. out, err := exec.Command("bash", "-c", cmd).CombinedOutput()
  53. if err != nil {
  54. return "", err
  55. }
  56. ip := strings.TrimSpace(string(out))
  57. if ip == "" {
  58. return "", fmt.Errorf("no IP address found")
  59. }
  60. return ip, nil
  61. }