diplomat 2.1.3 → 2.2.0

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: c437150fe2670860ab730944e2ff4fd3327e09a4a9632ef97b7f535d4b23966a
4
- data.tar.gz: e52f850967bf6dd29e4e11a48e893e06f9f4552f3045ad8e2892592a38e26307
3
+ metadata.gz: aeda162dfc23369b377785a2cc09baa0544dfbfb234ee60b3c8d722916393479
4
+ data.tar.gz: 57fe7b8364bcbea2ba93b39c4c10da4bb735e80e8719ebff4017687a1efc9cd4
5
5
  SHA512:
6
- metadata.gz: 9fd3a079a14e539c70260f602ff29b2a9004ca306ae0e158b0316ef8d787daafa4a91991221fbfc9d987495f5e8b1b2650fc8772c9e32348f3ed2da12e93ecb6
7
- data.tar.gz: f0e510ec423c65a22e10671a3b4744f696700d8745ff43da81fb7b549b3081ee2c4ee50bf7c8c1905bceaca49046965e1383a599b38cc168da1e82b24388cc9c
6
+ metadata.gz: 534b858e18d9fe81c87b04cc4a5a4abfc74529b1f8dd947cb07f09098ebad0cad034b5a2bf7a5765cd8df045237977b319bf83b46f4eae249095159fb7f235df
7
+ data.tar.gz: 8b8e2562535dbc7f8c1e2c2e38e2a4ff31b2b09074ac02b3e6ab6ff935435a3c52c07b6b6ceb044e51bee3973c7ae578c4e8d6a6d012b4b9a777457f4a6af705
@@ -58,8 +58,8 @@ module Diplomat
58
58
  # See https://bugs.ruby-lang.org/issues/10969
59
59
  begin
60
60
  super
61
- rescue NameError => err
62
- raise NoMethodError, err
61
+ rescue NameError => e
62
+ raise NoMethodError, e
63
63
  end
64
64
  end
65
65
  end
@@ -198,6 +198,7 @@ module Diplomat
198
198
  url += custom_params unless custom_params.nil?
199
199
  begin
200
200
  connection.get do |req|
201
+ req.options[:params_encoder] = options[:params_encoder] if options[:params_encoder]
201
202
  req.url rest_options[:url_prefix] ? rest_options[:url_prefix] + concat_url(url) : concat_url(url)
202
203
  rest_options[:headers].map { |k, v| req.headers[k.to_sym] = v } unless rest_options[:headers].nil?
203
204
  req.options.timeout = options[:timeout] if options[:timeout]
@@ -15,7 +15,21 @@ module Diplomat
15
15
  custom_params << use_named_parameter('wait', options[:wait]) if options[:wait]
16
16
  custom_params << use_named_parameter('index', options[:index]) if options[:index]
17
17
  custom_params << use_named_parameter('dc', options[:dc]) if options[:dc]
18
- custom_params << use_named_parameter('tag', options[:tag]) if options[:tag]
18
+ if options[:tag]
19
+ # tag can be either a String, or an array of strings
20
+ # by splatting it is guaranteed to be an array of strings
21
+ [*options[:tag]].each do |value|
22
+ custom_params << use_named_parameter('tag', value)
23
+ end
24
+ end
25
+
26
+ # We have to provide a custom params encoder here because Faraday - by default - assumes that
27
+ # list keys have [] as part of their name. This is however not the case for consul tags, which
28
+ # just use repeated occurences of the same key.
29
+ #
30
+ # So faraday reduces this: http://localhost:8500?a=1&a=2 to http://localhost:8500?a=2 unless you
31
+ # explicitly tell it not to.
32
+ options[:params_encoder] = Faraday::FlatParamsEncoder
19
33
 
20
34
  ret = send_get_request(@conn, ["/v1/catalog/service/#{key}"], options, custom_params)
21
35
  if meta && ret.headers
@@ -1,3 +1,3 @@
1
1
  module Diplomat
2
- VERSION = '2.1.3'.freeze
2
+ VERSION = '2.2.0'.freeze
3
3
  end
