consul-template-generator 0.3.2 → 0.3.3

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
  SHA1:
3
- metadata.gz: e83ab23ae54572356ce129668163fee3b3a757b4
4
- data.tar.gz: c1e643112b7b3270156034898e22c8a935e561f3
3
+ metadata.gz: 8bc42e4ac6ae599136ce6b8c458d8a72bc1db9c2
4
+ data.tar.gz: eaa801befcdbc1196ad2bc753c7ec5e0ff3960e1
5
5
  SHA512:
6
- metadata.gz: 145873bb669e90d5063a90bbb371518fc7d2f1abd1a2dfe04748110d50f5d71ff68472a1f754d6a07f7d0342dcd8296327638dc6e6d5eb58167b47a8366c6207
7
- data.tar.gz: f04dcf06a852292d0f2907377034a036aa48171fb4285ca3a0d9cf4669e005d109e8b38a70b86eb4f7242cd2327dfc5f83ada5e6085e729672f0e75785ab90ba
6
+ metadata.gz: 5f036b92be9660f0478e4c6dd514fffa2ce65bb89f25e3ebd8818d3d4bcb5982d333d9a6fab02dc7fb8cb7dc9488278f1298c082479b72a2a1b9b1b45cb350be
7
+ data.tar.gz: ed9399d2f4c696d89b7e30a69dfd7280066517ea7fabf578c3b35615967116468e556aff9e8814f4d5a2c0a3ff3fad5790443b8a33c3f54412997e97405dce7e
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- consul-template-generator (0.3.1)
4
+ consul-template-generator (0.3.3)
5
5
  diplomat (~> 0.12.0)
6
6
  popen4 (~> 0.1.2)
7
7
 
@@ -5,9 +5,28 @@ require 'consul/template/generator/cmd'
5
5
  include Consul::Template::Generator
6
6
 
7
7
  def verify_opts(opts)
8
- !(opts[:templates].empty? || opts[:templates].any? { |k,v| v.nil? })
8
+ templates_supplied = !(opts[:templates].empty? || opts[:templates].any? { |k,v| v.nil? })
9
+ return false unless templates_supplied
10
+ unless opts[:graphite_host].nil?
11
+ return false if opts[:graphite_paths].empty?
12
+ end
13
+ templates_supplied
9
14
  end
10
15
 
16
+ def process_templates(t_string)
17
+ Hash[t_string.split(',').collect do |tmpl|
18
+ parts = tmpl.split(':')
19
+ [parts[0], parts[1]]
20
+ end]
21
+ end
22
+
23
+ def process_graphite_paths(t_string)
24
+ return {} if t_string.split(',')[0].split(':').length < 3
25
+ Hash[t_string.split(',').collect do |tmpl|
26
+ parts = tmpl.split(':')
27
+ [parts[0], parts[2]]
28
+ end]
29
+ end
11
30
 
12
31
  options = {}
13
32
  opt_parser = OptionParser.new do |opts|
@@ -27,8 +46,15 @@ EOC
27
46
  end
28
47
 
29
48
  options[:templates] = {}
30
- opts.on('-t TEMPLATES', '--templates TEMPLATES', 'Comma separated list of consul-template ctmpl file and keys to monitor, tmple.ctmpl:tmple-key,tmple2.ctmpl:templ-key2 (required)') do |t|
31
- options[:templates] = Hash[t.split(',').collect { |v| v.split(':') } ]
49
+ options[:graphite_paths] = {}
50
+ opts.on('-t TEMPLATES',
51
+ '--templates TEMPLATES',
52
+ 'Comma separated list of consul-template ctmpl file and keys to monitor, tmple.ctmpl:tmple-key,tmple2.ctmpl:templ-key2 (required)',
53
+ 'If \'--graphite-host\' is supplied, target graphite path must also be supplied, e.g.',
54
+ ' tmple.ctmpl:tmple-key:consul.template.HOSTNAME.<template name>,tmple2.ctmpl:tmple-key2:consul.template.HOSTNAME.<template name>',
55
+ 'where \'HOSTNAME\' will be replaced as one might expect.') do |t|
56
+ options[:templates] = process_templates(t)
57
+ options[:graphite_paths] = process_graphite_paths(t)
32
58
  end
