consul-templaterb 1.9.1 → 1.9.2
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/.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
|