kennel 1.76.0 → 1.78.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Readme.md +3 -2
- data/lib/kennel/api.rb +4 -1
- data/lib/kennel/github_reporter.rb +4 -2
- data/lib/kennel/models/monitor.rb +11 -7
- data/lib/kennel/models/slo.rb +2 -1
- data/lib/kennel/syncer.rb +2 -2
- data/lib/kennel/version.rb +1 -1
- data/template/Readme.md +3 -2
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 9d1a7ffddfc55955603d8ac9826ab2f46af2f223cb92f829ac1be0f2dc29af4c
         | 
| 4 | 
            +
              data.tar.gz: fe2a7fa8bdf812bb7e4cf79a3e14ab8923225f8464ac352723ab18e54be9fc3f
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: af3734bc932520ec215baa7cbf31f40553d50b48f0c61d80835a030cb728af8cb139c4e7296ad82792a54b699971a6892da227674b1b50f659bd787cbe743a0c
         | 
| 7 | 
            +
              data.tar.gz: 9f01dd98d5467bf60cdfa2943925fa0edece4d74970ba2e17888b5dcce51f6f59a15cd70c6d6208e1e83c5ebd65339e7a2e7f5c52f490ece1cffce0ad170f8b3
         | 
    
        data/Readme.md
    CHANGED
    
    | @@ -205,17 +205,18 @@ to unblock use the `validate: -> { false }` option. | |
| 205 205 |  | 
| 206 206 | 
             
            ### Linking with kennel_ids
         | 
| 207 207 |  | 
| 208 | 
            -
            To link to existing monitors via their kennel_id
         | 
| 208 | 
            +
            To link to existing monitors via their kennel_id `projects kennel_id` + `:` + `monitors kennel id`
         | 
| 209 209 |  | 
| 210 210 | 
             
             - Screens `uptime` widgets can use `monitor: {id: "foo:bar"}`
         | 
| 211 211 | 
             
             - Screens `alert_graph` widgets can use `alert_id: "foo:bar"`
         | 
| 212 212 | 
             
             - Monitors `composite` can use `query: -> { "%{foo:bar} || %{foo:baz}" }`
         | 
| 213 | 
            +
             - Slos can use `monitor_ids: -> ["foo:bar"]` 
         | 
| 213 214 |  | 
| 214 215 | 
             
            ### Debugging changes locally
         | 
| 215 216 |  | 
| 216 217 | 
             
             - rebase on updated `master` to not undo other changes
         | 
| 217 218 | 
             
             - figure out project name by converting the class name to snake-case
         | 
| 218 | 
            -
             - run `PROJECT=foo bundle exec rake kennel:update_datadog` to test changes for a single project
         | 
| 219 | 
            +
             - run `PROJECT=foo bundle exec rake kennel:update_datadog` to test changes for a single project (monitors: remove mentions while debugging to avoid alert spam)
         | 
| 219 220 |  | 
| 220 221 | 
             
            ### Reuse
         | 
| 221 222 |  | 
    
        data/lib/kennel/api.rb
    CHANGED
    
    | @@ -42,8 +42,11 @@ module Kennel | |
| 42 42 | 
             
                  request :put, "/api/v1/#{api_resource}/#{id}", body: attributes
         | 
| 43 43 | 
             
                end
         | 
| 44 44 |  | 
| 45 | 
            +
                # - force=true to not dead-lock on dependent monitors+slos
         | 
| 46 | 
            +
                #   external dependency on kennel managed resources is their problem, we don't block on it
         | 
| 47 | 
            +
                #   (?force=true did not work, force for dashboard is not documented but does not blow up)
         | 
| 45 48 | 
             
                def delete(api_resource, id)
         | 
| 46 | 
            -
                  request :delete, "/api/v1/#{api_resource}/#{id}", ignore_404: true
         | 
| 49 | 
            +
                  request :delete, "/api/v1/#{api_resource}/#{id}", params: { force: "true" }, ignore_404: true
         | 
