poise-profiler 1.0.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.
@@ -0,0 +1,99 @@
1
+ #
2
+ # Copyright 2016, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ begin
18
+ require 'chef/chef_class'
19
+ rescue LoadError
20
+ # ¯\_(ツ)_/¯ Chef < 12.3.
21
+ end
22
+ require 'chef/event_dispatch/base'
23
+ require 'chef/json_compat'
24
+
25
+
26
+ module PoiseProfiler
27
+ class Handler < Chef::EventDispatch::Base
28
+ include Singleton
29
+
30
+ # Used in {#monkey_patch_old_chef}
31
+ # @api private
32
+ attr_writer :events, :monkey_patched
33
+
34
+ def resource_completed(resource)
35
+ key = resource.resource_name.to_s.end_with?('_test') ? :test_resources : :resources
36
+ timers[key]["#{resource.resource_name}[#{resource.name}]"] += resource.elapsed_time
37
+ timers[:classes][resource.class.name] += resource.elapsed_time
38
+ end
39
+
40
+ def run_completed(_node)
41
+ Chef::Log.debug('Processing poise-profiler data')
42
+ puts('Poise Profiler:')
43
+ puts_timer(:resources, 'Resource')
44
+ puts_timer(:test_resources, 'Test Resource') unless timers[:test_resources].empty?
45
+ puts_timer(:classes, 'Class')
46
+ puts("Profiler JSON: #{Chef::JSONCompat.to_json(timers)}")
47
+ puts('')
48
+ end
49
+
50
+ def run_failed(_run_error)
51
+ run_completed(nil)
52
+ end
53
+
54
+ def reset!
55
+ timers.clear
56
+ @events = nil
57
+ end
58
+
59
+ # Inject this instance for Chef < 12.3. Don't call this on newer Chef.
60
+ def monkey_patch_old_chef!
61
+ return if @monkey_patched
62
+ require 'chef/event_dispatch/dispatcher'
63
+ instance = self
64
+ orig_method = Chef::EventDispatch::Dispatcher.instance_method(:library_file_loaded)
65
+ Chef::EventDispatch::Dispatcher.send(:define_method, :library_file_loaded) do |filename|
66
+ instance.events = self
67
+ instance.monkey_patched = false
68
+ @subscribers << instance
69
+ Chef::EventDispatch::Dispatcher.send(:define_method, :library_file_loaded, orig_method)
70
+ orig_method.bind(self).call(filename)
71
+ end
72
+ @monkey_patched = true
73
+ end
74
+
75
+ private
76
+
77
+ def timers
78
+ @timers ||= Hash.new {|hash, key| hash[key] = Hash.new(0) }
79
+ end
80
+
81
+ def puts_timer(key, label)
82
+ puts "Time #{label}"
83
+ puts "------------ -------------"
84
+ timers[key].sort_by{ |k,v| -v }.each do |val, run_time|
85
+ puts "%12f %s" % [run_time, val]
86
+ end
87
+ puts ""
88
+ end
89
+
90
+ def puts(line)
91
+ events.stream_output(:profiler, line+"\n")
92
+ end
93
+
94
+ def events
95
+ @events ||= Chef.run_context.events
96
+ end
97
+
98
+ end
99
+ end
@@ -0,0 +1,20 @@
1
+ #
2
+ # Copyright 2016, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+
18
+ module PoiseProfiler
19
+ VERSION = '1.0.0'
20
+ end
@@ -0,0 +1,41 @@
1
+ #
2
+ # Copyright 2015, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ lib = File.expand_path('../lib', __FILE__)
18
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
19
+ require 'poise_profiler/version'
20
+
21
+ Gem::Specification.new do |spec|
22
+ spec.name = 'poise-profiler'
23
+ spec.version = PoiseProfiler::VERSION
24
+ spec.authors = ['Noah Kantrowitz']
25
+ spec.email = %w{noah@coderanger.net}
26
+ spec.description = 'A Chef cookbook for profiling performance in CI.'
27
+ spec.summary = spec.description
28
+ spec.homepage = 'https://github.com/poise/poise-profiler'
29
+ spec.license = 'Apache 2.0'
30
+
31
+ spec.files = `git ls-files`.split($/)
32
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
33
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
34
+ spec.require_paths = %w{lib}
35
+
36
+ spec.add_dependency 'halite', '~> 1.0'
37
+
38
+ spec.add_development_dependency 'mixlib-shellout', '~> 2.0'
39
+ spec.add_development_dependency 'poise', '~> 2.0'
40
+ spec.add_development_dependency 'poise-boiler', '~> 1.0'
41
+ end
@@ -0,0 +1,18 @@
1
+ #
2
+ # Copyright 2016, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ name 'poise-profiler_test'
18
+ depends 'poise-profiler'
@@ -0,0 +1,26 @@
1
+ #
2
+ # Copyright 2016, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ # Some test resources to make sure the handler works.
18
+ ruby_block 'test' do
19
+ block { sleep(1) }
20
+ end
21
+
22
+ file '/test' do
23
+ content 'test'
24
+ end
25
+
26
+ execute 'sleep 1'
@@ -0,0 +1,29 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIFCzCCAvOgAwIBAgIJAJTJgn9tSdKmMA0GCSqGSIb3DQEBBQUAMA0xCzAJBgNV
3
+ BAMTAkNBMB4XDTE1MDExMjIwMjk0M1oXDTI1MDEwOTIwMjk0M1owDTELMAkGA1UE
4
+ AxMCQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDDPFn79sz1kQLk
5
+ rAS5z/zfCMXuE+V9IEmGXJeSprsXrv+AdjFpVDr52lpvZ36i2gixk8grcWtFqQMC
6
+ jB1c2HUe69ebC89rHSPmGCx5eRcWQPQG29fdH/nC+I34EbYadJB7PdzkvTj0KuN8
7
+ YfQj6lhwqltYiELZhuGoXcuhwZ5SC4VcJ2cdvx7oQPECLlMft8dhWyk15WGhp0jL
8
+ 2H5noGajz9IFzHieoKJyh+oYA3BYCugpNBLTweNw+NuRxMwHixftvkXvlqKeZ402
9
+ 4iwmIO8MG9oUxXs6D85gv6tJOau+dD1EDYH9VzYwSvLto3QBzJX0NiHKlmeq4BG2
10
+ 1V3n+N1kZmMDgEtX2TDFsGHlUo77Gw0ob/w7qJU+7GAXRwWw7TPhMBLSkOlGM726
11
+ Lq9p5+7mK1YThk0PmlsSAU6/fT79PSdrYpTKr3WkBTnwd76df+Koh8fpN4BHf9L4
12
+ 9bWSYc9Nb9/wp0md9xhzjjVHargpVxZmNH7bcIa8YA9tYaW+oifo2hfb7o0qhGQ1
13
+ 8pES3LPUi/qtZkBYUQdh8/mkqTvRjeS446iUmYWcrHyiIzQk/cMbrAVYOi3Xnq0J
14
+ ui/r48iv7uLhpcDEQl2mENr0syygrPthVKa4gYHAZ0tK3pfe0yUGMiwS2D23xMR4
15
+ WYLWLwYSK0j1JYpEbsBNS3wZX91FIwIDAQABo24wbDAdBgNVHQ4EFgQU1j2CHhNt
16
+ sWAvDmu49yRFfHRBp9kwPQYDVR0jBDYwNIAU1j2CHhNtsWAvDmu49yRFfHRBp9mh
17
+ EaQPMA0xCzAJBgNVBAMTAkNBggkAlMmCf21J0qYwDAYDVR0TBAUwAwEB/zANBgkq
18
+ hkiG9w0BAQUFAAOCAgEAD7apefon65k3Xey7vsTb/A18m7JwBNLB48ILNcSKVgO1
19
+ iuSMCGNQ+4bNU4o9cTpRoijB3w4RY7IIaDlRcUg8FIO6kgEhjhiAjSSqJAaajOFc
20
+ urxOmi9E7xYmTDqLxEGF5/5vaG4olAi3tRgZNd2+Ue0ANZ1KMh3ZkE0nA5v1zb/g
21
+ Ax/Zs6tATdoG6umMQg8TjiKucwi9J9he+xJ5y0E77/RrdNL9aKcU47wTAwUkokpb
22
+ u1JFo1da3yZLDwQuBN5DCc4pgPgxXlfa6DnzQM1veKIhP5sa9T4sCC8S4IjGFenw
23
+ yl4xm+9AOZQeLFpczqgVJhun5P41syepnZ433hWoLXKLHd1n0ILgw9JyVF686LIt
24
+ bSar3+krmFuzdRCfet0kJR762p8jmxJOwL+KQGELGlkleJK48a+ruWIeeulZhpJ5
25
+ tF4QJxytq4aXpjeFma0Yi/0rQuNi3H1QIW5YPnFL0XlJ8Rvr8gSVc1zhkM9rsnxX
26
+ l9Pun0flP/mf/ulOa020hQUPqEYjSfdJOkLy2gZDvHRL2LRXNjGHoteGNJCq34Q1
27
+ wQerxofHn+Hpp61+Ebj+RLK0KJE+QeP3T8rL30aSSzQZQZJVI0ict5C71kiTbQnw
28
+ Z0vE6LquvFfMSqfPLt6uuCRVywBjLx19B7TuMf/DgAD+lR+1FFGKy1hO2Q1jfCY=
29
+ -----END CERTIFICATE-----
@@ -0,0 +1,83 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIFBzCCAu+gAwIBAgIBKDANBgkqhkiG9w0BAQUFADANMQswCQYDVQQDEwJDQTAe
3
+ Fw0xNjAxMjYwNzMxNDNaFw0yNjAxMjMwNzMxNDNaMGgxKTAnBgNVBAMTIERvY2tl
4
+ ciBjbGllbnQgZm9yIHBvaXNlLXByb2ZpbGVyMRcwFQYDVQQLEw5raXRjaGVuLWRv
5
+ Y2tlcjEiMCAGA1UEChMZQ29kZXJhbmdlciBDb25zdWx0aW5nIExMQzCCAiIwDQYJ
6
+ KoZIhvcNAQEBBQADggIPADCCAgoCggIBAKm+qCToizXT0XlWv9mFNTys39r5/OpJ
7
+ NcTFrvAi70McCa3VZabWeW3wBB5Q1FQsuF59j4/flzHVohEMd/VIW24qFa1Sy9SW
8
+ 08Nd8zHrKKZCHSCXujeiQWFuwAhJJOlL+/JWIZwDPMBrhJugGpLcOR+YksyU5SL3
9
+ X/i/Yzl6gxlK06aHQwFQpi5lhntqSdS2c7R5zdBfONaidN4WkxgPIkGPPIerM4r4
10
+ uRtN9S2BMUisiNEBN/0NqKJYFfWM2Yw4dYkigUc2YhmK5U6bKyXWMSqYAeNN75OI
11
+ NMpILZFfUU9YGpGl4NJPqT/5XgOixotatH3mA/UUs0oy7j6nm+S6CO2hoF0yCmaJ
12
+ NxyoMWzzxTukP9+olDks6ID9xbiC9QTMRC1qKZyeQccCBh4rv8jKB8ojmsnR3XUY
13
+ qvXaTNqUIXBHS+yarVhXSusYeeGLsqAHYRd+qZ1iQ/9W07KfzhJrhNvePrNFHTYO
14
+ 4WTHPqygkJb7U2c3KXaH4q12ajArNN2HHGkZ1EFBCSTDYG1yxdTBQu7TDxN/BBqG
15
+ WOtvTbO+z8RzQZWUg6JlR7Ajzfjsz52SbFRRGrKj3lliZK1EJWyPlgK6eWt/y0vT
16
+ wDglM1wNfaAuP22BS0gqBrMoehUQxVMHnzceZ0He8KIgwXmRrKEagi7a14n43K4j
17
+ sbffEyp3Jm4TAgMBAAGjFzAVMBMGA1UdJQQMMAoGCCsGAQUFBwMCMA0GCSqGSIb3
18
+ DQEBBQUAA4ICAQC5yKW1krPGzshIfa5qV9aW9v2+lcoKVkPklxaFhLB2ZmZYCxtQ
19
+ OoLMF2kUo+J9+gF0dxH4LCW9zkEE/tOJwIAjaq+dvtVekLOa7ihAOlfJn05RLl6T
20
+ 10I3aHrMsrHn4SCie46UPWnBZeF3IJB3wYWCY2CaqupSB6nZDGQnGoOBSaJjTucu
21
+ hu9X2hb/xZtKbUkEk84Fz1qtuobwo0Yb93Ae3KO3MTg595UK65XHl2PtGl6zDQJz
22
+ PSDhv3FVe8Rg/ji4PC+Y8/VollCO/vLCkZQRh7Lr03NJlB1DZaO3D0wUh3pA7zXe
23
+ Q56rY50SNzFHPSjJW3zIbTyCMWylj6FzjEo73c32nClkmygZMSuR4nB4Izd5B1BG
24
+ SOF7cooH3xaxth6FIE2DdHP8DJ0Akh+X4oxxT+jBCfln3p71y8fg/1m2UwhJ+6jb
25
+ Oy9pWiWXgC9ysqA1luAXsGpmg7d/v84cr9ZCL2ONjW9lICFTMMQVQVWeoAVWu4mW
26
+ RQg3o6M11MEm/hWMir+ltLttnGTi9TNqh1X2FR4ylDtUzL99+ocbo0eTQkdf+QDB
27
+ EwNXyEu1lGl+1O50ArGv72K66tgWQRrzajt2CA/GRCQYF6BzhqofP80jFjgkIww9
28
+ 2BzDfScQ3WtUeM2O8+G9U05/U7Qxcqe6BXGT5l+IL0y5YPO+4zjY8LW6Ww==
29
+ -----END CERTIFICATE-----
30
+ -----BEGIN RSA PRIVATE KEY-----
31
+ Proc-Type: 4,ENCRYPTED
32
+ DEK-Info: AES-256-CBC,56EC47D2C61F830325B417F611200F4E
33
+
34
+ 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
83
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,19 @@
1
+ #
2
+ # Copyright 2016, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ eval_gemfile File.expand_path('../../../Gemfile', __FILE__)
18
+
19
+ gem 'chef', '~> 12.0.3'
@@ -0,0 +1,19 @@
1
+ #
2
+ # Copyright 2016, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ eval_gemfile File.expand_path('../../../Gemfile', __FILE__)
18
+
19
+ gem 'chef', '~> 12.1.2'
@@ -0,0 +1,19 @@
1
+ #
2
+ # Copyright 2016, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ eval_gemfile File.expand_path('../../../Gemfile', __FILE__)
18
+
19
+ gem 'chef', '~> 12.2.1'
@@ -0,0 +1,19 @@
1
+ #
2
+ # Copyright 2016, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ eval_gemfile File.expand_path('../../../Gemfile', __FILE__)
18
+
19
+ gem 'chef', '~> 12.3.0'
@@ -0,0 +1,19 @@
1
+ #
2
+ # Copyright 2016, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ eval_gemfile File.expand_path('../../../Gemfile', __FILE__)
18
+
19
+ gem 'chef', '~> 12.4.3'
@@ -0,0 +1,19 @@
1
+ #
2
+ # Copyright 2016, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ eval_gemfile File.expand_path('../../../Gemfile', __FILE__)
18
+
19
+ gem 'chef', '~> 12.5.1'