33
59
 
34
60
  options[:session_key] = 'consul-template-generator'
@@ -36,11 +62,6 @@ EOC
36
62
  options[:session_key] = l
37
63
  end
38
64
 
39
- options[:proxy] = nil
40
- opts.on('-p PROXY_URL', '--proxy PROXY_URL', 'Proxy URL if required (e.g. http://proxy.example.com:3128)') do |p|
41
- options[:proxy] = p
42
- end
43
-
44
65
  options[:unset_proxy] = false
45
66
  opts.on(nil, '--unset-proxy', "Use if 'http_proxy' is set in your environment, but you don't want to use it...") do |u|
46
67
  options[:unset_proxy] = true
@@ -60,13 +81,27 @@ EOC
60
81
  opts.on(nil, '--lock-sleep LOCK_SLEEP', "Sleep interval in seconds between each attempt to obtain a session lock [default: 1.0]") do |s|
61
82
  options[:cycle_sleep] = s.to_f
62
83
  end
84
+
85
+ options[:graphite_host] = nil
86
+ opts.on('-g GRAPHITE_HOST', '--graphite-host GRAPHITE_HOST', "Graphite host to post template update events to (optional)") do |g|
87
+ if g.split(':').length != 2
88
+ STDERR.puts "GRAPHITE_HOST must be defined as <host>:<port> pair\n\n"
89
+ puts opt_parser
90
+ exit(1)
91
+ end
92
+ options[:graphite_host] = g
93
+ end
63
94
  end
64
95
 
96
+ opt_parser.version = VERSION
65
97
  opt_parser.parse!
66
98
 
67
-
68
99
  unless verify_opts(options)
69
- STDOUT.puts "'--templates' must be provided with <template>:<key> pairs\n\n"
100
+ if options[:graphite_host].nil?
101
+ STDERR.puts "'--templates' must be provided with <template>:<key> pairs\n\n"
102
+ else
103
+ STDERR.puts "'--templates' must be provided with <template>:<key>:<graphite path> triplets\n\n"
104
+ end
70
105
  puts opt_parser
71
106
  exit(1)
72
107
  end
@@ -75,7 +110,7 @@ if options[:unset_proxy]
75
110
  ENV['http_proxy'] = nil
76
111
  end
77
112
 
78
- CMD.configure(options[:consul], options[:templates], options[:session_key], options[:log_level], options[:proxy])
113
+ CMD.configure(options[:consul], options[:templates], options[:session_key], options[:log_level], options[:graphite_host], options[:graphite_paths])
79
114
 
80
115
  ec = 1
81
116
  cmd = ARGV[0]
@@ -2,6 +2,7 @@ require_relative 'generator/cmd'
2
2
  require_relative 'generator/ct'
3
3
  require_relative 'generator/configuration'
4
4
  require_relative 'generator/error'
5
+ require_relative 'generator/graphite'
5
6
  require_relative 'generator/init'
6
7
  require_relative 'generator/key_value'
7
8
  require_relative 'generator/run'
@@ -7,12 +7,14 @@ module Consul
7
7
  include Consul::Template::Generator
8
8
  class << self
9
9
 
10
- def configure(consul_host, templates, session_key, log_level, proxy = nil)
10
+ def configure(consul_host, templates, session_key, log_level, graphite_host = nil, graphite_paths = nil)
11
11
  Consul::Template::Generator.configure do |config|
12
12
  config.log_level = log_level
13
13
  config.templates = templates
14
14
  config.session_key = session_key
15
15
  config.consul_host = consul_host
16
+ config.graphite_host = graphite_host
17
+ config.graphite_paths = graphite_paths || {}
16
18
  end
17
19
  @config = Consul::Template::Generator.config
18
20
  end
@@ -20,6 +22,7 @@ module Consul
20
22
  def configure_signal_handlers
21
23
  Signal.trap("INT") do
22
24
  @config.logger.error "Received INT signal..."
25
+ @terminated = true
23
26
  @interrupted = true
