ts-admin 0.2.3 → 0.2.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/app.rb +2 -1
- data/controller/remap.rb +45 -18
- data/layout/default.xhtml +1 -1
- data/lib/ts-admin/traffic_server.rb +66 -79
- data/lib/ts-admin/version.rb +1 -1
- data/view/remap/form.xhtml +1 -1
- data/view/remap/list.xhtml +5 -5
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8cfd3ae8690d1a8d7947db457375f7ef7b1cb93b
|
4
|
+
data.tar.gz: d873461743c02ff698fd70dccf7c595399ec7977
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 25cc66b1569c8319b3e5a2340db91438c5aea729050216124cc5ddaf84ecd4000fa0c83d946725a7c192740b8cc557507f71842af139b4defae30ee1754f62db
|
7
|
+
data.tar.gz: e2b9b88282ee405f46ca8137ab511511661cf11f89b993ffdb2b75204c7cc656993820171dbac30f9259c3f10e451220e1a626fcc92392e4a215cd05082e3350
|
data/app.rb
CHANGED
data/controller/remap.rb
CHANGED
@@ -14,13 +14,14 @@ class RemapController < Controller
|
|
14
14
|
if request.post?
|
15
15
|
@from = request[:from]
|
16
16
|
@to = request[:to]
|
17
|
-
if traffic_server.
|
17
|
+
if (entry = traffic_server.new_remap_entry(@type, @from, @to)).valid?
|
18
|
+
traffic_server.remap_entries << entry
|
18
19
|
traffic_server.save
|
19
20
|
restart_traffic_server
|
20
|
-
flash[:info] = "
|
21
|
+
flash[:info] = "#{entry.type.to_s.capitalize} definition added"
|
21
22
|
call(r('/'))
|
22
23
|
else
|
23
|
-
|
24
|
+
set_errors(entry)
|
24
25
|
render_view :form
|
25
26
|
end
|
26
27
|
else
|
@@ -37,21 +38,31 @@ class RemapController < Controller
|
|
37
38
|
if request.post?
|
38
39
|
@from = request[:from]
|
39
40
|
@to = request[:to]
|
40
|
-
if traffic_server.
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
41
|
+
if entry = traffic_server.remap_entries.get_id(@id).first
|
42
|
+
entry.from = @from
|
43
|
+
entry.to = @to
|
44
|
+
if entry.valid?
|
45
|
+
traffic_server.save
|
46
|
+
restart_traffic_server
|
47
|
+
flash[:info] = "#{entry.type.to_s.capitalize} definition updated"
|
48
|
+
call(r('/'))
|
49
|
+
else
|
50
|
+
set_errors(entry)
|
51
|
+
render_view :form
|
52
|
+
end
|
45
53
|
else
|
46
|
-
flash[:error] = "
|
54
|
+
flash[:error] = "Remap definition not found"
|
47
55
|
render_view :form
|
48
56
|
end
|
49
57
|
else
|
50
|
-
@entry = traffic_server.
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
58
|
+
if @entry = traffic_server.remap_entries.get_id(@id).first
|
59
|
+
@type = @entry.type
|
60
|
+
@from = @entry.from
|
61
|
+
@to = @entry.to
|
62
|
+
render_view :form
|
63
|
+
else
|
64
|
+
call(r('/'))
|
65
|
+
end
|
55
66
|
end
|
56
67
|
end
|
57
68
|
|
@@ -59,11 +70,14 @@ class RemapController < Controller
|
|
59
70
|
return unless login_required
|
60
71
|
set_env
|
61
72
|
|
62
|
-
|
63
|
-
traffic_server.save
|
64
|
-
restart_traffic_server
|
73
|
+
@id = request[:id]
|
65
74
|
|
66
|
-
|
75
|
+
if entry = traffic_server.remap_entries.get_id(@id).first
|
76
|
+
traffic_server.remap_entries.delete(entry)
|
77
|
+
traffic_server.save
|
78
|
+
restart_traffic_server
|
79
|
+
flash[:info] = "#{entry.type.to_s.capitalize} definition removed"
|
80
|
+
end
|
67
81
|
|
68
82
|
call(r('/'))
|
69
83
|
end
|
@@ -83,4 +97,17 @@ class RemapController < Controller
|
|
83
97
|
@type = request[:type]
|
84
98
|
end
|
85
99
|
|
100
|
+
def set_errors(entry)
|
101
|
+
case entry.errors.first
|
102
|
+
when :type_invalid
|
103
|
+
flash[:error] = "Invalid remap type: #{entry.type.to_s}"
|
104
|
+
when :from_invalid
|
105
|
+
flash[:error] = "Invalid from: #{entry.from.to_s}"
|
106
|
+
when :to_invalid
|
107
|
+
flash[:error] = "Invalid to: #{entry.to.to_s}"
|
108
|
+
when :duplicate_entry
|
109
|
+
flash[:error] = "Duplicate remap definition"
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
86
113
|
end
|
data/layout/default.xhtml
CHANGED
@@ -39,7 +39,7 @@
|
|
39
39
|
<footer id="footer">
|
40
40
|
<p>
|
41
41
|
© 2012-2013 <a href="http://www.sic-software.com/">SIC! Software GmbH</a><br />
|
42
|
-
<a href="https://github.com/SICSoftwareGmbH/TSAdmin">TSAdmin</a> is free software and is licensed under the MIT license.
|
42
|
+
<a href="https://github.com/SICSoftwareGmbH/TSAdmin">TSAdmin</a> (v#{TSAdmin::VERSION}) is free software and is licensed under the MIT license.
|
43
43
|
</p>
|
44
44
|
</footer>
|
45
45
|
</div>
|
@@ -5,89 +5,87 @@ module TSAdmin
|
|
5
5
|
class TrafficServer
|
6
6
|
MARKER_TEXT = "CONFIGURATION FROM TSADMIN"
|
7
7
|
|
8
|
-
|
9
|
-
@options = {
|
10
|
-
'config_path' => '/etc/trafficserver',
|
11
|
-
'restart_cmd' => '/etc/init.d/trafficserver restart'
|
12
|
-
}.merge(options)
|
13
|
-
@config_path = @options['config_path']
|
14
|
-
end
|
15
|
-
|
16
|
-
def redirects
|
17
|
-
load unless defined?(@redirects)
|
18
|
-
@redirects.dup.freeze
|
19
|
-
end
|
20
|
-
|
21
|
-
def maps
|
22
|
-
load unless defined?(@maps)
|
23
|
-
@maps.dup.freeze
|
24
|
-
end
|
8
|
+
class RemapError < StandardError; end
|
25
9
|
|
26
|
-
|
27
|
-
|
10
|
+
class ValidatingArray < Array
|
11
|
+
class InvalidObject < StandardError; end
|
12
|
+
def add(o)
|
13
|
+
raise InvalidObject unless o.respond_to?(:valid?) && o.valid?
|
14
|
+
super
|
15
|
+
end
|
16
|
+
def method_missing(m, *args, &block)
|
17
|
+
if m.to_s =~ /^get_(\w+)$/ && args.count == 1
|
18
|
+
select{|i| i.respond_to?($1) && i.send($1) == args[0]}
|
19
|
+
else
|
20
|
+
super
|
21
|
+
end
|
22
|
+
end
|
28
23
|
end
|
29
24
|
|
30
|
-
|
31
|
-
|
25
|
+
class RemapEntry
|
26
|
+
attr_accessor :type, :id, :from, :to
|
32
27
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
end
|
28
|
+
def initialize(ts, type, from, to)
|
29
|
+
@ts = ts
|
30
|
+
@type = type.to_sym
|
31
|
+
@from = from.downcase
|
32
|
+
@to = to.downcase
|
33
|
+
@id = Digest::SHA1.hexdigest(@from)
|
34
|
+
end
|
41
35
|
|
42
|
-
|
36
|
+
def valid?
|
37
|
+
errors.count == 0
|
38
|
+
end
|
43
39
|
|
44
|
-
|
45
|
-
|
40
|
+
def errors
|
41
|
+
e = []
|
42
|
+
e << :type_invalid unless [:map, :redirect].include?(@type)
|
43
|
+
e << :from_invalid unless valid_url?(@from)
|
44
|
+
e << :to_invalid unless valid_url?(@to)
|
45
|
+
e << :duplicate_entry unless @ts.remap_entries.get_from(@from).select{|e| e != self}.count == 0
|
46
|
+
e.compact.uniq
|
47
|
+
end
|
46
48
|
|
47
|
-
|
49
|
+
private
|
48
50
|
|
49
|
-
|
51
|
+
def valid_url?(url)
|
52
|
+
!!(url =~ URI::regexp) rescue false
|
53
|
+
end
|
50
54
|
end
|
51
55
|
|
52
|
-
def
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
entry[:id] = Digest::SHA1.hexdigest("#{from}_#{to}")
|
56
|
+
def initialize(options={})
|
57
|
+
@options = {
|
58
|
+
'config_path' => '/etc/trafficserver',
|
59
|
+
'restart_cmd' => '/etc/init.d/trafficserver restart'
|
60
|
+
}.merge(options)
|
61
|
+
@config_path = @options['config_path']
|
59
62
|
end
|
60
63
|
|
61
|
-
def
|
62
|
-
load
|
63
|
-
|
64
|
-
|
65
|
-
@redirects.delete_if{|m| m[:id] == id}
|
64
|
+
def remap_entries
|
65
|
+
load unless defined?(@remap_entries)
|
66
|
+
@remap_entries
|
67
|
+
end
|
66
68
|
|
67
|
-
|
69
|
+
def new_remap_entry(type, from, to)
|
70
|
+
RemapEntry.new(self, type, from, to)
|
68
71
|
end
|
69
72
|
|
70
73
|
def save
|
71
74
|
own_config = ''
|
72
|
-
own_config << "#{marker_begin}\n"
|
73
|
-
|
74
|
-
|
75
|
-
own_config << "redirect #{redirect[:from]} #{redirect[:to]} #{options}\n"
|
76
|
-
end
|
77
|
-
maps.each do |map|
|
78
|
-
options = map[:options] ? '' : ''
|
79
|
-
own_config << "map #{map[:from]} #{map[:to]} #{options}\n"
|
75
|
+
own_config << "#{self.class.marker_begin}\n"
|
76
|
+
remap_entries.each do |remap_entry|
|
77
|
+
own_config << "#{remap_entry.type.to_s} #{remap_entry.from} #{remap_entry.to}\n"
|
80
78
|
end
|
81
|
-
own_config << "#{marker_end}\n"
|
79
|
+
own_config << "#{self.class.marker_end}\n"
|
82
80
|
|
83
81
|
file_content = ''
|
84
82
|
in_config_block = false
|
85
83
|
own_config_written = false
|
86
84
|
File.read(remap_path).each_line do |line|
|
87
|
-
if line.strip == marker_begin
|
85
|
+
if line.strip == self.class.marker_begin
|
88
86
|
in_config_block = true
|
89
87
|
next
|
90
|
-
elsif line.strip == marker_end
|
88
|
+
elsif line.strip == self.class.marker_end
|
91
89
|
in_config_block = false
|
92
90
|
next
|
93
91
|
end
|
@@ -112,28 +110,19 @@ module TSAdmin
|
|
112
110
|
|
113
111
|
private
|
114
112
|
|
115
|
-
def marker_begin
|
116
|
-
"# BEGIN #{MARKER_TEXT}"
|
117
|
-
end
|
118
|
-
|
119
|
-
def marker_end
|
120
|
-
"# END #{MARKER_TEXT}"
|
121
|
-
end
|
122
|
-
|
123
113
|
def remap_path
|
124
114
|
File.join(@config_path, 'remap.config')
|
125
115
|
end
|
126
116
|
|
127
117
|
def load
|
128
|
-
@
|
129
|
-
@maps = []
|
118
|
+
@remap_entries = ValidatingArray.new
|
130
119
|
|
131
120
|
in_config_block = false
|
132
121
|
File.read(remap_path).each_line do |line|
|
133
|
-
if line.strip == marker_begin
|
122
|
+
if line.strip == self.class.marker_begin
|
134
123
|
in_config_block = true
|
135
124
|
next
|
136
|
-
elsif line.strip == marker_end
|
125
|
+
elsif line.strip == self.class.marker_end
|
137
126
|
in_config_block = false
|
138
127
|
next
|
139
128
|
end
|
@@ -141,19 +130,17 @@ module TSAdmin
|
|
141
130
|
next unless in_config_block
|
142
131
|
|
143
132
|
type, from, to, *options = line.split(/\s+/)
|
144
|
-
|
145
|
-
|
146
|
-
when :redirect
|
147
|
-
@redirects << {:id => id, :type => type.to_sym, :from => from, :to => to, :options => {}}
|
148
|
-
when :map
|
149
|
-
@maps << {:id => id, :type => type.to_sym, :from => from, :to => to, :options => {}}
|
150
|
-
end
|
133
|
+
@remap_entries << RemapEntry.new(self, type, from, to)
|
134
|
+
@remap_entries.delete_if{|e| !e.valid?}
|
151
135
|
end
|
152
136
|
end
|
153
137
|
|
154
|
-
def
|
155
|
-
|
138
|
+
def self.marker_begin
|
139
|
+
"# BEGIN #{MARKER_TEXT}"
|
156
140
|
end
|
157
141
|
|
142
|
+
def self.marker_end
|
143
|
+
"# END #{MARKER_TEXT}"
|
144
|
+
end
|
158
145
|
end
|
159
146
|
end
|
data/lib/ts-admin/version.rb
CHANGED
data/view/remap/form.xhtml
CHANGED
data/view/remap/list.xhtml
CHANGED
@@ -7,14 +7,14 @@
|
|
7
7
|
</header>
|
8
8
|
<p>
|
9
9
|
<ul class="remap">
|
10
|
-
<?r @traffic_server.
|
10
|
+
<?r @traffic_server.remap_entries.get_type(@type.to_sym).each do |entry| ?>
|
11
11
|
<li>
|
12
|
-
<span class="url from"><a href="#{
|
12
|
+
<span class="url from"><a href="#{entry.from}">#{remap_url_highlight_scheme(entry.from)}</a></span>
|
13
13
|
<span class="arrow icon-chevron-right"></span>
|
14
|
-
<span class="url to"><a href="#{
|
14
|
+
<span class="url to"><a href="#{entry.to}">#{remap_url_highlight_scheme(entry.to)}</a></span>
|
15
15
|
<span class="buttons">
|
16
|
-
<a class="icon-pencil" href="/remap/edit?id=#{
|
17
|
-
<a class="icon-trash" href="/remap/delete?id=#{
|
16
|
+
<a class="icon-pencil" href="/remap/edit?id=#{entry.id}" title="Edit"></a>
|
17
|
+
<a class="icon-trash" href="/remap/delete?id=#{entry.id}" title="Delete"></a>
|
18
18
|
</span>
|
19
19
|
</li>
|
20
20
|
<?r end ?>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ts-admin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Florian Schwab
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-06-
|
11
|
+
date: 2013-06-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|