diplomat 2.1.3 → 2.2.0

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