extension.go 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package redis
  2. import (
  3. "context"
  4. "crm-api/internal/app/ami/model"
  5. "crm-api/pkg/lfshook"
  6. "encoding/json"
  7. "fmt"
  8. "strings"
  9. )
  10. func ExtensionClean() {
  11. ctx := context.Background()
  12. keys, err := RedisInstance.Keys(ctx, "extension-*").Result()
  13. if err != nil {
  14. lfshook.NewLogger().Error("get redis keys error", err)
  15. return
  16. }
  17. // lfshook.NewLogger().Info("ready clean keys", keys)
  18. RedisInstance.Del(ctx, keys...)
  19. }
  20. func ExtensionDNDSet(endpointName, value string) {
  21. ctx := context.Background()
  22. RedisInstance.Set(ctx, fmt.Sprintf("extension-dnd-%s", endpointName), value, 0)
  23. }
  24. func ExtensionDNDGet(endpointName string) (value string) {
  25. ctx := context.Background()
  26. return RedisInstance.Get(ctx, fmt.Sprintf("extension-dnd-%s", endpointName)).Val()
  27. }
  28. func ExtensionDNDDel(endpointName string) {
  29. ctx := context.Background()
  30. RedisInstance.Del(ctx, fmt.Sprintf("extension-dnd-%s", endpointName))
  31. }
  32. func ExtensionSet(endpointName, uri, addr, roundtripusec string) {
  33. ctx := context.Background()
  34. RedisInstance.Set(ctx, fmt.Sprintf("extension-contact-uri-%s", endpointName), uri, 0)
  35. RedisInstance.Set(ctx, fmt.Sprintf("extension-contact-roundtripusec-%s", endpointName), roundtripusec, 0)
  36. addrKey := fmt.Sprintf("extension-contact-addr_delay-%s", endpointName)
  37. oldValue := RedisInstance.Get(ctx, addrKey).Val()
  38. if !strings.Contains(oldValue, addr) {
  39. newValue := fmt.Sprintf("%s%s[%s]\n", oldValue, addr, roundtripusec)
  40. //lfshook.NewLogger().Infof("new %+v, old %+v addr %+v", newValue, oldValue, addr)
  41. RedisInstance.Set(ctx, addrKey, newValue, 0)
  42. }
  43. }
  44. func ExtensionSetStatus(status *model.ExtensionStatus) {
  45. ctx := context.Background()
  46. statusStr, _ := json.Marshal(status)
  47. RedisInstance.Set(ctx, fmt.Sprintf("extension-status-%s", status.Exten), statusStr, 0)
  48. }
  49. func ExtensionGetStatus(extension string) (status *model.ExtensionStatus) {
  50. ctx := context.Background()
  51. status = &model.ExtensionStatus{
  52. StatusText: "Unavailable",
  53. }
  54. statusStr := RedisInstance.Get(ctx, fmt.Sprintf("extension-status-%s", extension)).Val()
  55. if len(statusStr) == 0 {
  56. //lfshook.NewLogger().Warnf("extension-status-%s redis value empty", extension)
  57. return
  58. }
  59. if err := json.Unmarshal([]byte(statusStr), status); err != nil {
  60. lfshook.NewLogger().Errorf("json unmarshall %s failure %+v", statusStr, err)
  61. }
  62. return
  63. }
  64. func ExtensionDel(endpointName, uri, addr, roundtripusec string) {
  65. ctx := context.Background()
  66. RedisInstance.Del(ctx, fmt.Sprintf("extension-contact-uri-%s", endpointName))
  67. RedisInstance.Del(ctx, fmt.Sprintf("extension-contact-roundtripusec-%s", endpointName))
  68. addrKey := fmt.Sprintf("extension-contact-addr_delay-%s", endpointName)
  69. oldValue := RedisInstance.Get(ctx, addrKey).Val()
  70. if oldValue != "" {
  71. addrs := strings.Split(oldValue, "\n")
  72. newAddrs := make([]string, 0)
  73. for _, item := range addrs {
  74. if !strings.Contains(item, addr) {
  75. newAddrs = append(newAddrs, item)
  76. }
  77. }
  78. //lfshook.NewLogger().Infof("new %+v, old %+v addr %+v", strings.Join(newAddrs, "\n"), oldValue, addr)
  79. RedisInstance.Set(ctx, addrKey, strings.Join(newAddrs, "\n"), 0)
  80. }
  81. }
  82. func ExtensionGet(endpointName string) (uri, addrDelay, roundtripusec, hookStatus string) {
  83. ctx := context.Background()
  84. uri = RedisInstance.Get(ctx, fmt.Sprintf("extension-contact-uri-%s", endpointName)).Val()
  85. addrDelay = RedisInstance.Get(ctx, fmt.Sprintf("extension-contact-addr_delay-%s", endpointName)).Val()
  86. roundtripusec = RedisInstance.Get(ctx, fmt.Sprintf("extension-contact-roundtripusec-%s", endpointName)).Val()
  87. hookStatus = RedisInstance.Get(ctx, fmt.Sprintf("hook-%s", endpointName)).Val()
  88. return
  89. }