| 47 50 | 
             
                end
         | 
| 48 51 |  | 
| 49 52 | 
             
                private
         | 
| @@ -15,8 +15,10 @@ module Kennel | |
| 15 15 | 
             
                def initialize(token, git_sha)
         | 
| 16 16 | 
             
                  @token = token
         | 
| 17 17 | 
             
                  @git_sha = git_sha
         | 
| 18 | 
            -
                   | 
| 19 | 
            -
             | 
| 18 | 
            +
                  @repo_part = ENV["GITHUB_REPOSITORY"] || begin
         | 
| 19 | 
            +
                    origin = ENV["PROJECT_REPOSITORY"] || Utils.capture_sh("git remote -v").split("\n").first
         | 
| 20 | 
            +
                    origin[%r{github\.com[:/](\S+?)(\.git|$)}, 1] || raise("no origin found in #{origin}")
         | 
| 21 | 
            +
                  end
         | 
| 20 22 | 
             
                end
         | 
| 21 23 |  | 
| 22 24 | 
             
                def report(&block)
         | 
| @@ -192,7 +192,7 @@ module Kennel | |
| 192 192 | 
             
                    end
         | 
| 193 193 |  | 
| 194 194 | 
             
                    if type == "query alert"
         | 
| 195 | 
            -
                      # verify interval is  | 
| 195 | 
            +
                      # verify interval is valid
         | 
| 196 196 | 
             
                      interval = data.fetch(:query)[/\(last_(\S+?)\)/, 1]
         | 
| 197 197 | 
             
                      if interval && !QUERY_INTERVALS.include?(interval)
         | 
| 198 198 | 
             
                        invalid! "query interval was #{interval}, but must be one of #{QUERY_INTERVALS.join(", ")}"
         | 
| @@ -200,13 +200,17 @@ module Kennel | |
| 200 200 | 
             
                    end
         | 
| 201 201 |  | 
| 202 202 | 
             
                    if ["query alert", "service check"].include?(type) # TODO: most likely more types need this
         | 
| 203 | 
            -
                      # verify is_match uses available variables
         | 
| 203 | 
            +
                      # verify is_match/is_exact_match uses available variables
         | 
| 204 204 | 
             
                      message = data.fetch(:message)
         | 
