Class: Kennel::Models::Slo
- Includes:
- TagsValidation
- Defined in:
- lib/kennel/models/slo.rb
Constant Summary collapse
- READONLY_ATTRIBUTES =
[ *superclass::READONLY_ATTRIBUTES, :type_id, :monitor_tags ].freeze
- TRACKING_FIELD =
:description- DEFAULTS =
{ description: nil, query: nil, groups: nil, monitor_ids: [], thresholds: [], primary: nil, sli_specification: nil }.freeze
Constants inherited from Record
Record::ALLOWED_KENNEL_ID_CHARS, Record::ALLOWED_KENNEL_ID_FULL, Record::ALLOWED_KENNEL_ID_REGEX, Record::ALLOWED_KENNEL_ID_SEGMENT, Record::LOCK, Record::MARKER_TEXT, Record::TITLE_FIELDS, Record::TRACKING_FIELDS
Constants included from OptionalValidations
OptionalValidations::UNIGNORABLE, OptionalValidations::UNUSED_IGNORES
Constants inherited from Base
Base::SETTING_OVERRIDABLE_METHODS
Constants included from SettingsAsMethods
SettingsAsMethods::AS_PROCS, SettingsAsMethods::SETTING_OVERRIDABLE_METHODS
Instance Attribute Summary
Attributes inherited from Record
Class Method Summary collapse
- .api_resource ⇒ Object
- .normalize(expected, actual) ⇒ Object
- .parse_url(url) ⇒ Object
- .url(id) ⇒ Object
Instance Method Summary collapse
Methods inherited from Record
#add_tracking_id, #allowed_update_error, api_resource_map, #build, #diff, #initialize, parse_any_url, parse_tracking_id, #remove_tracking_id, remove_tracking_id, #safe_tracking_id, #tracking_id
Methods included from OptionalValidations
filter_validation_errors, included, #initialize, #invalid!, valid?
Methods inherited from Base
Methods included from SubclassTracking
#abstract_class?, #recursive_subclasses, #subclasses
Methods included from SettingsAsMethods
included, #initialize, #raise_with_location
Constructor Details
This class inherits a constructor from Kennel::Models::Record
Class Method Details
.api_resource ⇒ Object
70 71 72 |
# File 'lib/kennel/models/slo.rb', line 70 def self.api_resource "slo" end |
.normalize(expected, actual) ⇒ Object
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
# File 'lib/kennel/models/slo.rb', line 89 def self.normalize(expected, actual) super # remove readonly values actual[:thresholds]&.each do |threshold| threshold.delete(:warning_display) threshold.delete(:target_display) end # tags come in a semi-random order and order is never updated expected[:tags]&.sort! actual[:tags].sort! # do not show these in the diff if we automatically pick the primary timeframe, # or we will have a permanent `something -> nil` diff unless expected[:timeframe] [:timeframe, :warning_threshold, :target_threshold].each { |k| actual.delete k } end # discard deprecated query which stays in datadog forever when we are trying to set sli_specification # (downgrading to query by setting sli_specification=nil is not supported in the api) actual.delete :query if expected[:sli_specification] # user set query so let's not worry about sli_specification even if this might be hiding bugs # ideally we'd validate and tell the user that this will have no effect (see importer logic) # but I'm not confident this will always be right actual.delete :sli_specification if expected[:query] ignore_default(expected, actual, DEFAULTS) end |
.parse_url(url) ⇒ Object
78 79 80 |
# File 'lib/kennel/models/slo.rb', line 78 def self.parse_url(url) url[/[?&]slo_id=([a-z\d]{10,})/, 1] || url[/\/slo\/([a-z\d]{10,})(:?\/edit)?(\?|$)/, 1] end |
.url(id) ⇒ Object
74 75 76 |
# File 'lib/kennel/models/slo.rb', line 74 def self.url(id) Utils.path_to_url "/slo?slo_id=#{id}" end |
Instance Method Details
#build_json ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/kennel/models/slo.rb', line 35 def build_json data = super.merge( name: "#{name}#{LOCK}", description: description, thresholds: thresholds, monitor_ids: monitor_ids, tags: , type: type ) # add top level timeframe and threshold settings based on `primary` if (p = primary) data[:timeframe] = p threshold = thresholds.detect { |t| t[:timeframe] == p } || raise(ArgumentError, "#{tracking_id} unable to find threshold with timeframe #{p}") if (value = threshold[:warning]) # only set if needed to avoid permanent diff data[:warning_threshold] = value end data[:target_threshold] = threshold[:target] end if (v = sli_specification) data[:sli_specification] = v elsif (v = query) data[:query] = v end if (v = groups) data[:groups] = v end data end |
#resolve_linked_tracking_ids!(id_map, **args) ⇒ Object
82 83 84 85 86 87 |
# File 'lib/kennel/models/slo.rb', line 82 def resolve_linked_tracking_ids!(id_map, **args) return unless (ids = as_json[:monitor_ids]) # ignore_default can remove it as_json[:monitor_ids] = ids.map do |id| resolve(id, :monitor, id_map, **args) || id end end |