event.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package schema
  2. import (
  3. "context"
  4. "time"
  5. "github.com/gravitl/netmaker/db"
  6. "github.com/gravitl/netmaker/models"
  7. "gorm.io/datatypes"
  8. )
  9. type Event struct {
  10. ID string `gorm:"primaryKey" json:"id"`
  11. Action models.Action `gorm:"action" json:"action"`
  12. Source datatypes.JSON `gorm:"source" json:"source"`
  13. Origin models.Origin `gorm:"origin" json:"origin"`
  14. Target datatypes.JSON `gorm:"target" json:"target"`
  15. NetworkID models.NetworkID `gorm:"network_id" json:"network_id"`
  16. TriggeredBy string `gorm:"triggered_by" json:"triggered_by"`
  17. Diff datatypes.JSON `gorm:"diff" json:"diff"`
  18. TimeStamp time.Time `gorm:"time_stamp" json:"time_stamp"`
  19. }
  20. func (a *Event) Get(ctx context.Context) error {
  21. return db.FromContext(ctx).Model(&Event{}).First(&a).Where("id = ?", a.ID).Error
  22. }
  23. func (a *Event) Update(ctx context.Context) error {
  24. return db.FromContext(ctx).Model(&Event{}).Where("id = ?", a.ID).Updates(&a).Error
  25. }
  26. func (a *Event) Create(ctx context.Context) error {
  27. return db.FromContext(ctx).Model(&Event{}).Create(&a).Error
  28. }
  29. func (a *Event) ListByNetwork(ctx context.Context, from, to time.Time) (ats []Event, err error) {
  30. if !from.IsZero() && !to.IsZero() {
  31. // "created_at BETWEEN ? AND ?
  32. err = db.FromContext(ctx).Model(&Event{}).Where("network_id = ? AND time_stamp BETWEEN ? AND ?",
  33. a.NetworkID, from, to).Order("time_stamp DESC").Find(&ats).Error
  34. return
  35. }
  36. err = db.FromContext(ctx).Model(&Event{}).Where("network_id = ?", a.NetworkID).Order("time_stamp DESC").Find(&ats).Error
  37. return
  38. }
  39. func (a *Event) ListByUser(ctx context.Context, from, to time.Time) (ats []Event, err error) {
  40. if !from.IsZero() && !to.IsZero() {
  41. err = db.FromContext(ctx).Model(&Event{}).Where("triggered_by = ? AND time_stamp BETWEEN ? AND ?",
  42. a.TriggeredBy, from, to).Order("time_stamp DESC").Find(&ats).Error
  43. return
  44. }
  45. err = db.FromContext(ctx).Model(&Event{}).Where("triggered_by = ?", a.TriggeredBy).Order("time_stamp DESC").Find(&ats).Error
  46. return
  47. }
  48. func (a *Event) ListByUserAndNetwork(ctx context.Context, from, to time.Time) (ats []Event, err error) {
  49. if !from.IsZero() && !to.IsZero() {
  50. err = db.FromContext(ctx).Model(&Event{}).Where("network_id = ? AND triggered_by = ? AND time_stamp BETWEEN ? AND ?",
  51. a.NetworkID, a.TriggeredBy, from, to).Order("time_stamp DESC").Find(&ats).Error
  52. return
  53. }
  54. err = db.FromContext(ctx).Model(&Event{}).Where("network_id = ? AND triggered_by = ?",
  55. a.NetworkID, a.TriggeredBy).Order("time_stamp DESC").Find(&ats).Error
  56. return
  57. }
  58. func (a *Event) List(ctx context.Context, from, to time.Time) (ats []Event, err error) {
  59. if !from.IsZero() && !to.IsZero() {
  60. err = db.FromContext(ctx).Model(&Event{}).Where("time_stamp BETWEEN ? AND ?", from, to).Order("time_stamp DESC").Find(&ats).Error
  61. return
  62. }
  63. err = db.FromContext(ctx).Model(&Event{}).Order("time_stamp DESC").Find(&ats).Error
  64. return
  65. }
  66. func (a *Event) DeleteOldEvents(ctx context.Context, retentionDays int) error {
  67. cutoff := time.Now().AddDate(0, 0, -retentionDays)
  68. return db.FromContext(ctx).Model(&Event{}).Where("created_at < ?", cutoff).Delete(&Event{}).Error
  69. }