Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

107 строки
2.6 KiB

  1. package apiclient
  2. import (
  3. "context"
  4. "crypto/tls"
  5. "fmt"
  6. "net/http"
  7. "github.com/AFASystems/presence/internal/pkg/config"
  8. "github.com/AFASystems/presence/internal/pkg/controller"
  9. "github.com/AFASystems/presence/internal/pkg/model"
  10. "github.com/segmentio/kafka-go"
  11. "gorm.io/gorm"
  12. "gorm.io/gorm/clause"
  13. )
  14. func UpdateDB(db *gorm.DB, ctx context.Context, cfg *config.Config, writer *kafka.Writer) error {
  15. tr := &http.Transport{
  16. TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
  17. }
  18. client := &http.Client{Transport: tr}
  19. token, err := GetToken(ctx, cfg, client)
  20. if err != nil {
  21. return err
  22. }
  23. trackers, err := GetTrackers(token, client)
  24. if err != nil {
  25. fmt.Printf("Error in getting trackers: %+v\n", err)
  26. } else {
  27. if err := controller.SendKafkaMessage(writer, &model.ApiUpdate{Method: "DELETE", MAC: "all"}, ctx); err != nil {
  28. fmt.Printf("Error in sending delete all from lookup message: %v", err)
  29. }
  30. for _, v := range trackers {
  31. apiUpdate := model.ApiUpdate{
  32. Method: "POST",
  33. ID: v.ID,
  34. MAC: v.MAC,
  35. }
  36. if err := controller.SendKafkaMessage(writer, &apiUpdate, ctx); err != nil {
  37. fmt.Printf("Error in sending POST kafka message: %v", err)
  38. }
  39. }
  40. var ids []string
  41. for _, t := range trackers {
  42. ids = append(ids, t.ID)
  43. }
  44. db.Where("id NOT IN ?", ids).Delete(&model.Tracker{})
  45. }
  46. gateways, err := GetGateways(token, client)
  47. if err != nil {
  48. fmt.Printf("Error in getting gateways: %+v\n", err)
  49. } else {
  50. var ids []string
  51. for _, g := range gateways {
  52. ids = append(ids, g.ID)
  53. }
  54. db.Where("id NOT IN ?", ids).Delete(&model.Gateway{})
  55. }
  56. zones, err := GetZones(token, client)
  57. if err != nil {
  58. fmt.Printf("Error in getting zones: %+v\n", err)
  59. } else {
  60. var ids []string
  61. for _, z := range zones {
  62. ids = append(ids, z.ID)
  63. }
  64. db.Where("id NOT IN ?", ids).Delete(&model.Zone{})
  65. }
  66. trackerZones, err := GetTrackerZones(token, client)
  67. if err != nil {
  68. fmt.Printf("Error in getting tracker zones: %+v\n", err)
  69. } else {
  70. var ids []string
  71. for _, tz := range trackerZones {
  72. ids = append(ids, tz.ID)
  73. }
  74. db.Where("id NOT IN ?", ids).Delete(&model.TrackerZones{})
  75. }
  76. db.Clauses(clause.OnConflict{
  77. Columns: []clause.Column{{Name: "id"}},
  78. UpdateAll: true,
  79. }).Create(&trackers)
  80. db.Clauses(clause.OnConflict{
  81. Columns: []clause.Column{{Name: "id"}},
  82. UpdateAll: true,
  83. }).Create(&gateways)
  84. db.Clauses(clause.OnConflict{
  85. Columns: []clause.Column{{Name: "id"}},
  86. UpdateAll: true,
  87. }).Create(&zones)
  88. db.Clauses(clause.OnConflict{
  89. Columns: []clause.Column{{Name: "id"}},
  90. UpdateAll: true,
  91. }).Create(&trackerZones)
  92. return nil
  93. }