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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0baeb6d85fa2f689ac4ff09c496188c635affe3c36d4be0646bb12fd98bf788b
4
- data.tar.gz: c9a0a12bd22972c20a88ba5cacdebb26f754e831a8c57631b4d2b3d3336512a5
3
+ metadata.gz: 59bf13c2279da7eb5ba1955ca645420d91033cfb8d608a5a881824bf5492d6ed
4
+ data.tar.gz: a042648698f120b575308868d60e4dc92dbe47163f5f5c59a7ddd21f7194dac3
5
5
  SHA512:
6
- metadata.gz: 392d5e80cc2cc910500e5d0d93f0ab5dda3e65396ca745d6881c8cf10fc3775c59d7418af83d4aebbf44cfc55036ed942b41a1ef6eff8ea16a2db65401c8c2eb
7
- data.tar.gz: b88eaa96328377e5a7c23fa8283a4165831b57c4cb7861ca71352446711850e5f6afcc392819baee38aeb3ecafdc424fbeada84925be6c52109f9375f9f86b73
6
+ metadata.gz: 978c146a7bd5f11f5bc3de56e0952c465f0011a24201e3a61268b27a34c4ba641e6f2841bb43911d8a1288c5854147164ed0468dbe3c0f4009e279e8addd724f
7
+ data.tar.gz: 63989a0b6cfded326d6ede9698163f68cfab2bda46c12a403814f45c89d49fb679d434c7a769581463fdd6d21f3325fb8910a8fcc279c3dd68bca5d846f659d0
data/.rubocop.yml CHANGED
@@ -7,7 +7,7 @@ Metrics/AbcSize:
7
7
  Max: 80
8
8
 
9
9
  Metrics/BlockLength:
10
- Max: 140
10
+ Max: 145
11
11
 
12
12
  Metrics/BlockNesting:
13
13
  Max: 4
data/.travis.yml CHANGED
@@ -1,8 +1,8 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.3
4
3
  - 2.4
5
4
  - 2.5
5
+ - 2.6
6
6
  deploy:
7
7
  provider: rubygems
8
8
  api_key:
data/CHANGELOG.md CHANGED
@@ -2,14 +2,29 @@
2
2
 
3
3
  ## (UNRELEASED)
4
4
 
5
- ## 1.9.1
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
- ## 1.9.0
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],
@@ -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
- STDERR.print "[INFO] Waiting for data from #{not_ready.count}/#{not_ready.count + ready} endpoints: #{not_ready[0..2]}..."
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
@@ -1,5 +1,5 @@
1
1
  module Consul
2
2
  module Async
3
- VERSION = '1.9.1'.freeze
3
+ VERSION = '1.9.2'.freeze
4
4
  end
5
5
  end
@@ -54,44 +54,46 @@ old_state = if @previous_state
54
54
  cur_state
55
55
  end
56
56
 
57
- class RingBuffer < Array
58
- attr_reader :max_size
59
-
60
- def initialize(max_size:, enum: nil)
61
- @max_size = max_size
62
- warn "Ringbuffer initialized with #{max_size}"
63
- enum&.each { |e| self << e }
64
- end
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
- previous_e = last
72
- after = []
73
- while !previous_e.nil? && (previous_e['idx'] > element['idx'])
74
- after.insert(0, pop)
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
- diff = OpenStruct.new
87
- diff.appeared = new_e - old
88
- diff.disappeared = old - new_e
89
- diff.stayed = new_e & old
90
- diff.all = new_e + old
91
- diff
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) unless @events
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.1
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-03 00:00:00.000000000 Z
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