maestro_plugin 0.0.7 → 0.0.11

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.
data/.gitignore CHANGED
@@ -1,4 +1,5 @@
1
1
  *.rbc
2
+ .idea
2
3
  .bundle
3
4
  .config
4
5
  coverage
@@ -10,3 +11,4 @@ spec/reports
10
11
  test/tmp
11
12
  test/version_tmp
12
13
  tmp
14
+ Gemfile.lock
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ jruby-1.6.8
@@ -1,7 +1,21 @@
1
1
  require 'json'
2
2
 
3
- module Maestro
3
+ module MaestroDev
4
+ module Plugin
5
+ # General plugin problem. A plugin can raise errors of this type and have the 'message' portion of the error
6
+ # automatically logged, and have the plugin-response set to the same (message) and have the execution end
7
+ class PluginError < StandardError
8
+ end
4
9
 
10
+ # Configuration error detected - usually as a result of the validation method determining bad/invalid data.
11
+ # This is treated same as PluginError for now... but maybe one day it'll get wings and fly, so only raise
12
+ # this error if the plugin cannot execute the task owing to poor parameters.
13
+ class ConfigError < PluginError
14
+ end
15
+ end
16
+ end
17
+
18
+ module Maestro
5
19
 
6
20
  # Helper Class for Maestro Plugins written in Ruby. The lifecycle of the plugin
7
21
  # starts with a call to the main entry point perform called by the Maestro agent, all the
@@ -9,7 +23,6 @@ module Maestro
9
23
  # run_callbacks which can be customized by specifying an on_complete_handler_method, or on_complete_handler_block.
10
24
  #
11
25
  class MaestroWorker
12
-
13
26
  # Workitem constants
14
27
  CONTEXT_OUTPUTS_META = '__context_outputs__'
15
28
  OUTPUT_META = '__output__'
@@ -87,17 +100,29 @@ module Maestro
87
100
  def perform(action, workitem)
88
101
  @action, @workitem = action, workitem
89
102
  send(action)
103
+ write_output('') # Triggers any remaining buffered output to be sent
90
104
  run_callbacks
91
- rescue => e
105
+ rescue MaestroDev::Plugin::PluginError => e
106
+ # Ensure error is written to output file
107
+ write_output(e.message)
108
+ set_error(e.message)
109
+ rescue Exception => e
110
+ msg = "Unexpected error executing task: #{e.class} #{e}"
111
+ write_output(msg)
112
+ Maestro.log.warn("#{msg} " + e.backtrace.join("\n"))
113
+
114
+ # Let user-supplied exception handler do its thing
92
115
  handle_exception(e)
116
+ set_error(msg)
117
+ ensure
118
+ return @workitem
93
119
  end
94
120
 
121
+ # Fire supplied exception handlers if supplied, otherwise do nothing
95
122
  def handle_exception(e)
96
- raise e if self.class.exception_handler_method.nil? && self.class.exception_handler_block.nil?
97
-
98
123
  if self.class.exception_handler_method
99
124
  send(self.class.exception_handler_method, e)
100
- else
125
+ elsif self.class.exception_handler_block
101
126
  self.class.exception_handler_block.call(e, self)
102
127
  end
103
128
  end
@@ -1,5 +1,5 @@
1
1
  module Maestro
2
2
  module Plugin
3
- VERSION = '0.0.7'
3
+ VERSION = '0.0.11'
4
4
  end
5
5
  end
@@ -165,4 +165,48 @@ describe Maestro::MaestroWorker do
165
165
  end
166
166
 
167
167
  end
