consul-templaterb 1.9.1 → 1.9.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -1
- data/.travis.yml +1 -1
- data/CHANGELOG.md +17 -2
- data/README.md +2 -0
- data/bin/consul-templaterb +4 -1
- data/lib/consul/async/consul_template.rb +5 -1
- data/lib/consul/async/consul_template_engine.rb +28 -2
- data/lib/consul/async/version.rb +1 -1
- data/samples/consul-ui/timeline.json.erb +35 -33
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 59bf13c2279da7eb5ba1955ca645420d91033cfb8d608a5a881824bf5492d6ed
|
4
|
+
data.tar.gz: a042648698f120b575308868d60e4dc92dbe47163f5f5c59a7ddd21f7194dac3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 978c146a7bd5f11f5bc3de56e0952c465f0011a24201e3a61268b27a34c4ba641e6f2841bb43911d8a1288c5854147164ed0468dbe3c0f4009e279e8addd724f
|
7
|
+
data.tar.gz: 63989a0b6cfded326d6ede9698163f68cfab2bda46c12a403814f45c89d49fb679d434c7a769581463fdd6d21f3325fb8910a8fcc279c3dd68bca5d846f659d0
|
data/.rubocop.yml
CHANGED
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -2,14 +2,29 @@
|
|
2
2
|
|
3
3
|
## (UNRELEASED)
|
4
4
|
|
5
|
-
## 1.9.
|
5
|
+
## 1.9.2 (January 4, 2019)
|
6
|
+
|
7
|
+
IMPROVEMENTS:
|
8
|
+
|
9
|
+
* Nicer display of messages at startup
|
10
|
+
* Minor consul-timeline improvements
|
11
|
+
|
12
|
+
NEW FEATURES:
|
13
|
+
|
14
|
+
* -M flag to debug memory for templates having leaks
|
15
|
+
|
16
|
+
## 1.9.1 (January 3, 2019)
|
6
17
|
|
7
18
|
NEW FEATURES:
|
8
19
|
|
9
20
|
* Now display effective network bandwidth instead of uncompressed bandwidth
|
10
21
|
* for catalog/services and catalog/nodes, now min delay is 15s instead of 30s
|
11
22
|
|
12
|
-
|
23
|
+
IMPROVEMENTS:
|
24
|
+
|
25
|
+
* Removed Ruby 2.3 from Travis, build with Ruby 2.6 in Travis
|
26
|
+
|
27
|
+
## 1.9.0 (January 2, 2019)
|
13
28
|
|
14
29
|
OPTIMIZATIONS:
|
15
30
|
|
data/README.md
CHANGED
@@ -138,6 +138,7 @@ $ consul-templaterb --help
|
|
138
138
|
USAGE: consul-templaterb [[options]]
|
139
139
|
-h, --help Show help
|
140
140
|
-v, --version Show Version
|
141
|
+
-g, --no-gzip-compression Disable GZIP compression in HTTP requests
|
141
142
|
-c, --consul-addr=<address> Address of Consul, eg: http://localhost:8500
|
142
143
|
--consul-token=<token> Use a token to connect to Consul
|
143
144
|
-V, --vault-addr=<address> Address of Vault, eg: http://localhost:8200
|
@@ -151,6 +152,7 @@ USAGE: consul-templaterb [[options]]
|
|
151
152
|
-K, --sig-term=kill_signal Signal to send to next --exec command on kill, default=TERM
|
152
153
|
-T, --trim-mode=trim_mode ERB Trim mode to use (- by default)
|
153
154
|
-R, --sig-reload=reload_signal Signal to send to next --exec command on reload (NONE supported), default=HUP
|
155
|
+
-M, --debug-memory-usage Display messages when RAM grows
|
154
156
|
-e, --exec=<command> Execute the following command
|
155
157
|
-d, --debug-network-usage Debug the network usage
|
156
158
|
-t erb_file:[output]:[command]:[params_file],
|
data/bin/consul-templaterb
CHANGED
@@ -157,6 +157,10 @@ optparse = OptionParser.new do |opts|
|
|
157
157
|
cur_sig_reload = compute_signal(sig, 'NONE')
|
158
158
|
end
|
159
159
|
|
160
|
+
opts.on('-M', '--debug-memory-usage', 'Display messages when RAM grows') do
|
161
|
+
consul_engine.debug_memory = true
|
162
|
+
end
|
163
|
+
|
160
164
|
opts.on('-e', '--exec=<command>', String, 'Execute the following command') do |cmd|
|
161
165
|
sig_reload = cur_sig_reload
|
162
166
|
sig_term = cur_sig_term
|
@@ -217,7 +221,6 @@ optparse = OptionParser.new do |opts|
|
|
217
221
|
params = {}
|
218
222
|
params = Consul::Async::Utilities.load_parameters_from_file(parameter_file) if parameter_file
|
219
223
|
consul_engine.add_template(source, dest, params)
|
220
|
-
|
221
224
|
if command
|
222
225
|
consul_engine.add_template_callback do |_all_ready, _template_manager, results|
|
223
226
|
results.each do |res|
|
@@ -28,6 +28,7 @@ module Consul
|
|
28
28
|
@endpoints = {}
|
29
29
|
@iteration = 1
|
30
30
|
@start_time = Time.now.utc
|
31
|
+
@last_debug_time = 0
|
31
32
|
@net_info = {
|
32
33
|
success: 0,
|
33
34
|
errors: 0,
|
@@ -212,7 +213,10 @@ module Consul
|
|
212
213
|
to_cleanup << endpoint_key if (@iteration - endpt.seen_at) > 60
|
213
214
|
end
|
214
215
|
if not_ready.count.positive?
|
215
|
-
|
216
|
+
if @iteration - @last_debug_time > 1
|
217
|
+
@last_debug_time = @iteration
|
218
|
+
STDERR.print "[INFO] #{@last_debug} Waiting for data from #{not_ready.count}/#{not_ready.count + ready} endpoints: #{not_ready[0..2]}..."
|
219
|
+
end
|
216
220
|
return [false, false, nil]
|
217
221
|
end
|
218
222
|
if to_cleanup.count > 1
|
@@ -9,8 +9,8 @@ require 'erb'
|
|
9
9
|
module Consul
|
10
10
|
module Async
|
11
11
|
class ConsulTemplateEngine
|
12
|
-
attr_reader :template_manager, :hot_reload_failure, :template_frequency
|
13
|
-
attr_writer :hot_reload_failure, :template_frequency
|
12
|
+
attr_reader :template_manager, :hot_reload_failure, :template_frequency, :debug_memory
|
13
|
+
attr_writer :hot_reload_failure, :template_frequency, :debug_memory
|
14
14
|
def initialize
|
15
15
|
@templates = []
|
16
16
|
@template_callbacks = []
|
@@ -18,6 +18,17 @@ module Consul
|
|
18
18
|
@all_templates_rendered = false
|
19
19
|
@template_frequency = 1
|
20
20
|
@periodic_started = false
|
21
|
+
@debug_memory = false
|
22
|
+
@last_memory_state = build_memory_info
|
23
|
+
end
|
24
|
+
|
25
|
+
def build_memory_info
|
26
|
+
s = GC.stat
|
27
|
+
{
|
28
|
+
pages: s[:total_allocated_pages] - s[:total_freed_pages],
|
29
|
+
objects: s[:total_allocated_objects] - s[:total_freed_objects],
|
30
|
+
time: Time.now.utc
|
31
|
+
}
|
21
32
|
end
|
22
33
|
|
23
34
|
def add_template_callback(&block)
|
@@ -81,6 +92,21 @@ module Consul
|
|
81
92
|
EventMachine.add_periodic_timer(template_frequency) do
|
82
93
|
@periodic_started = true
|
83
94
|
do_run(template_manager, template_renders)
|
95
|
+
if debug_memory
|
96
|
+
GC.start
|
97
|
+
new_memory_state = build_memory_info
|
98
|
+
diff_allocated = new_memory_state[:pages] - @last_memory_state[:pages]
|
99
|
+
diff_num_objects = new_memory_state[:objects] - @last_memory_state[:objects]
|
100
|
+
if diff_allocated != 0 || diff_num_objects.abs > (@last_memory_state[:pages] / 3)
|
101
|
+
timediff = new_memory_state[:time] - @last_memory_state[:time]
|
102
|
+
STDERR.puts "[MEMORY] #{new_memory_state[:time]} significant RAM Usage detected\n" \
|
103
|
+
"[MEMORY] #{new_memory_state[:time]} Pages : #{new_memory_state[:pages]}" \
|
104
|
+
" (diff #{diff_allocated} aka #{(diff_allocated / timediff).round(0)}/s) \n" \
|
105
|
+
"[MEMORY] #{new_memory_state[:time]} Objects: #{new_memory_state[:objects]}"\
|
106
|
+
" (diff #{diff_num_objects} aka #{(diff_num_objects / timediff).round(0)}/s)"
|
107
|
+
@last_memory_state = new_memory_state
|
108
|
+
end
|
109
|
+
end
|
84
110
|
end
|
85
111
|
end
|
86
112
|
end
|
data/lib/consul/async/version.rb
CHANGED
@@ -54,44 +54,46 @@ old_state = if @previous_state
|
|
54
54
|
cur_state
|
55
55
|
end
|
56
56
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
def <<(element)
|
67
|
-
return unless element
|
68
|
-
if size >= @max_size
|
69
|
-
shift
|
57
|
+
unless @events
|
58
|
+
class RingBuffer < Array
|
59
|
+
attr_reader :max_size
|
60
|
+
|
61
|
+
def initialize(max_size:, enum: nil)
|
62
|
+
@max_size = max_size
|
63
|
+
warn "Ringbuffer initialized with #{max_size}"
|
64
|
+
enum&.each { |e| self << e }
|
70
65
|
end
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
66
|
+
|
67
|
+
def <<(element)
|
68
|
+
return unless element
|
69
|
+
if size >= @max_size
|
70
|
+
shift
|
71
|
+
end
|
75
72
|
previous_e = last
|
73
|
+
after = []
|
74
|
+
while !previous_e.nil? && (previous_e['idx'] > element['idx'])
|
75
|
+
after.insert(0, pop)
|
76
|
+
previous_e = last
|
77
|
+
end
|
78
|
+
push(element)
|
79
|
+
after.each do |x|
|
80
|
+
push(x)
|
81
|
+
end
|
82
|
+
self
|
76
83
|
end
|
77
|
-
push(element)
|
78
|
-
after.each do |x|
|
79
|
-
push(x)
|
80
|
-
end
|
81
|
-
self
|
82
84
|
end
|
83
|
-
end
|
84
85
|
|
85
|
-
def diff(old, new_e)
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
end
|
86
|
+
def diff(old, new_e)
|
87
|
+
diff = OpenStruct.new
|
88
|
+
diff.appeared = new_e - old
|
89
|
+
diff.disappeared = old - new_e
|
90
|
+
diff.stayed = new_e & old
|
91
|
+
diff.all = new_e + old
|
92
|
+
diff
|
93
|
+
end
|
93
94
|
|
94
|
-
@events = RingBuffer.new(max_size: (ENV['CONSUL_TIMELINE_BUFFER'] || 10000).to_i)
|
95
|
+
@events = RingBuffer.new(max_size: (ENV['CONSUL_TIMELINE_BUFFER'] || 10000).to_i)
|
96
|
+
end
|
95
97
|
@new_events = []
|
96
98
|
|
97
99
|
def log_event(line)
|
@@ -215,4 +217,4 @@ if template_info['was_rendered_once']
|
|
215
217
|
warn "First full rendering completed at #{@current_time} !" unless @previous_state
|
216
218
|
@previous_state = cur_state
|
217
219
|
end
|
218
|
-
%><%= JSON.generate(@events) %>
|
220
|
+
%><%= JSON.generate(@events) %>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: consul-templaterb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.9.
|
4
|
+
version: 1.9.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- SRE Core Services
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-01-
|
11
|
+
date: 2019-01-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: em-http-request
|