summaryrefslogtreecommitdiff
path: root/app/models/metrics/dashboard/annotation.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/metrics/dashboard/annotation.rb')
-rw-r--r--app/models/metrics/dashboard/annotation.rb13
1 files changed, 13 insertions, 0 deletions
diff --git a/app/models/metrics/dashboard/annotation.rb b/app/models/metrics/dashboard/annotation.rb
index 8166880f0c9..3383dda20c9 100644
--- a/app/models/metrics/dashboard/annotation.rb
+++ b/app/models/metrics/dashboard/annotation.rb
@@ -3,6 +3,8 @@
module Metrics
module Dashboard
class Annotation < ApplicationRecord
+ include DeleteWithLimit
+
self.table_name = 'metrics_dashboard_annotations'
belongs_to :environment, inverse_of: :metrics_dashboard_annotations
@@ -14,14 +16,25 @@ module Metrics
validates :panel_xid, length: { maximum: 255 }
validate :single_ownership
validate :orphaned_annotation
+ validate :ending_at_after_starting_at
scope :after, ->(after) { where('starting_at >= ?', after) }
scope :before, ->(before) { where('starting_at <= ?', before) }
scope :for_dashboard, ->(dashboard_path) { where(dashboard_path: dashboard_path) }
+ scope :ending_before, ->(timestamp) { where('COALESCE(ending_at, starting_at) < ?', timestamp) }
private
+ # If annotation has NULL in ending_at column that indicates, that this annotation IS TIED TO SINGLE POINT
+ # IN TIME designated by starting_at timestamp. It does NOT mean that annotation is ever going starting from
+ # stating_at timestamp
+ def ending_at_after_starting_at
+ return if ending_at.blank? || starting_at.blank? || starting_at <= ending_at
+
+ errors.add(:ending_at, s_("Metrics::Dashboard::Annotation|can't be before starting_at time"))
+ end
+
def single_ownership
return if cluster.nil? ^ environment.nil?