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
6
7
8
9
10
11
12
13
|
# File 'lib/site-inspector/checks/dns.rb', line 6
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
38
39
40
|
# File 'lib/site-inspector/checks/dns.rb', line 38
def cdn
detect_by_hostname 'cdn'
end
|
#cdn? ⇒ Boolean
42
43
44
|
# File 'lib/site-inspector/checks/dns.rb', line 42
def cdn?
!!cdn
end
|
#cloud? ⇒ Boolean
50
51
52
|
# File 'lib/site-inspector/checks/dns.rb', line 50
def cloud?
!!cloud_provider
end
|
#cloud_provider ⇒ Object
46
47
48
|
# File 'lib/site-inspector/checks/dns.rb', line 46
def cloud_provider
detect_by_hostname 'cloud'
end
|
#cnames ⇒ Object
78
79
80
81
82
|
# File 'lib/site-inspector/checks/dns.rb', line 78
def cnames
@cnames ||= records.select { |record| record.type == 'CNAME' }.map do |record|
PublicSuffix.parse(record.cname.to_s)
end
end
|
#dnssec? ⇒ Boolean
30
31
32
|
# File 'lib/site-inspector/checks/dns.rb', line 30
def dnssec?
@dnssec ||= has_record? 'DNSKEY'
end
|
#google_apps? ⇒ Boolean
54
55
56
57
58
|
# File 'lib/site-inspector/checks/dns.rb', line 54
def google_apps?
@google ||= records.any? do |record|
record.type == 'MX' && record.exchange.to_s =~ /google(mail)?\.com\.?\z/i
end
end
|
#hostname ⇒ Object
71
72
73
74
75
76
|
# File 'lib/site-inspector/checks/dns.rb', line 71
def hostname
require 'resolv'
@hostname ||= PublicSuffix.parse(Resolv.getname(ip))
rescue Resolv::ResolvError, PublicSuffix::DomainInvalid
nil
end
|
#inspect ⇒ Object
84
85
86
|
# File 'lib/site-inspector/checks/dns.rb', line 84
def inspect
"#<SiteInspector::Domain::Dns host=\"#{host}\">"
end
|
#ip ⇒ Object
64
65
66
67
68
69
|
# File 'lib/site-inspector/checks/dns.rb', line 64
def ip
require 'resolv'
@ip ||= Resolv.getaddress host
rescue Resolv::ResolvError
nil
end
|
#ipv6? ⇒ Boolean
34
35
36
|
# File 'lib/site-inspector/checks/dns.rb', line 34
def ipv6?
@ipv6 ||= has_record? 'AAAA'
end
|
#localhost? ⇒ Boolean
60
61
62
|
# File 'lib/site-inspector/checks/dns.rb', line 60
def localhost?
ip == '127.0.0.1'
end
|
#query(type = 'ANY') ⇒ Object
15
16
17
18
19
|
# File 'lib/site-inspector/checks/dns.rb', line 15
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?
25
26
27
|
# File 'lib/site-inspector/checks/dns.rb', line 25
def record?(type)
records.any? { |record| record.type == type } || query(type).count != 0
end
|
#records ⇒ Object
21
22
23
|
# File 'lib/site-inspector/checks/dns.rb', line 21
def records
@records ||= query
end
|
#to_h ⇒ Object
88
89
90
91
92
93
94
95
96
97
98
99
|
# File 'lib/site-inspector/checks/dns.rb', line 88
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
|