sla 0.0.3 → 0.0.4
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 +34 -2
- data/lib/sla/cache.rb +8 -0
- data/lib/sla/checker.rb +10 -9
- data/lib/sla/command_line.rb +25 -20
- data/lib/sla/docopt.txt +9 -1
- data/lib/sla/link.rb +31 -5
- data/lib/sla/page.rb +6 -16
- data/lib/sla/version.rb +1 -1
- data/lib/sla.rb +0 -6
- metadata +3 -5
- data/lib/sla/base.rb +0 -17
- data/lib/sla/url_manager.rb +0 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 40e98d12594ea7a28b2dc3d13bc739052d94e5b6
|
4
|
+
data.tar.gz: 7e3cfcd96379993df956f848ada469bd51d60680
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1097f835963ed1be41a4b71fa14aace3a9d3ea03398d182125a96bdd6c893fe9d98fd604514184b8d727590376964d26641cb97d0b03b7f5ddafbe22523920f9
|
7
|
+
data.tar.gz: e2a63d7e2210d7f78863cb8032dd2128276d7ba8417bb12076f7beba40a373d93e9f85f43daeb69c43d5ab3ee9e15ca80956ba21e6a153a170d7bb0c6ff203c0
|
data/README.md
CHANGED
@@ -25,6 +25,30 @@ Or with bundler:
|
|
25
25
|
gem 'sla'
|
26
26
|
```
|
27
27
|
|
28
|
+
|
29
|
+
Features
|
30
|
+
--------------------------------------------------
|
31
|
+
|
32
|
+
- Easy to use command line interface
|
33
|
+
- Built in caching, to avoid over stressing the server
|
34
|
+
- Outputs the site tree to screen and log file
|
35
|
+
|
36
|
+
|
37
|
+
Example Output
|
38
|
+
--------------------------------------------------
|
39
|
+
```
|
40
|
+
$ sla check localhost:3000
|
41
|
+
1 200 - http://localhost:3000
|
42
|
+
2 200 -- /whiskey
|
43
|
+
3 200 --- /whiskey/tango
|
44
|
+
4 404 ---- /whiskey/tango/foxtrot
|
45
|
+
5 200 -- /ten
|
46
|
+
6 200 --- /ten/four
|
47
|
+
7 200 -- /roger
|
48
|
+
Done with 1 failures
|
49
|
+
```
|
50
|
+
|
51
|
+
|
28
52
|
Usage
|
29
53
|
--------------------------------------------------
|
30
54
|
|
@@ -48,12 +72,20 @@ Options:
|
|
48
72
|
Set cache life in seconds [default: 86400]
|
49
73
|
|
50
74
|
--cache-dir DIR
|
51
|
-
Set the cache directory
|
75
|
+
Set the cache directory
|
52
76
|
|
53
|
-
--color
|
77
|
+
--no-color
|
54
78
|
Disable colors in output
|
55
79
|
|
80
|
+
--no-log
|
81
|
+
Disable logging
|
82
|
+
|
83
|
+
--log LOGFILE
|
84
|
+
Set the name of the logfile [default: sla.log]
|
85
|
+
|
56
86
|
Examples:
|
57
87
|
sla check example.com
|
58
88
|
sla check example.com -c360 -d10
|
89
|
+
sla check example.com --cache-dir my_cache --no-log
|
90
|
+
sla check example.com --depth 10 --log my_log.log
|
59
91
|
```
|
data/lib/sla/cache.rb
CHANGED
data/lib/sla/checker.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
module SLA
|
2
|
-
class Checker
|
2
|
+
class Checker
|
3
3
|
include Colsole
|
4
4
|
|
5
|
-
attr_accessor :checked_links, :
|
5
|
+
attr_accessor :checked_links, :max_depth, :next_check
|
6
6
|
|
7
7
|
def initialize
|
8
8
|
@max_depth = 10
|
@@ -14,30 +14,31 @@ module SLA
|
|
14
14
|
checked_links.count
|
15
15
|
end
|
16
16
|
|
17
|
-
def on_check(urls
|
18
|
-
urls
|
17
|
+
def on_check(urls, depth=1, &block)
|
18
|
+
urls = [urls] if urls.is_a? String
|
19
19
|
|
20
20
|
self.next_check = []
|
21
21
|
|
22
22
|
urls.each do |url|
|
23
23
|
check_url url, depth, &block
|
24
|
-
if depth < max_depth
|
24
|
+
if depth < max_depth && !next_check.empty?
|
25
25
|
on_check next_check, depth+1, &block
|
26
26
|
end
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
30
|
def check_url(url, depth, &_block)
|
31
|
-
page = Page.new url, depth: depth
|
31
|
+
page = Page.new url, depth: depth
|
32
32
|
page.validate
|
33
|
-
checked_links.push url
|
34
33
|
|
35
34
|
yield page if block_given?
|
36
35
|
return if depth >= max_depth
|
36
|
+
return if checked_links.include? url
|
37
|
+
|
38
|
+
checked_links.push url
|
37
39
|
|
38
40
|
page.links.each do |link|
|
39
|
-
|
40
|
-
next_check.push link.url
|
41
|
+
next_check.push link.url unless next_check.include? link.url
|
41
42
|
end
|
42
43
|
end
|
43
44
|
end
|
data/lib/sla/command_line.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module SLA
|
2
|
-
class CommandLine
|
2
|
+
class CommandLine
|
3
3
|
include Singleton
|
4
4
|
include Colsole
|
5
5
|
|
@@ -17,7 +17,8 @@ module SLA
|
|
17
17
|
|
18
18
|
def handle(args)
|
19
19
|
if args['check']
|
20
|
-
@no_color = args['--color']
|
20
|
+
@no_color = args['--no-color']
|
21
|
+
@no_log = args['--no-log']
|
21
22
|
check_domain args
|
22
23
|
end
|
23
24
|
end
|
@@ -25,34 +26,38 @@ module SLA
|
|
25
26
|
def check_domain(args)
|
26
27
|
checker = Checker.new
|
27
28
|
checker.max_depth = args['--depth'].to_i
|
28
|
-
|
29
|
-
|
30
|
-
|
29
|
+
Cache.settings.life = args['--cache'].to_i
|
30
|
+
Cache.settings.dir = args['--cache-dir'] if args['--cache-dir']
|
31
|
+
logfile = args['--log']
|
32
|
+
start_url = args['DOMAIN']
|
31
33
|
|
32
|
-
|
34
|
+
start_url = "http://#{start_url}" unless start_url[0..3] == 'http'
|
35
|
+
|
36
|
+
File.unlink logfile if File.exist? logfile
|
33
37
|
|
34
38
|
count = 1
|
35
39
|
failed = 0
|
36
40
|
|
37
|
-
|
38
|
-
checker.on_check do |page|
|
39
|
-
indent = '-' * page.depth
|
41
|
+
log = []
|
40
42
|
|
41
|
-
|
42
|
-
|
43
|
-
failed +=1 if status != '200'
|
43
|
+
checker.on_check start_url do |page|
|
44
|
+
indent = '-' * page.depth
|
44
45
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
end
|
46
|
+
status = page.status
|
47
|
+
colored_status = color_status status
|
48
|
+
failed +=1 if status != '200'
|
49
49
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
f.puts "Done with #{failed} failures"
|
50
|
+
say "#{count} #{colored_status} #{indent} #{page.name}"
|
51
|
+
log.push "#{count} #{status} #{indent} #{page.name}" unless @no_log
|
52
|
+
count += 1
|
54
53
|
end
|
55
54
|
|
55
|
+
color = failed > 0 ? '!txtred!' : '!txtgrn!'
|
56
|
+
color = "" if @no_color
|
57
|
+
say "#{color}Done with #{failed} failures"
|
58
|
+
log.push "Done with #{failed} failures" unless @no_log
|
59
|
+
|
60
|
+
File.write logfile, log.join("\n") unless @no_log
|
56
61
|
end
|
57
62
|
|
58
63
|
def color_status(status)
|
data/lib/sla/docopt.txt
CHANGED
@@ -18,9 +18,17 @@ Options:
|
|
18
18
|
--cache-dir DIR
|
19
19
|
Set the cache directory
|
20
20
|
|
21
|
-
--color
|
21
|
+
--no-color
|
22
22
|
Disable colors in output
|
23
23
|
|
24
|
+
--no-log
|
25
|
+
Disable logging
|
26
|
+
|
27
|
+
--log LOGFILE
|
28
|
+
Set the name of the logfile [default: sla.log]
|
29
|
+
|
24
30
|
Examples:
|
25
31
|
sla check example.com
|
26
32
|
sla check example.com -c360 -d10
|
33
|
+
sla check example.com --cache-dir my_cache --no-log
|
34
|
+
sla check example.com --depth 10 --log my_log.log
|
data/lib/sla/link.rb
CHANGED
@@ -1,15 +1,41 @@
|
|
1
1
|
module SLA
|
2
2
|
class Link
|
3
|
-
attr_accessor :text, :
|
3
|
+
attr_accessor :text, :href
|
4
|
+
attr_reader :parent
|
4
5
|
|
5
|
-
def initialize(
|
6
|
-
@
|
7
|
-
@
|
6
|
+
def initialize(href, opts={})
|
7
|
+
@href = href
|
8
|
+
@text = opts[:text]
|
9
|
+
self.parent = opts[:parent] || @href
|
10
|
+
end
|
11
|
+
|
12
|
+
def uri
|
13
|
+
@uri ||= URI.parse href
|
14
|
+
end
|
15
|
+
|
16
|
+
def parent=(url)
|
17
|
+
@parent = url.is_a?(String) ? URI.parse(url) : url
|
8
18
|
end
|
9
19
|
|
10
20
|
def path
|
11
|
-
uri = URI.parse url
|
12
21
|
uri.request_uri
|
13
22
|
end
|
23
|
+
|
24
|
+
def full_uri
|
25
|
+
return uri if uri.absolute? || !parent.absolute?
|
26
|
+
URI.join parent, href
|
27
|
+
end
|
28
|
+
|
29
|
+
def url
|
30
|
+
full_uri.to_s
|
31
|
+
end
|
32
|
+
|
33
|
+
def external?
|
34
|
+
parent.host != full_uri.host
|
35
|
+
end
|
36
|
+
|
37
|
+
def interesting?
|
38
|
+
!external? && full_uri.scheme =~ /^http/
|
39
|
+
end
|
14
40
|
end
|
15
41
|
end
|
data/lib/sla/page.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module SLA
|
2
|
-
class Page
|
2
|
+
class Page
|
3
3
|
attr_accessor :depth, :status, :base_uri
|
4
4
|
attr_reader :url
|
5
5
|
|
@@ -32,21 +32,12 @@ module SLA
|
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
-
def protocol
|
36
|
-
@protocol ||= protocol!
|
37
|
-
end
|
38
|
-
|
39
|
-
def protocol!
|
40
|
-
uri = URI.parse url
|
41
|
-
uri.scheme
|
42
|
-
end
|
43
|
-
|
44
35
|
def content
|
45
36
|
@content ||= content!
|
46
37
|
end
|
47
38
|
|
48
39
|
def content!
|
49
|
-
response =
|
40
|
+
response = Cache.get url
|
50
41
|
self.status = response.error ? '404' : '200'
|
51
42
|
self.base_uri = response.base_uri
|
52
43
|
response.content
|
@@ -61,12 +52,11 @@ module SLA
|
|
61
52
|
end
|
62
53
|
|
63
54
|
def links!
|
64
|
-
|
55
|
+
anchors = doc.css('a')
|
65
56
|
result = []
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
result.push Link.new link.text, href
|
57
|
+
anchors.each do |a|
|
58
|
+
link = Link.new a['href'], text: a.text, parent: base_uri
|
59
|
+
result.push link if link.interesting?
|
70
60
|
end
|
71
61
|
result
|
72
62
|
end
|
data/lib/sla/version.rb
CHANGED
data/lib/sla.rb
CHANGED
@@ -6,14 +6,8 @@ require 'docopt'
|
|
6
6
|
require 'uri'
|
7
7
|
|
8
8
|
require 'sla/version'
|
9
|
-
require 'sla/base'
|
10
9
|
require 'sla/page'
|
11
10
|
require 'sla/link'
|
12
11
|
require 'sla/checker'
|
13
12
|
require 'sla/command_line'
|
14
13
|
require 'sla/cache'
|
15
|
-
require 'sla/url_manager'
|
16
|
-
|
17
|
-
# Remove before deploy
|
18
|
-
# require 'byebug'
|
19
|
-
# require 'pp'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sla
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Danny Ben Shitrit
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-07-
|
11
|
+
date: 2016-07-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colsole
|
@@ -160,14 +160,12 @@ files:
|
|
160
160
|
- README.md
|
161
161
|
- bin/sla
|
162
162
|
- lib/sla.rb
|
163
|
-
- lib/sla/base.rb
|
164
163
|
- lib/sla/cache.rb
|
165
164
|
- lib/sla/checker.rb
|
166
165
|
- lib/sla/command_line.rb
|
167
166
|
- lib/sla/docopt.txt
|
168
167
|
- lib/sla/link.rb
|
169
168
|
- lib/sla/page.rb
|
170
|
-
- lib/sla/url_manager.rb
|
171
169
|
- lib/sla/version.rb
|
172
170
|
homepage: https://github.com/DannyBen/sla
|
173
171
|
licenses:
|
@@ -192,5 +190,5 @@ rubyforge_project:
|
|
192
190
|
rubygems_version: 2.6.6
|
193
191
|
signing_key:
|
194
192
|
specification_version: 4
|
195
|
-
summary: Site Link Analyzer
|
193
|
+
summary: Command Line Site Link Analyzer
|
196
194
|
test_files: []
|
data/lib/sla/base.rb
DELETED
data/lib/sla/url_manager.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
module SLA
|
2
|
-
class UrlManager < Base
|
3
|
-
include Singleton
|
4
|
-
|
5
|
-
attr_reader :uri, :base_url
|
6
|
-
|
7
|
-
def base_url=(url)
|
8
|
-
url = "http://#{url}" unless url[0..3] == 'http'
|
9
|
-
response = cache.get url
|
10
|
-
@base_url = response.base_uri
|
11
|
-
end
|
12
|
-
|
13
|
-
def absolute(relative, base=nil)
|
14
|
-
return false if relative =~ /^(tel|mailto|#)/
|
15
|
-
base ||= base_url
|
16
|
-
relative = URI.encode relative
|
17
|
-
result = URI.join(base, relative)
|
18
|
-
|
19
|
-
return false unless result.host == base_url.host
|
20
|
-
result.to_s
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|