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.
 
 
 
 

117 lines
2.7 KiB

  1. package controller
  2. import (
  3. "context"
  4. "encoding/json"
  5. "fmt"
  6. "log/slog"
  7. "net/http"
  8. "github.com/AFASystems/presence/internal/pkg/model"
  9. "github.com/AFASystems/presence/internal/pkg/service"
  10. "github.com/gorilla/mux"
  11. "github.com/segmentio/kafka-go"
  12. "gorm.io/gorm"
  13. )
  14. func ParserAddController(db *gorm.DB, writer *kafka.Writer, ctx context.Context) http.HandlerFunc {
  15. return func(w http.ResponseWriter, r *http.Request) {
  16. decoder := json.NewDecoder(r.Body)
  17. var config model.Config
  18. if err := decoder.Decode(&config); err != nil {
  19. http.Error(w, err.Error(), 400)
  20. return
  21. }
  22. db.Create(&config)
  23. kp := model.KafkaParser{
  24. ID: "add",
  25. Config: config,
  26. }
  27. if err := service.SendParserConfig(kp, writer, ctx); err != nil {
  28. http.Error(w, "Unable to send parser config to kafka broker", 400)
  29. msg := fmt.Sprintf("Unable to send parser config to kafka broker %v", err)
  30. slog.Error(msg)
  31. return
  32. }
  33. w.Write([]byte("ok"))
  34. }
  35. }
  36. func ParserListController(db *gorm.DB) http.HandlerFunc {
  37. return func(w http.ResponseWriter, r *http.Request) {
  38. var configs []model.Config
  39. db.Find(&configs)
  40. res, err := json.Marshal(configs)
  41. if err != nil {
  42. http.Error(w, err.Error(), 400)
  43. return
  44. }
  45. w.Write(res)
  46. }
  47. }
  48. func ParserDeleteController(db *gorm.DB, writer *kafka.Writer, ctx context.Context) http.HandlerFunc {
  49. return func(w http.ResponseWriter, r *http.Request) {
  50. id := mux.Vars(r)["id"]
  51. if res := db.Delete(&model.Config{}, "name = ?", id); res.RowsAffected == 0 {
  52. http.Error(w, "no parser config with such name found", 400)
  53. return
  54. }
  55. kp := model.KafkaParser{
  56. ID: "delete",
  57. Name: id,
  58. }
  59. if err := service.SendParserConfig(kp, writer, ctx); err != nil {
  60. http.Error(w, "Unable to send parser config to kafka broker", 400)
  61. msg := fmt.Sprintf("Unable to send parser config to kafka broker %v", err)
  62. slog.Error(msg)
  63. return
  64. }
  65. w.Write([]byte("ok"))
  66. }
  67. }
  68. func ParserUpdateController(db *gorm.DB, writer *kafka.Writer, ctx context.Context) http.HandlerFunc {
  69. return func(w http.ResponseWriter, r *http.Request) {
  70. id := mux.Vars(r)["id"]
  71. if err := db.First(&model.Config{}, "name = ?", id).Error; err != nil {
  72. http.Error(w, err.Error(), 400)
  73. return
  74. }
  75. decoder := json.NewDecoder(r.Body)
  76. var config model.Config
  77. if err := decoder.Decode(&config); err != nil {
  78. http.Error(w, err.Error(), 400)
  79. return
  80. }
  81. kp := model.KafkaParser{
  82. ID: "update",
  83. Name: config.Name,
  84. Config: config,
  85. }
  86. db.Save(&config)
  87. if err := service.SendParserConfig(kp, writer, ctx); err != nil {
  88. http.Error(w, "Unable to send parser config to kafka broker", 400)
  89. msg := fmt.Sprintf("Unable to send parser config to kafka broker %v", err)
  90. slog.Error(msg)
  91. return
  92. }
  93. w.Write([]byte("ok"))
  94. }
  95. }