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 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