You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

80 rivejä
2.1 KiB

  1. package controller
  2. import (
  3. "context"
  4. "encoding/json"
  5. "fmt"
  6. "net/http"
  7. "github.com/AFASystems/presence/internal/pkg/common/appcontext"
  8. "github.com/AFASystems/presence/internal/pkg/model"
  9. "github.com/redis/go-redis/v9"
  10. "github.com/segmentio/kafka-go"
  11. )
  12. func SettingsEditController(writer *kafka.Writer, appstate *appcontext.AppState, client *redis.Client, ctx context.Context) http.HandlerFunc {
  13. return func(w http.ResponseWriter, r *http.Request) {
  14. decoder := json.NewDecoder(r.Body)
  15. var inSettings model.SettingsVal
  16. if err := decoder.Decode(&inSettings); err != nil {
  17. http.Error(w, err.Error(), 400)
  18. fmt.Println("Error in decoding Settings body: ", err)
  19. return
  20. }
  21. if !settingsCheck(inSettings) {
  22. http.Error(w, "values must be greater than 0", 400)
  23. fmt.Println("settings values must be greater than 0")
  24. return
  25. }
  26. valueStr, err := json.Marshal(&inSettings)
  27. if err != nil {
  28. http.Error(w, "Error in encoding settings", 500)
  29. fmt.Println("Error in encoding settings: ", err)
  30. return
  31. }
  32. msg := kafka.Message{
  33. Value: valueStr,
  34. }
  35. if err := writer.WriteMessages(ctx, msg); err != nil {
  36. fmt.Println("error in sending Kafka message")
  37. http.Error(w, "Error in sending kafka message", 500)
  38. return
  39. }
  40. // if all is OK persist settings
  41. appstate.UpdateSettings(inSettings)
  42. appstate.PersistSettings(client, ctx)
  43. w.Write([]byte("ok"))
  44. }
  45. }
  46. func settingsCheck(settings model.SettingsVal) bool {
  47. if settings.LocationConfidence <= 0 || settings.LastSeenThreshold <= 0 || settings.HASendInterval <= 0 {
  48. return false
  49. }
  50. return true
  51. }
  52. func SettingsListController(appstate *appcontext.AppState, client *redis.Client, ctx context.Context) http.HandlerFunc {
  53. return func(w http.ResponseWriter, r *http.Request) {
  54. v, err := client.Get(ctx, "settings").Result()
  55. if err == redis.Nil {
  56. msg := "No list found for key settings, starting empty"
  57. fmt.Println(msg)
  58. http.Error(w, "msg", 500)
  59. } else if err != nil {
  60. msg := fmt.Sprintf("Error in connecting to Redis: %v, key: settings returning empty map\n", err)
  61. fmt.Println(msg)
  62. http.Error(w, msg, 500)
  63. } else {
  64. w.Write([]byte(v))
  65. }
  66. }
  67. }