168
+
169
+ describe 'Errors' do
170
+ class ErrorTestWorker < Maestro::MaestroWorker
171
+ def configerror_test
172
+ raise MaestroDev::Plugin::ConfigError, 'Bad Config - what are you feeding me?'
173
+ end
174
+
175
+ def pluginerror_test
176
+ raise MaestroDev::Plugin::PluginError, 'PluginError - I had a problem'
177
+ end
178
+
179
+ def error_test
180
+ raise Exception, 'noooo'
181
+ end
182
+ end
183
+
184
+ before :each do
185
+ @worker = ErrorTestWorker.new
186
+ end
187
+
188
+ it 'should handle a ConfigError for bad config' do
189
+ workitem = {'fields' => {}}
190
+
191
+ @worker.perform(:configerror_test, workitem)
192
+ workitem['fields']['__error__'].should include('Bad Config')
193
+ workitem['__output__'].should include('Bad Config')
194
+ end
195
+
196
+ it 'should handle a PluginError' do
197
+ workitem = {'fields' => {}}
198
+
199
+ @worker.perform(:pluginerror_test, workitem)
200
+ workitem['fields']['__error__'].should include('PluginError - I had a problem')
201
+ workitem['__output__'].should include('PluginError - I had a problem')
202
+ end
203
+
204
+ it 'should handle an unexpected Error' do
205
+ workitem = {'fields' => {}}
206
+
207
+ @worker.perform(:error_test, workitem)
208
+ workitem['fields']['__error__'].should include('Unexpected error executing task: Exception noooo')
209
+ workitem['__output__'].should include('Unexpected error executing task: Exception noooo')
210
+ end
211
+ end
168
212
  end
metadata CHANGED
@@ -1,158 +1,144 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: maestro_plugin
3
- version: !ruby/object:Gem::Version
4
- version: 0.0.7
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.11
5
6
  platform: ruby
