update.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package controller
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "log"
  6. "net/http"
  7. "github.com/gorilla/mux"
  8. "github.com/gravitl/netmaker/logger"
  9. "github.com/gravitl/netmaker/logic"
  10. "github.com/gravitl/netmaker/models"
  11. "github.com/gravitl/netmaker/queue"
  12. )
  13. func updateHandlers(r *mux.Router) {
  14. r.HandleFunc("/api/v1/update", http.HandlerFunc(handleUpdate)).Methods(http.MethodGet)
  15. }
  16. func handleUpdate(w http.ResponseWriter, r *http.Request) {
  17. c, err := upgrader.Upgrade(w, r, nil)
  18. if err != nil {
  19. logger.Log(0,
  20. fmt.Sprintf("error occurred starting update ws for a client [%v]", err))
  21. logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
  22. return
  23. }
  24. if len(r.Header.Get(hostID)) > 0 {
  25. queue.ConnMap.Store(r.Header.Get(hostID), c)
  26. } else {
  27. queue.ConnMap.Store("test", c)
  28. }
  29. // load the connection address for reference later
  30. defer c.Close()
  31. for {
  32. _, msg, err := c.ReadMessage()
  33. if err != nil {
  34. log.Println("read:", err)
  35. break
  36. }
  37. var event models.Event
  38. err = json.Unmarshal(msg, &event)
  39. if err != nil {
  40. log.Printf("error unmarshalling json! %v\n", err)
  41. continue
  42. }
  43. fmt.Printf("got event: %+v \n", event)
  44. queue.EventQueue.Enqueue(event)
  45. }
  46. if len(r.Header.Get(hostID)) > 0 {
  47. queue.ConnMap.Delete(r.Header.Get(hostID))
  48. } else {
  49. queue.ConnMap.Delete("test")
  50. }
  51. }