kitchen_hooks 1.7.4 → 1.7.5

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: 76f1021d1694ab9769980460d4ac30be16ded1f2
4
- data.tar.gz: dfb8c50fc2242602bcaf3862458a8479a72d0611
3
+ metadata.gz: ef6e686e12474334dac278347907e0217f4c6988
4
+ data.tar.gz: bffb695626d6390acaf5d20aeacdc10900d819fa
5
5
  SHA512:
6
- metadata.gz: 833bc6076be34537ca8bff79a336093fabf83b039d9bcc68d3b728d05585a4bf531b74e10e19364b737c0018cc45366800925e56e774fb41f005ee204ecb0121
7
- data.tar.gz: ff3bd026d78c11825fab7c59d28ea0784e28d18e00c1befb008dfa98c0828c4ded6992cbf202498292515288547d3a18deff33edc24a752265aec53029314673
6
+ metadata.gz: 7cce1b540f68b1c9b5c29001dc973e9237a16c02cfa5ce9c725f5169b9794dc29e09999842b4140d22c52ba741530315773b9769fe27117a9131f3c86709da66
7
+ data.tar.gz: 53b7d4986200d24f82cdac784045506583e3b0a90e3808b2f94f2880215cb8095386f7485d7e34c7e755d4fe0f65b9c8da1af02600d9ee4316612ec6cc8f21db
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.7.4
1
+ 1.7.5
data/etc/config.json CHANGED
@@ -1,4 +1,5 @@
1
1
  {
2
+ "sync_interval": 30,
2
3
  "hipchat": null,
3
4
  "knives": {
4
5
  "bng11": "~/.chef/bng11.rb",
@@ -43,8 +43,8 @@ module KitchenHooks
43
43
  def self.sync!
44
44
  @@sync_worker = Thread.new do
45
45
  loop do
46
- sleep @@sync_interval
47
46
  process_sync
47
+ sleep @@sync_interval
48
48
  end
49
49
  end
50
50
  end
@@ -144,13 +144,21 @@ module KitchenHooks
144
144
 
145
145
  def self.process_release version=KitchenHooks::VERSION
146
146
  return if db['meta_version'] == version
147
- db.set! 'meta_version', version
147
+ db.lock do
148
+ db.set! 'meta_version', version
149
+ end
148
150
  mark version, 'release'
149
151
  end
150
152
 
151
153
 
152
154
  def self.process_sync
153
- sync = sync_servers(knives).status
155
+ cached_nodes = db['meta_cached_nodes']
156
+ cached_nodes ||= {}
157
+ sync_servers = SyncServers.new knives, cached_nodes
158
+ db.lock do
159
+ db.set! 'meta_cached_nodes', sync_servers.cached_nodes
160
+ end
161
+ sync = sync_servers.status
154
162
 
155
163
  if sync.nil?
156
164
  mark "Couldn't sync Chef servers (unknown issue)", 'unsynced'
@@ -158,7 +166,6 @@ module KitchenHooks
158
166
  end
159
167
 
160
168
  sync_tag = sync[:num_failures].zero? ? 'synced' : 'unsynced'
161
-
162
169
  mark sync, sync_tag
163
170
  end
164
171
 
@@ -42,10 +42,6 @@ module KitchenHooks
42
42
  }.compact.reverse.join(' ')
43
43
  end
44
44
 
45
- def self.sync_servers knives
46
- SyncServers.new knives
47
- end
48
-
49
45
 
50
46
  def self.report_error e, msg=nil
51
47
  msg = e.message if msg.nil?
@@ -6,14 +6,18 @@ require 'set'
6
6
  class SyncServers
7
7
  attr_reader :status
8
8
 
9
-
10
- def initialize knives
9
+ def initialize knives, cached_nodes={}
11
10
  @knives = knives
12
11
  @started = Time.now
13
- @status = sync_servers.merge \
12
+ @cached_nodes = Hash.new { |h,k| h[k] = 0.0 }
13
+ @cached_nodes.merge! cached_nodes
14
+ @status = sync_servers.merge \
14
15
  elapsed: Time.now - @started rescue nil
15
16
  end
16
17
 
18
+ def cached_nodes
19
+ Hash[@cached_nodes]
20
+ end
17
21
 
18
22
 
19
23
  private
@@ -25,11 +29,11 @@ private
25
29
  end
26
30
 
27
31
 
28
- def all_nodes
29
- @clients ||= {}
32
+ def search_nodes
33
+ @clients = {}
30
34
  bad_ridleys = []
31
35
 
32
- @all_nodes ||= ridleys.each_with_index.pmap(4) do |ridley, i|
36
+ @search_nodes ||= ridleys.each_with_index.pmap(4) do |ridley, i|
33
37
  clients = ridley.client.all
34
38
 
35
39
  begin
@@ -51,25 +55,33 @@ private
51
55
  @ridleys.delete_at idx
52
56
  end
53
57
 
54
- return @all_nodes
58
+ return @search_nodes
55
59
  end
56
60
 
57
61
 
58
- def merged_nodes
59
- @merged_nodes ||= all_nodes.group_by(&:name).pmap do |_, copies|
62
+ def updated_and_deleted_nodes
63
+ @all_nodes ||= search_nodes.group_by(&:name).pmap do |name, copies|
60
64
  copies.sort_by do |c|
61
65
  time = c.automatic.ohai_time
62
66
  time.is_a?(Float) ? time : -1.0
63
67
  end.last
64
68
  end
69
+
70
+ @updated_nodes ||= @all_nodes.select do |n|
71
+ n.automatic.ohai_time.to_f > @cached_nodes[n.name]
72
+ end
73
+
74
+ @deleted_nodes ||= @cached_nodes.keys - @all_nodes.map(&:name)
75
+
76
+ return @updated_nodes, @deleted_nodes
65
77
  end
66
78
 
67
79
 
68
80
  def sync_servers
69
- nodes = merged_nodes
81
+ nodes, deleted = updated_and_deleted_nodes
70
82
  failures = Set.new
71
83
 
72
- nodes.peach(8) do |n|
84
+ nodes.shuffle.peach(8) do |n|
73
85
  n.reload
74
86
 
75
87
  ridleys.peach(4) do |ridley|
@@ -84,18 +96,40 @@ private
84
96
  rescue puts('WARNING: Client sync failed for node "%s"' % n.name)
85
97
  end
86
98
 
87
- puts 'Synced node "%s"' % n.name
99
+ if failures.include? n.name
100
+ puts 'ERROR: Node sync failed for node "%s"' % n.name
101
+ else
102
+ puts 'Synced node "%s"' % n.name
103
+ end
88
104
  end unless @ridleys.length == 1
89
105
 
106
+ successes = []
107
+ nodes.each do |n|
108
+ next if failures.include? n.name
109
+ @cached_nodes[n.name] = n.automatic.ohai_time.to_f
110
+ successes << n
111
+ end
112
+
113
+ deleted.each do |n|
114
+ puts 'Deleting node "%s"' % n
115
+ ridleys.peach(4) do |ridley|
116
+ ridley.node.delete n rescue \
117
+ puts('WARNING: Could not delete node "%s"' % n)
118
+ end
119
+ end
120
+
90
121
  puts 'Sync completed'
91
122
  return {
123
+ deleted: deleted,
92
124
  failures: failures,
125
+ successes: successes,
93
126
  num_successes: nodes.length - failures.length,
94
127
  num_failures: failures.length,
128
+ num_deletions: deleted.length,
95
129
  num_nodes: nodes.length
96
130
  }
97
- rescue
98
- return nil
131
+ # rescue
132
+ # return nil
99
133
  end
100
134
 
101
135
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kitchen_hooks
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.4
4
+ version: 1.7.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sean Clemmer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-17 00:00:00.000000000 Z
11
+ date: 2015-02-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hipchat