github-pages-health-check 1.7.4 → 1.8.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 03a16a95ebcc2d31fe9f0de07cc2a00018d8a604
4
- data.tar.gz: 4358dbd798f76a759a8876daf4d7811f14b6c135
3
+ metadata.gz: 031aea2c1fdce16fab8803dd54bbbb7d58273a6f
4
+ data.tar.gz: 15f224dee340c769356de80232c27e2117ff9af4
5
5
  SHA512:
6
- metadata.gz: 794287ba5221e2c5ea8506594167309b9a9de12c6b887206b5b4a575b3c42e9b3b86918e506624cf6da134a72510ceeebfb0125c8cabb0ee0b66ba88559008b9
7
- data.tar.gz: fe84086c554d3faf80742e607086cbbcf7eeb04a114edb7871200dc860849e9549d44189948fa80c9d27df796da221d34279f2473861982e083390d97a3696c6
6
+ metadata.gz: 4cac9adfa7bf2d73c6003d90232ddea0bd56b5f84d00816e476b29f56167614133fdfca442a3235978758afde298501d084fdd5b85864dcd2cef6486fe9af357
7
+ data.tar.gz: ef4efb97d297f0640a391b9ef15e7750648dfc519b3807fbcf554c6adb15edec2b240e91bc96e56d3ec6dab7c6f8e5fc3a38597cb127b38286703862d35c4b7e
@@ -28,11 +28,12 @@ module GitHubPages
28
28
  autoload :Checkable, "github-pages-health-check/checkable"
29
29
  autoload :Domain, "github-pages-health-check/domain"
30
30
  autoload :Repository, "github-pages-health-check/repository"
31
+ autoload :Resolver, "github-pages-health-check/resolver"
31
32
  autoload :Site, "github-pages-health-check/site"
32
33
  autoload :Printer, "github-pages-health-check/printer"
33
34
 
34
35
  # DNS and HTTP timeout, in seconds
35
- TIMEOUT = 5
36
+ TIMEOUT = 7
36
37
 
37
38
  HUMAN_NAME = "GitHub Pages Health Check".freeze
38
39
  URL = "https://github.com/github/pages-health-check".freeze
@@ -47,15 +47,10 @@ module GitHubPages
47
47
  end
48
48
 
49
49
  def query(domain)
50
- resolver = Dnsruby::Resolver.new
51
- resolver.retry_times = 2
52
- resolver.query_timeout = 2
53
- begin
54
- resolver.query(domain, Dnsruby::Types::CAA).answer
55
- rescue Dnsruby::ResolvError => e
56
- @error = e
57
- []
58
- end
50
+ GitHubPages::HealthCheck::Resolver.new(domain).query(Dnsruby::Types::CAA)
51
+ rescue Dnsruby::ResolvError, Dnsruby::ResolvTimeout => e
52
+ @error = e
53
+ []
59
54
  end
60
55
  end
61
56
  end
@@ -253,7 +253,7 @@ module GitHubPages
253
253
  GitHubPages::HealthCheck.without_warnings do
254
254
  next if host.nil?
255
255
  REQUESTED_RECORD_TYPES
256
- .map { |type| resolver.query(absolute_domain, type).answer }
256
+ .map { |type| resolver.query(type) }
257
257
  .flatten.uniq
258
258
  end
259
259
  end
@@ -262,10 +262,7 @@ module GitHubPages
262
262
  end
263
263
 
264
264
  def resolver
265
- @resolver ||= Dnsruby::Resolver.new
266
- @resolver.retry_times = 2
267
- @resolver.query_timeout = 2
268
- @resolver
265
+ @resolver ||= GitHubPages::HealthCheck::Resolver.new(absolute_domain)
269
266
  end
270
267
 
271
268
  # Are we even able to get the DNS record?
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ module GitHubPages
4
+ module HealthCheck
5
+ class Resolver
6
+ DEFAULT_RESOLVER_OPTIONS = {
7
+ :retry_times => 2,
8
+ :query_timeout => 5,
9
+ :dnssec => true
10
+ }.freeze
11
+
12
+ PREFERS_AUTHORITATIVE_ANSWER = [
13
+ Dnsruby::Types::A,
14
+ Dnsruby::Types::CAA,
15
+ Dnsruby::Types::MX
16
+ ].freeze
17
+
18
+ class << self
19
+ def default_resolver
20
+ @default_resolver ||= Dnsruby::Resolver.new(DEFAULT_RESOLVER_OPTIONS)
21
+ end
22
+ end
23
+
24
+ attr_reader :domain
25
+
26
+ def initialize(domain)
27
+ @domain = domain
28
+ end
29
+
30
+ # rubocop:disable Metrics/AbcSize
31
+ def query(type)
32
+ if PREFERS_AUTHORITATIVE_ANSWER.include?(type)
33
+ answer = authoritative_resolver.query(domain, type).answer
34
+ return answer unless answer.empty?
35
+ end
36
+
37
+ self.class.default_resolver.query(domain, type).answer
38
+ rescue Dnsruby::ResolvTimeout, Dnsruby::ResolvError
39
+ self.class.default_resolver.query(domain, type).answer
40
+ end
41
+ # rubocop:enable Metrics/AbcSize
42
+
43
+ private
44
+
45
+ def authoritative_resolver
46
+ return self.class.default_resolver if nameservers.nil? || nameservers.empty?
47
+
48
+ Dnsruby::Resolver.new(DEFAULT_RESOLVER_OPTIONS.merge(:nameservers => nameservers))
49
+ end
50
+
51
+ def nameservers
52
+ @nameservers ||= begin
53
+ self.class.default_resolver.query(domain, Dnsruby::Types::NS).answer.map do |rr|
54
+ next rr.nsdname.to_s if rr.type == Dnsruby::Types::NS
55
+ end.compact
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module GitHubPages
4
4
  module HealthCheck
5
- VERSION = "1.7.4".freeze
5
+ VERSION = "1.8.0".freeze
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: github-pages-health-check
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.4
4
+ version: 1.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - GitHub, Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-05-01 00:00:00.000000000 Z
11
+ date: 2018-05-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -201,6 +201,7 @@ files:
201
201
  - lib/github-pages-health-check/errors/not_served_by_pages_error.rb
202
202
  - lib/github-pages-health-check/printer.rb
203
203
  - lib/github-pages-health-check/repository.rb
204
+ - lib/github-pages-health-check/resolver.rb
204
205
  - lib/github-pages-health-check/site.rb
205
206
  - lib/github-pages-health-check/version.rb
206
207
  - script/bootstrap