consul-template-generator 0.3.2 → 0.3.3

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