6
- authors:
7
- - Etienne Pelletier
8
- autorequire:
7
+ authors:
8
+ - Etienne Pelletier
9
+ autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2013-07-09 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: logging
15
- version_requirements: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - '='
18
- - !ruby/object:Gem::Version
19
- version: 1.8.0
20
- requirement: !ruby/object:Gem::Requirement
21
- requirements:
22
- - - '='
23
- - !ruby/object:Gem::Version
24
- version: 1.8.0
25
- prerelease: false
26
- type: :runtime
27
- - !ruby/object:Gem::Dependency
28
- name: rubyzip
29
- version_requirements: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - '='
32
- - !ruby/object:Gem::Version
33
- version: 0.9.8
34
- requirement: !ruby/object:Gem::Requirement
35
- requirements:
36
- - - '='
37
- - !ruby/object:Gem::Version
38
- version: 0.9.8
39
- prerelease: false
40
- type: :runtime
41
- - !ruby/object:Gem::Dependency
42
- name: json
43
- version_requirements: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - '>='
46
- - !ruby/object:Gem::Version
47
- version: 1.4.6
48
- requirement: !ruby/object:Gem::Requirement
49
- requirements:
50
- - - '>='
51
- - !ruby/object:Gem::Version
52
- version: 1.4.6
53
- prerelease: false
54
- type: :runtime
55
- - !ruby/object:Gem::Dependency
56
- name: bundler
57
- version_requirements: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ~>
60
- - !ruby/object:Gem::Version
61
- version: '1.3'
62
- requirement: !ruby/object:Gem::Requirement
63
- requirements:
64
- - - ~>
65
- - !ruby/object:Gem::Version
66
- version: '1.3'
67
- prerelease: false
68
- type: :development
69
- - !ruby/object:Gem::Dependency
70
- name: rake
71
- version_requirements: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - '>='
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- requirement: !ruby/object:Gem::Requirement
77
- requirements:
78
- - - '>='
79
- - !ruby/object:Gem::Version
80
- version: '0'
81
- prerelease: false
82
- type: :development
83
- - !ruby/object:Gem::Dependency
84
- name: jruby-openssl
85
- version_requirements: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - '>='
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- requirement: !ruby/object:Gem::Requirement
91
- requirements:
92
- - - '>='
93
- - !ruby/object:Gem::Version
94
- version: '0'
95
- prerelease: false
96
- type: :development
97
- - !ruby/object:Gem::Dependency
98
- name: rspec
99
- version_requirements: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ~>
102
- - !ruby/object:Gem::Version
103
- version: 2.13.0
104
- requirement: !ruby/object:Gem::Requirement
105
- requirements:
106
- - - ~>
107
- - !ruby/object:Gem::Version
108
- version: 2.13.0
109
- prerelease: false
110
- type: :development
12
+
13
+ date: 2013-07-26 00:00:00 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: logging
17
+ prerelease: false
18
+ requirement: &id001 !ruby/object:Gem::Requirement
19
+ none: false
20
+ requirements:
21
+ - - "="
22
+ - !ruby/object:Gem::Version
23
+ version: 1.8.0
24
+ type: :runtime
25
+ version_requirements: *id001
26
+ - !ruby/object:Gem::Dependency
27
+ name: rubyzip
28
+ prerelease: false
29
+ requirement: &id002 !ruby/object:Gem::Requirement
30
+ none: false
31
+ requirements:
32
+ - - "="
33
+ - !ruby/object:Gem::Version
34
+ version: 0.9.8
35
+ type: :runtime
36
+ version_requirements: *id002
37
+ - !ruby/object:Gem::Dependency
38
+ name: json
39
+ prerelease: false
40
+ requirement: &id003 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: 1.4.6
46
+ type: :runtime
47
+ version_requirements: *id003
48
+ - !ruby/object:Gem::Dependency
49
+ name: bundler
50
+ prerelease: false
51
+ requirement: &id004 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ~>
55
+ - !ruby/object:Gem::Version
56
+ version: "1.3"
57
+ type: :development
58
+ version_requirements: *id004
59
+ - !ruby/object:Gem::Dependency
60
+ name: rake
61
+ prerelease: false
62
+ requirement: &id005 !ruby/object:Gem::Requirement
63
+ none: false
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: "0"
68
+ type: :development
69
+ version_requirements: *id005
70
+ - !ruby/object:Gem::Dependency
71
+ name: jruby-openssl
72
+ prerelease: false
73
+ requirement: &id006 !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: "0"
79
+ type: :development
80
+ version_requirements: *id006
81
+ - !ruby/object:Gem::Dependency
82
+ name: rspec
83
+ prerelease: false
84
+ requirement: &id007 !ruby/object:Gem::Requirement
85
+ none: false
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: 2.13.0
90
+ type: :development
91
+ version_requirements: *id007
111
92
  description: A ruby library to help with the creation of Maestro plugins
112
- email:
113
- - epelletier@maestrodev.com
93
+ email:
94
+ - epelletier@maestrodev.com
114
95
  executables: []
96
+
115
97
  extensions: []
98
+
116
99
  extra_rdoc_files: []
117
- files:
118
- - .gitignore
119
- - .rvmrc
120
- - Gemfile
121
- - Gemfile.lock
122
- - LICENSE.txt
123
- - README.md
124
- - Rakefile
125
- - lib/maestro_plugin.rb
126
- - lib/maestro_plugin/logging.rb
127
- - lib/maestro_plugin/maestro_worker.rb
128
- - lib/maestro_plugin/version.rb
129
- - maestro_plugin.gemspec
130
- - spec/maestro_worker_spec.rb
131
- - spec/spec_helper.rb
100
+
101
+ files:
102
+ - .gitignore
103
+ - .ruby-version
104
+ - Gemfile
105
+ - LICENSE.txt
106
+ - README.md
107
+ - Rakefile
108
+ - lib/maestro_plugin.rb
109
+ - lib/maestro_plugin/logging.rb
110
+ - lib/maestro_plugin/maestro_worker.rb
111
+ - lib/maestro_plugin/version.rb
112
+ - maestro_plugin.gemspec
113
+ - spec/maestro_worker_spec.rb
114
+ - spec/spec_helper.rb
132
115
  homepage: https://github.com/maestrodev/maestro-ruby-plugin