@@ -0,0 +1,7 @@
1
+ require 'diplomat'
2
+
3
+ # Usefull usage of Diplomat lib.
4
+ module DiplomaticBag
5
+ # Load all module files
6
+ Dir[File.join(__dir__, 'diplomatic_bag', '*.rb')].each { |file| require file }
7
+ end
@@ -0,0 +1,11 @@
1
+ # Usefull usage of Diplomat lib: Datacenter functions
2
+ module DiplomaticBag
3
+ def self.get_datacenters_list(dc, options = {})
4
+ dcs = []
5
+ datacenters = Diplomat::Datacenter.get(nil, options)
6
+ dc.each do |c|
7
+ dcs.concat(datacenters.select { |d| d[/#{c}/] })
8
+ end
9
+ dcs.uniq
10
+ end
11
+ end
@@ -0,0 +1,32 @@
1
+ # Usefull usage of Diplomat lib: Info functions
2
+ module DiplomaticBag
3
+ # rubocop:disable AbcSize
4
+ def self.consul_info(options = {})
5
+ consul_self = Diplomat::Agent.self(options)
6
+ puts 'Server: ' + consul_self['Config']['NodeName']
7
+ puts 'Datacenter: ' + consul_self['Config']['Datacenter']
8
+ puts 'Consul Version: ' + consul_self['Config']['Version']
9
+ if consul_self['Stats']['consul']['leader_addr']
10
+ puts 'Leader Address: ' + consul_self['Stats']['consul']['leader_addr']
11
+ puts 'applied_index: ' + consul_self['Stats']['raft']['applied_index']
12
+ puts 'commit_index: ' + consul_self['Stats']['raft']['commit_index']
13
+ end
14
+ members = Diplomat::Members.get(options)
15
+ servers = members.select { |member| member['Tags']['role'] == 'consul' }.sort_by { |n| n['Name'] }
16
+ nodes = members.select { |member| member['Tags']['role'] == 'node' }
17
+ leader = Diplomat::Status.leader(options).split(':')[0]
18
+ puts 'Servers Count: ' + servers.count.to_s
19
+ puts 'Nodes Count: ' + nodes.count.to_s
20
+ puts 'Servers:'
21
+ servers.map do |s|
22
+ if s['Tags']['role'] == 'consul'
23
+ if s['Addr'] == leader
24
+ puts ' ' + s['Name'] + ' ' + s['Addr'] + ' *Leader*'
25
+ else
26
+ puts ' ' + s['Name'] + ' ' + s['Addr']
27
+ end
28
+ end
29
+ end
30
+ end
31
+ # rubocop:enable AbcSize
32
+ end
@@ -0,0 +1,28 @@
1
+ # Usefull usage of Diplomat lib: Nodes functions
2
+ module DiplomaticBag
3
+ def self.get_duplicate_node_id(options = {})
4
+ status = {
5
+ 1 => 'Alive',
6
+ 2 => '?',
7
+ 3 => 'Left',
8
+ 4 => 'Failed'
9
+ }
10
+ result = []
11
+ members = Diplomat::Members.get(options)
12
+ grouped = members.group_by do |row|
13
+ [row['Tags']['id']]
14
+ end
15
+ filtered = grouped.values.select { |a| a.size > 1 }
16
+ filtered.each do |dup|
17
+ instance = {}
18
+ instance[:node_id] = dup[0]['Tags']['id']
19
+ nodes = []
20
+ dup.each do |inst|
21
+ nodes << { name: inst['Name'], status: status[inst['Status']] }
22
+ end
23
+ instance[:nodes] = nodes
24
+ result << instance
25
+ end
26
+ result
27
+ end
28
+ end
@@ -0,0 +1,20 @@
1
+ # Usefull usage of Diplomat lib: Service functions
2
+ module DiplomaticBag
3
+ def self.get_service_info(service, options = {})
4
+ result = {}
5
+ health = Diplomat::Health.service(service, options)
6
+ result[service] = {}
7
+ health.each do |h|
8
+ result[service][h['Node']['Node']] = {
9
+ 'Address': h['Node']['Address'],
10
+ 'Port': h['Service']['Port']
11
+ }
12
+ checks = {}
13
+ h['Checks'].each do |c|
14
+ checks[c['Name']] = { 'status': c['Status'], 'output': c['Output'] }
15
+ end
16
+ result[service][h['Node']['Node']]['Checks'] = checks
17
+ end
18
+ result
19
+ end
20
+ end
@@ -0,0 +1,38 @@
1
+ # Usefull usage of Diplomat lib: Services functions
2
+ module DiplomaticBag
3
+ def self.compute_service_name(s)
4
+ return '/node::health/' if s.nil? || s == ''
5
+
6
+ s
7
+ end
8
+
9
+ def self.get_all_services_status(options = {})
10
+ result = {}
11
+ services = Diplomat::Health.state('any', options)
12
+ grouped_by_service = services.group_by { |h| compute_service_name(h['ServiceName']) }.values
13
+ grouped_by_service.each do |s|
14
+ grouped_by_status = s.group_by { |h| h['Status'] }.values
15
+ status = {}
16
+ grouped_by_status.each do |state|
17
+ status[state[0]['Status']] = state.count
18
+ end
19
+ service_name = compute_service_name(s[0]['ServiceName'])
20
+ result[service_name] = status
21
+ end
22
+ result
23
+ end
24
+
25
+ def self.get_services_list(service, options = {})
26
+ services = Diplomat::Service.get_all(options)
27
+ services.to_h.keys.grep(/#{service}/)
28
+ end
29
+
30
+ def self.get_services_info(service, options = {})
31
+ result = []
32
+ services = get_services_list(service, options)
33
+ services.each do |s|
34
+ result << get_service_info(s.to_s, options)
35
+ end
36
+ result
37
+ end
38
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: diplomat
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.3
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Hamelink
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-03-20 00:00:00.000000000 Z
12
+ date: 2019-04-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -239,6 +239,12 @@ files:
239
239
  - lib/diplomat/session.rb
240
240
  - lib/diplomat/status.rb
241
241
  - lib/diplomat/version.rb
242
+ - lib/diplomatic_bag.rb
243
+ - lib/diplomatic_bag/datacenters.rb
244
+ - lib/diplomatic_bag/info.rb
245
+ - lib/diplomatic_bag/nodes.rb
246
+ - lib/diplomatic_bag/service.rb
247
+ - lib/diplomatic_bag/services.rb
242
248
  homepage: https://github.com/WeAreFarmGeek/diplomat
243
249
  licenses:
244
250
  - BSD-3-Clause