| 205 | 
            -
                      used = message.scan(/{{\s | 
| 206 | 
            -
                       | 
| 207 | 
            -
             | 
| 208 | 
            -
             | 
| 209 | 
            -
             | 
| 205 | 
            +
                      used = message.scan(/{{\s*([#^]is(?:_exact)?_match)\s*([^\s}]+)/)
         | 
| 206 | 
            +
                      if used.any?
         | 
| 207 | 
            +
                        allowed = data.fetch(:query)[/by\s*[({]([^})]+)[})]/, 1]
         | 
| 208 | 
            +
                          .to_s.gsub(/["']/, "").split(/\s*,\s*/)
         | 
| 209 | 
            +
                          .map! { |w| %("#{w}.name") }
         | 
| 210 | 
            +
                        used.uniq.each do |match, group|
         | 
| 211 | 
            +
                          next if allowed.include?(group)
         | 
| 212 | 
            +
                          invalid! "#{match} used with #{group}, but can only be used with #{allowed.join(", ")}. Add more groupings or fix the #{match}"
         | 
| 213 | 
            +
                        end
         | 
| 210 214 | 
             
                      end
         | 
| 211 215 | 
             
                    end
         | 
| 212 216 | 
             
                  end
         | 
    
        data/lib/kennel/models/slo.rb
    CHANGED
    
    | @@ -63,10 +63,11 @@ module Kennel | |
| 63 63 | 
             
                  end
         | 
| 64 64 |  | 
| 65 65 | 
             
                  def self.parse_url(url)
         | 
| 66 | 
            -
                    url[/\/slo | 
| 66 | 
            +
                    url[/\/slo\?.*slo_id=([a-z\d]+)/, 1]
         | 
| 67 67 | 
             
                  end
         | 
| 68 68 |  | 
| 69 69 | 
             
                  def resolve_linked_tracking_ids!(id_map, **args)
         | 
| 70 | 
            +
                    return unless as_json[:monitor_ids] # ignore_default can remove it
         | 
| 70 71 | 
             
                    as_json[:monitor_ids] = as_json[:monitor_ids].map do |id|
         | 
| 71 72 | 
             
                      id.is_a?(String) ? resolve_link(id, :monitor, id_map, **args) : id
         | 
| 72 73 | 
             
                    end
         | 
    
        data/lib/kennel/syncer.rb
    CHANGED
    
    | @@ -38,7 +38,7 @@ module Kennel | |
| 38 38 | 
             
                end
         | 
| 39 39 |  | 
| 40 40 | 
             
                def update
         | 
| 41 | 
            -
                  changed = (@create + @update).map { |_, e| e } | 
| 41 | 
            +
                  changed = (@create + @update).map { |_, e| e }
         | 
| 42 42 |  | 
| 43 43 | 
             
                  @create.each do |_, e|
         | 
| 44 44 | 
             
                    e.resolve_linked_tracking_ids!({}, force: true)
         | 
| @@ -188,7 +188,7 @@ module Kennel | |
| 188 188 | 
             
                end
         | 
| 189 189 |  | 
| 190 190 | 
             
                # Do not add tracking-id when working with existing ids on a branch,
         | 
| 191 | 
            -
                # so resource do not get deleted  | 
| 191 | 
            +
                # so resource do not get deleted from running an update on master (for example merge->CI).
         | 
| 192 192 | 
             
                # Also make sure the diff still makes sense, by kicking out the now noop-update.
         | 
| 193 193 | 
             
                #
         | 
| 194 194 | 
             
                # Note: ideally we'd never add tracking in the first place, but at that point we do not know the diff yet
         | 
    
        data/lib/kennel/version.rb
    CHANGED
    
    
    
        data/template/Readme.md
    CHANGED
    
    | @@ -187,17 +187,18 @@ to unblock use the `validate: -> { false }` option. | |
| 187 187 |  | 
| 188 188 | 
             
            ### Linking with kennel_ids
         | 
| 189 189 |  | 
| 190 | 
            -
            To link to existing monitors via their kennel_id
         | 
| 190 | 
            +
            To link to existing monitors via their kennel_id `projects kennel_id` + `:` + `monitors kennel id`
         | 
| 191 191 |  | 
| 192 192 | 
             
             - Screens `uptime` widgets can use `monitor: {id: "foo:bar"}`
         | 
| 193 193 | 
             
             - Screens `alert_graph` widgets can use `alert_id: "foo:bar"`
         | 
| 194 194 | 
             
             - Monitors `composite` can use `query: -> { "%{foo:bar} || %{foo:baz}" }`
         | 
| 195 | 
            +
             - Slos can use `monitor_ids: -> ["foo:bar"]` 
         | 
| 195 196 |  | 
| 196 197 | 
             
            ### Debugging changes locally
         | 
| 197 198 |  | 
| 198 199 | 
             
             - rebase on updated `master` to not undo other changes
         | 
| 199 200 | 
             
             - figure out project name by converting the class name to snake-case
         | 
| 200 | 
            -
             - run `PROJECT=foo bundle exec rake kennel:update_datadog` to test changes for a single project
         | 
| 201 | 
            +
             - run `PROJECT=foo bundle exec rake kennel:update_datadog` to test changes for a single project (monitors: remove mentions while debugging to avoid alert spam)
         | 
| 201 202 |  | 
| 202 203 | 
             
            ### Reuse
         | 
| 203 204 |  | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: kennel
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1. | 
| 4 | 
            +
              version: 1.78.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Michael Grosser
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2020- | 
| 11 | 
            +
            date: 2020-10-19 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: faraday
         |