133
- licenses:
134
- - Apache 2.0
135
- metadata: {}
136
- post_install_message:
116
+ licenses:
117
+ - Apache 2.0
118
+ post_install_message:
137
119
  rdoc_options: []
138
- require_paths:
139
- - lib
140
- required_ruby_version: !ruby/object:Gem::Requirement
141
- requirements:
142
- - - '>='
143
- - !ruby/object:Gem::Version
144
- version: '0'
145
- required_rubygems_version: !ruby/object:Gem::Requirement
146
- requirements:
147
- - - '>='
148
- - !ruby/object:Gem::Version
149
- version: '0'
120
+
121
+ require_paths:
122
+ - lib
123
+ required_ruby_version: !ruby/object:Gem::Requirement
124
+ none: false
125
+ requirements:
126
+ - - ">="
127
+ - !ruby/object:Gem::Version
128
+ version: "0"
129
+ required_rubygems_version: !ruby/object:Gem::Requirement
130
+ none: false
131
+ requirements:
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ version: "0"
150
135
  requirements: []
151
- rubyforge_project:
152
- rubygems_version: 2.0.3
153
- signing_key:
154
- specification_version: 4
136
+
137
+ rubyforge_project:
138
+ rubygems_version: 1.8.24
139
+ signing_key:
140
+ specification_version: 3
155
141
  summary: Maestro ruby plugin
156
- test_files:
157
- - spec/maestro_worker_spec.rb
158
- - spec/spec_helper.rb
142
+ test_files:
143
+ - spec/maestro_worker_spec.rb
144
+ - spec/spec_helper.rb
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 0c64c1f3c1a915362afd09ce40a43df33640cd5b
4
- data.tar.gz: 302738027d98269a9f9f63eefe215e8d535d663f
5
- SHA512:
6
- metadata.gz: 1536a2ff8c81e70b12865d6deca13095d9b3af6eca2e2c9828ad72b5db7c9c537b2adc6fa8fde4111490fd7fc06275c8a64d1c371fd709ce33fb77bcb0bf9f21
7
- data.tar.gz: 0c7685ec929c3e0fd798dc867f6bdb65a632881b49b4daf4e72dee45f4ad5e8f2e2b96105c7c703e91d5b148413106205852df90f4cab9cc72bd720e70e968c2
data/.rvmrc DELETED
@@ -1 +0,0 @@
1
- rvm use jruby-1.6.8
data/Gemfile.lock DELETED
@@ -1,43 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- maestro_plugin (0.0.6)
5
- json (>= 1.4.6)
6
- logging (= 1.8.0)
7
- rubyzip (= 0.9.8)
8
-
9
- GEM
10
- remote: https://rubygems.org/
11
- specs:
12
- bouncy-castle-java (1.5.0147)
13
- diff-lcs (1.2.1)
14
- jruby-openssl (0.8.7)
15
- bouncy-castle-java (>= 1.5.0147)
16
- json (1.8.0)
17
- json (1.8.0-java)
18
- little-plugger (1.1.3)
19
- logging (1.8.0)
20
- little-plugger (>= 1.1.3)
21
- multi_json (>= 1.3.6)
22
- multi_json (1.7.3)
23
- rake (10.0.4)
24
- rspec (2.13.0)
25
- rspec-core (~> 2.13.0)
26
- rspec-expectations (~> 2.13.0)
27
- rspec-mocks (~> 2.13.0)
28
- rspec-core (2.13.0)
29
- rspec-expectations (2.13.0)
30
- diff-lcs (>= 1.1.3, < 2.0)
31
- rspec-mocks (2.13.0)
32
- rubyzip (0.9.8)
33
-
34
- PLATFORMS
35
- java
36
- ruby
37
-
38
- DEPENDENCIES
39
- bundler (~> 1.3)
40
- jruby-openssl
41
- maestro_plugin!
42
- rake
43
- rspec (~> 2.13.0)