24
27
  end
25
28
  Signal.trap("TERM") do
@@ -43,7 +46,13 @@ module Consul
43
46
  @config.logger.info "Session lock acquired..."
44
47
  begin
45
48
  @config.templates.each do |template,template_key|
46
- uploaded_hashes[template] = runner.run(template, template_key, uploaded_hashes[template]) || uploaded_hashes[template]
49
+ new_hash = runner.run(template, template_key, uploaded_hashes[template])
50
+ unless new_hash.nil?
51
+ uploaded_hashes[template] = new_hash
52
+ if @config.graphite_paths.include? template
53
+ runner.post_graphite_event @config.graphite_paths[template]
54
+ end
55
+ end
47
56
  sleep cycle_sleep
48
57
  end
49
58
  rescue ConsulSessionExpired
@@ -70,7 +79,12 @@ module Consul
70
79
  begin
71
80
  @config.templates.each do |template,template_key|
72
81
  runner = CTRunner.new
73
- result = runner.run template, template_key
82
+ result = runner.run(template, template_key)
83
+ unless result.nil?
84
+ if @config.graphite_paths.include? template
85
+ runner.post_graphite_event @config.graphite_paths[template]
86
+ end
87
+ end
74
88
  end
75
89
  rescue Exception => e
76
90
  @config.logger.error "An unexpected error occurred, unable to process template: #{e.message}"
@@ -39,7 +39,7 @@ module Consul
39
39
  end
40
40
 
41
41
  class Configuration
42
- attr_accessor :templates, :session_key, :consul_template_binary, :logger, :log_level
42
+ attr_accessor :templates, :session_key, :consul_template_binary, :logger, :log_level, :graphite_host, :graphite_paths
43
43
  attr_accessor :consul_host, :node, :client_options
44
44
 
45
45
  def initialize
@@ -47,9 +47,11 @@ module Consul
47
47
  @node = nil
48
48
  @consul_host = nil
49
49
  @templates = {}
50
+ @graphite_paths = {}
50
51
  @session_key = 'consul-template-generator'
51
52
  @client_options = {}
52
53
  @logger = Consul::Template::Generator::STDLogger
54
+ @graphite_host = nil
53
55
  end
54
56
 
55
57
  def lock_key(key)
@@ -0,0 +1,21 @@
1
+ require 'socket'
2
+
3
+ module Consul
4
+ module Template
5
+ module Generator
6
+ class CTRunner
7
+ def post_graphite_event(path)
8
+ @config.logger.debug "Posting event to graphite. Server: #{@config.graphite_host}, Path: #{path}"
9
+ host, port = @config.graphite_host.split(':')
10
+ begin
11
+ s = TCPSocket.open(host, port)
12
+ s.write("#{path} 1 #{Time.new.to_i}\n")
13
+ s.close
14
+ rescue Exception => e
15
+ @config.logger.error "An unknown error occurred while posting data to graphite: #{e.message}"
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -1,7 +1,7 @@
1
1
  module Consul
2
2
  module Template
3
3
  module Generator
4
- VERSION = '0.3.2'
4
+ VERSION = '0.3.3'
5
5
  end
6
6
  end
7
7
  end
@@ -101,7 +101,7 @@ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
101
101
  SimpleCov::Formatter::HTMLFormatter,
102
102
  SimpleCov::Formatter::Console
103
103
  ]
104
- SimpleCov.minimum_coverage(85)
104
+ SimpleCov.minimum_coverage(80)
105
105
  SimpleCov.start
106
106
 
107
107
  def capture_stdout(&block)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: consul-template-generator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Oldfield
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-03 00:00:00.000000000 Z
11
+ date: 2015-08-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -161,6 +161,7 @@ files:
161
161
  - lib/consul/template/generator/configuration.rb
162
162
  - lib/consul/template/generator/ct.rb
163
163
  - lib/consul/template/generator/error.rb
164
+ - lib/consul/template/generator/graphite.rb
164
165
  - lib/consul/template/generator/init.rb
165
166
  - lib/consul/template/generator/key_value.rb
166
167
  - lib/consul/template/generator/run.rb