Class: SiteInspector::Endpoint::Dns
- Inherits:
-
Check
- Object
- Check
- SiteInspector::Endpoint::Dns
show all
- Defined in:
- lib/site-inspector/checks/dns.rb
Defined Under Namespace
Classes: LocalhostError
Instance Attribute Summary
Attributes inherited from Check
#endpoint
Class Method Summary
collapse
Instance Method Summary
collapse
Methods inherited from Check
enabled=, enabled?, #host, #initialize, #name, name, #request, #response
Class Method Details
.resolver ⇒ Object
8
9
10
11
12
13
14
15
|
# File 'lib/site-inspector/checks/dns.rb', line 8
def self.resolver
require 'dnsruby'
@resolver ||= begin
resolver = Dnsruby::Resolver.new
resolver.config.nameserver = ['8.8.8.8', '8.8.4.4']
resolver
end
end
|
Instance Method Details
#cdn ⇒ Object
40
41
42
|
# File 'lib/site-inspector/checks/dns.rb', line 40
def cdn
detect_by_hostname 'cdn'
end
|
#cdn? ⇒ Boolean
44
45
46
|
# File 'lib/site-inspector/checks/dns.rb', line 44
def cdn?
!!cdn
end
|
#cloud? ⇒ Boolean
52
53
54
|
# File 'lib/site-inspector/checks/dns.rb', line 52
def cloud?
!!cloud_provider
end
|
#cloud_provider ⇒ Object
48
49
50
|
# File 'lib/site-inspector/checks/dns.rb', line 48
def cloud_provider
detect_by_hostname 'cloud'
end
|
#cnames ⇒ Object
79
80
81
82
83
|
# File 'lib/site-inspector/checks/dns.rb', line 79
def cnames
@cnames ||= records.select { |record| record.type == 'CNAME' }.map do |record|
PublicSuffix.parse(record.cname.to_s)
end
end
|
#dnssec? ⇒ Boolean
32
33
34
|
# File 'lib/site-inspector/checks/dns.rb', line 32
def dnssec?
@dnssec ||= has_record? 'DNSKEY'
end
|
#google_apps? ⇒ Boolean
56
57
58
59
60
|
# File 'lib/site-inspector/checks/dns.rb', line 56
def google_apps?
@google_apps ||= records.any? do |record|
record.type == 'MX' && record.exchange.to_s =~ /google(mail)?\.com\.?\z/i
end
end
|
#hostname ⇒ Object
72
73
74
75
76
77
|
# File 'lib/site-inspector/checks/dns.rb', line 72
def hostname
require 'resolv'
@hostname ||= PublicSuffix.parse(Resolv.getname(ip))
rescue Resolv::ResolvError, PublicSuffix::DomainInvalid
nil
end
|
#inspect ⇒ Object
85
86
87
|
# File 'lib/site-inspector/checks/dns.rb', line 85
def inspect
"#<SiteInspector::Domain::Dns host=\"#{host}\">"
end
|
#ip ⇒ Object
66
67
68
69
70
|
# File 'lib/site-inspector/checks/dns.rb', line 66
def ip
@ip ||= Resolv.getaddress host
rescue Resolv::ResolvError
nil
end
|
#ipv6? ⇒ Boolean
36
37
38
|
# File 'lib/site-inspector/checks/dns.rb', line 36
def ipv6?
@ipv6 ||= has_record? 'AAAA'
end
|
#localhost? ⇒ Boolean
62
63
64
|
# File 'lib/site-inspector/checks/dns.rb', line 62
def localhost?
ip == '127.0.0.1'
end
|
#query(type = 'ANY') ⇒ Object
17
18
19
20
21
|
# File 'lib/site-inspector/checks/dns.rb', line 17
def query(type = 'ANY')
SiteInspector::Endpoint::Dns.resolver.query(host.to_s, type).answer
rescue Dnsruby::ResolvTimeout, Dnsruby::ServFail, Dnsruby::NXDomain
[]
end
|
#record?(type) ⇒ Boolean
Also known as:
has_record?
27
28
29
|
# File 'lib/site-inspector/checks/dns.rb', line 27
def record?(type)
records.any? { |record| record.type == type } || query(type).count != 0
end
|
#records ⇒ Object
23
24
25
|
# File 'lib/site-inspector/checks/dns.rb', line 23
def records
@records ||= query
end
|
#to_h ⇒ Object
89
90
91
92
93
94
95
96
97
98
99
100
101
|
# File 'lib/site-inspector/checks/dns.rb', line 89
def to_h
return { error: LocalhostError } if localhost?
{
dnssec: dnssec?,
ipv6: ipv6?,
cdn: cdn,
cloud_provider: cloud_provider,
google_apps: google_apps?,
hostname: hostname,
ip: ip
}
end
|