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.
 
 
 
 

113 regels
2.7 KiB

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