poise-profiler 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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'