2
0

monitor.go 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package gorm
  2. import (
  3. "github.com/porter-dev/porter/internal/models"
  4. "github.com/porter-dev/porter/internal/repository"
  5. "gorm.io/gorm"
  6. )
  7. // MonitorTestResultRepository contains methods for querying MonitorTestResult models
  8. type MonitorTestResultRepository struct {
  9. db *gorm.DB
  10. }
  11. // NewBuildEventRepository returns a BuildEventRepository which uses
  12. // gorm.DB for querying the database
  13. func NewMonitorTestResultRepository(db *gorm.DB) repository.MonitorTestResultRepository {
  14. return &MonitorTestResultRepository{db}
  15. }
  16. func (m *MonitorTestResultRepository) CreateMonitorTestResult(monitor *models.MonitorTestResult) (*models.MonitorTestResult, error) {
  17. if err := m.db.Create(monitor).Error; err != nil {
  18. return nil, err
  19. }
  20. return monitor, nil
  21. }
  22. func (m *MonitorTestResultRepository) ReadMonitorTestResult(projectID, clusterID uint, objectID string) (*models.MonitorTestResult, error) {
  23. res := &models.MonitorTestResult{}
  24. if err := m.db.Where("project_id = ? AND cluster_id = ? AND object_id = ?", projectID, clusterID, objectID).First(res).Error; err != nil {
  25. return nil, err
  26. }
  27. return res, nil
  28. }
  29. func (m *MonitorTestResultRepository) UpdateMonitorTestResult(monitor *models.MonitorTestResult) (*models.MonitorTestResult, error) {
  30. if err := m.db.Save(monitor).Error; err != nil {
  31. return nil, err
  32. }
  33. return monitor, nil
  34. }
  35. func (m *MonitorTestResultRepository) ArchiveMonitorTestResults(projectID, clusterID uint, recommenderID string) error {
  36. query := m.db.Debug().Unscoped().Model(&models.MonitorTestResult{}).Where("project_id = ? AND cluster_id = ? AND last_recommender_run_id != ?", projectID, clusterID, recommenderID)
  37. return query.Update("archived", true).Error
  38. }
  39. func (m *MonitorTestResultRepository) DeleteOldMonitorTestResults(projectID, clusterID uint, recommenderID string) error {
  40. monitors := make([]*models.MonitorTestResult, 0)
  41. query := m.db.Debug().Unscoped().Where("project_id = ? AND cluster_id = ? AND last_recommender_run_id != ?", projectID, clusterID, recommenderID)
  42. // we need to switch on the database type to delete records older than 24 hours
  43. switch m.db.Dialector.Name() {
  44. case "sqlite":
  45. query = query.Where(
  46. "last_tested < DATETIME('now', '-1 day')",
  47. )
  48. case "postgres":
  49. query = query.Where(
  50. "last_tested < NOW() - INTERVAL '1 day'",
  51. )
  52. }
  53. return query.Delete(monitors).Error
  54. }