update.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package controller
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "log"
  6. "net/http"
  7. "github.com/gorilla/mux"
  8. "github.com/gorilla/websocket"
  9. "github.com/gravitl/netmaker/logger"
  10. "github.com/gravitl/netmaker/logic"
  11. "github.com/gravitl/netmaker/models"
  12. "github.com/gravitl/netmaker/queue"
  13. )
  14. var updateUpgrader = websocket.Upgrader{} // use default options
  15. func updateHandlers(r *mux.Router) {
  16. r.HandleFunc("/api/v1/update", http.HandlerFunc(handleUpdate)).Methods(http.MethodGet)
  17. }
  18. func handleUpdate(w http.ResponseWriter, r *http.Request) {
  19. c, err := updateUpgrader.Upgrade(w, r, nil)
  20. if err != nil {
  21. logger.Log(0,
  22. fmt.Sprintf("error occurred starting update ws for a client [%v]", err))
  23. logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
  24. return
  25. }
  26. defer c.Close()
  27. for {
  28. _, msg, err := c.ReadMessage()
  29. if err != nil {
  30. log.Println("read:", err)
  31. break
  32. }
  33. var event models.Event
  34. err = json.Unmarshal(msg, &event)
  35. if err != nil {
  36. log.Printf("error unmarshalling json! %v\n", err)
  37. continue
  38. }
  39. event.Conn = c
  40. fmt.Printf("got event: %+v \n", event)
  41. queue.EventQueue.Enqueue(event)
  42. }
  43. }