rocketjob 1.3.0 → 2.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +201 -0
  3. data/README.md +15 -10
  4. data/bin/rocketjob +3 -1
  5. data/bin/rocketjob_perf +92 -0
  6. data/lib/rocket_job/cli.rb +71 -31
  7. data/lib/rocket_job/config.rb +21 -23
  8. data/lib/rocket_job/dirmon_entry.rb +63 -45
  9. data/lib/rocket_job/extensions/aasm.rb +56 -0
  10. data/lib/rocket_job/extensions/mongo.rb +23 -0
  11. data/lib/rocket_job/job.rb +9 -433
  12. data/lib/rocket_job/jobs/dirmon_job.rb +20 -20
  13. data/lib/rocket_job/jobs/simple_job.rb +12 -0
  14. data/lib/rocket_job/plugins/document.rb +69 -0
  15. data/lib/rocket_job/plugins/job/callbacks.rb +92 -0
  16. data/lib/rocket_job/plugins/job/defaults.rb +40 -0
  17. data/lib/rocket_job/plugins/job/logger.rb +36 -0
  18. data/lib/rocket_job/plugins/job/model.rb +288 -0
  19. data/lib/rocket_job/plugins/job/persistence.rb +167 -0
  20. data/lib/rocket_job/plugins/job/state_machine.rb +166 -0
  21. data/lib/rocket_job/plugins/job/worker.rb +167 -0
  22. data/lib/rocket_job/plugins/restart.rb +54 -0
  23. data/lib/rocket_job/plugins/singleton.rb +26 -0
  24. data/lib/rocket_job/plugins/state_machine.rb +105 -0
  25. data/lib/rocket_job/version.rb +1 -1
  26. data/lib/rocket_job/worker.rb +150 -119
  27. data/lib/rocketjob.rb +43 -21
  28. data/test/config_test.rb +12 -0
  29. data/test/dirmon_entry_test.rb +81 -85
  30. data/test/dirmon_job_test.rb +40 -28
  31. data/test/job_test.rb +14 -257
  32. data/test/plugins/job/callbacks_test.rb +163 -0
  33. data/test/plugins/job/defaults_test.rb +52 -0
  34. data/test/plugins/job/logger_test.rb +58 -0
  35. data/test/plugins/job/model_test.rb +97 -0
  36. data/test/plugins/job/persistence_test.rb +81 -0
  37. data/test/plugins/job/state_machine_test.rb +118 -0
  38. data/test/plugins/job/worker_test.rb +183 -0
  39. data/test/plugins/restart_test.rb +185 -0
  40. data/test/plugins/singleton_test.rb +94 -0
  41. data/test/plugins/state_machine_event_callbacks_test.rb +101 -0
  42. data/test/plugins/state_machine_test.rb +64 -0
  43. data/test/test_helper.rb +3 -36
  44. metadata +64 -19
  45. data/lib/rocket_job/concerns/singleton.rb +0 -33
  46. data/lib/rocket_job/concerns/worker.rb +0 -214
  47. data/test/files/_archive/archived.txt +0 -3
  48. data/test/job_worker_test.rb +0 -86
  49. data/test/jobs/test_job.rb +0 -46
  50. data/test/worker_test.rb +0 -97
@@ -0,0 +1,101 @@
1
+ require_relative '../test_helper'
2
+
3
+ module Plugins
4
+ # Unit Test for RocketJob::Job
5
+ class StateMachineEventCallbacksTest < Minitest::Test
6
+ # This job adds each event callback as they run into an array
7
+ # [:start, :complete, :fail, :retry, :pause, :resume, :abort, :requeue]
8
+ class PositivePathJob < RocketJob::Job
9
+ before_complete do
10
+ arguments.first << 'before_complete_block'
11
+ end
12
+
13
+ after_complete do
14
+ arguments.first << 'after_complete_block'
15
+ end
16
+
17
+ before_complete :before_complete_method
18
+
19
+ before_start do
20
+ arguments.first << 'before_start_block'
21
+ end
22
+
23
+ before_start :before_start_method
24
+
25
+ before_start do
26
+ arguments.first << 'before_start2_block'
27
+ end
28
+
29
+ after_start :after_start_method
30
+ after_complete :after_complete_method
31
+
32
+ before_complete do
33
+ arguments.first << 'before_complete2_block'
34
+ end
35
+
36
+ after_start do
37
+ arguments.first << 'after_start_block'
38
+ end
39
+
40
+ after_complete do
41
+ arguments.first << 'after_complete2_block'
42
+ end
43
+
44
+ after_start :after_start_method
45
+
46
+ after_start do
47
+ arguments.first << 'after_start2_block'
48
+ end
49
+
50
+ before_start :before_start_method2
51
+ before_complete :before_complete_method2
52
+
53
+ def perform(list)
54
+ list << 'perform'
55
+ end
56
+
57
+ private
58
+
59
+ def before_start_method
60
+ arguments.first << 'before_start_method'
61
+ end
62
+
63
+ def before_start_method2
64
+ arguments.first << 'before_start_method2'
65
+ end
66
+
67
+ def after_start_method
68
+ arguments.first << 'after_start_method'
69
+ end
70
+
71
+ def before_complete_method
72
+ arguments.first << 'before_complete_method'
73
+ end
74
+
75
+ def before_complete_method2
76
+ arguments.first << 'before_complete_method2'
77
+ end
78
+
79
+ def after_complete_method
80
+ arguments.first << 'after_complete_method'
81
+ end
82
+ end
83
+
84
+ describe RocketJob::Plugins::StateMachine do
85
+ after do
86
+ @job.destroy if @job && !@job.new_record?
87
+ end
88
+
89
+ describe 'before_start after_start & before_complete after_complete' do
90
+ it 'runs blocks and functions' do
91
+ @job = PositivePathJob.new(arguments: [[]])
92
+ @job.perform_now
93
+ assert @job.completed?, @job.attributes.ai
94
+ expected = %w(before_start_block before_start_method before_start2_block before_start_method2 after_start2_block after_start_method after_start_block perform before_complete_block before_complete_method before_complete2_block before_complete_method2 after_complete2_block after_complete_method after_complete_block)
95
+ assert_equal expected, @job.arguments.first, 'Sequence of before_perform callbacks is incorrect'
96
+ end
97
+ end
98
+
99
+ end
100
+ end
101
+ end
@@ -0,0 +1,64 @@
1
+ require_relative '../test_helper'
2
+
3
+ module Plugins
4
+ # Unit Test for RocketJob::Job
5
+ class StateMachineTest < Minitest::Test
6
+
7
+ class Test
8
+ include RocketJob::Plugins::Document
9
+ include RocketJob::Plugins::StateMachine
10
+
11
+ key :name
12
+ key :state
13
+ validates_presence_of :name, :state
14
+
15
+ aasm column: :state do
16
+ state :pending, initial: true
17
+ state :enabled
18
+
19
+ event :enable do
20
+ transitions from: :pending, to: :enabled
21
+ end
22
+ end
23
+ end
24
+
25
+ describe RocketJob::Plugins::StateMachine do
26
+ before do
27
+ @doc = Test.new
28
+ end
29
+
30
+ after do
31
+ @doc.destroy if @doc && !@doc.new_record?
32
+ end
33
+
34
+ describe '#aasm_write_state' do
35
+ it 'raises an exception when a validation fails on create!' do
36
+ assert_raises MongoMapper::DocumentNotValid do
37
+ @doc = Test.create!
38
+ end
39
+ end
40
+
41
+ it 'raises an exception when a validation fails on save' do
42
+ assert_raises MongoMapper::DocumentNotValid do
43
+ @doc.save!
44
+ end
45
+ end
46
+
47
+ it 'raises an exception when a validation fails on state transition with save' do
48
+ assert_raises MongoMapper::DocumentNotValid do
49
+ @doc.enable!
50
+ end
51
+ assert @doc.pending?
52
+ refute @doc.valid?
53
+ end
54
+
55
+ it 'does not raise an exception when a validation fails on state transition without save' do
56
+ @doc.enable
57
+ assert @doc.enabled?
58
+ end
59
+
60
+ end
61
+
62
+ end
63
+ end
64
+ end
data/test/test_helper.rb CHANGED
@@ -4,45 +4,12 @@ require 'yaml'
4
4
  require 'minitest/autorun'
5
5
  require 'minitest/reporters'
6
6
  require 'minitest/stub_any_instance'
7
- require 'rocketjob'
8
7
  require 'awesome_print'
9
- require 'symmetric-encryption'
8
+ require 'rocketjob'
10
9
 
11
- if ENV['DETAILED_TESTS'].present?
12
- # See every test and how long it took
13
- MiniTest::Reporters.use! MiniTest::Reporters::SpecReporter.new
14
- else
15
- # Only show failed tests
16
- MiniTest::Reporters.use! MiniTest::Reporters::ProgressReporter.new
17
- end
10
+ MiniTest::Reporters.use! MiniTest::Reporters::SpecReporter.new
18
11
 
19
12
  SemanticLogger.add_appender('test.log', &SemanticLogger::Appender::Base.colorized_formatter)
20
13
  SemanticLogger.default_level = :debug
21
14
 
22
- # Setup MongoMapper from mongo config file
23
- config_file = File.join(File.dirname(__FILE__), 'config', 'mongo.yml')
24
- config = YAML.load(ERB.new(File.read(config_file)).result)
25
- if config
26
- cfg = config['test']
27
- options = cfg['options'] || {}
28
- options[:logger] = SemanticLogger::DebugAsTraceLogger.new('Mongo')
29
-
30
- MongoMapper.config = cfg
31
- MongoMapper.connection = Mongo::MongoClient.from_uri(cfg['uri'], options)
32
- MongoMapper.database = MongoMapper.connection.db.name
33
-
34
- # If this environment has a separate Work server
35
- if (cfg = config['test_work'])
36
- options = cfg['options'] || {}
37
- options[:logger] = SemanticLogger::DebugAsTraceLogger.new('MongoWork')
38
- RocketJob::Config.mongo_work_connection = Mongo::MongoClient.from_uri(cfg['uri'], options)
39
- end
40
- end
41
-
42
- # Test cipher
43
- SymmetricEncryption.cipher = SymmetricEncryption::Cipher.new(
44
- cipher_name: 'aes-128-cbc',
45
- key: '1234567890ABCDEF1234567890ABCDEF',
46
- iv: '1234567890ABCDEF',
47
- encoding: :base64strict
48
- )
15
+ RocketJob::Config.load!('test', 'test/config/mongo.yml')
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rocketjob
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 2.0.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Reid Morrison
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-25 00:00:00.000000000 Z
11
+ date: 2016-01-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aasm
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 4.2.0
19
+ version: '4.3'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 4.2.0
26
+ version: '4.3'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: semantic_logger
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '2.13'
33
+ version: '2.21'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '2.13'
40
+ version: '2.21'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: mongo_ha
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -94,40 +94,77 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '3.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: concurrent-ruby
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '1.0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '1.0'
97
111
  description: Enterprise Batch Processing System focused on performance, scalability,
98
112
  reliability, and visibility of every job in the system.
99
113
  email:
100
114
  - reidmo@gmail.com
101
115
  executables:
102
116
  - rocketjob
117
+ - rocketjob_perf
103
118
  extensions: []
104
119
  extra_rdoc_files: []
105
120
  files:
121
+ - LICENSE.txt
106
122
  - README.md
107
123
  - Rakefile
108
124
  - bin/rocketjob
125
+ - bin/rocketjob_perf
109
126
  - lib/rocket_job/cli.rb
110
- - lib/rocket_job/concerns/singleton.rb
111
- - lib/rocket_job/concerns/worker.rb
112
127
  - lib/rocket_job/config.rb
113
128
  - lib/rocket_job/dirmon_entry.rb
129
+ - lib/rocket_job/extensions/aasm.rb
130
+ - lib/rocket_job/extensions/mongo.rb
114
131
  - lib/rocket_job/heartbeat.rb
115
132
  - lib/rocket_job/job.rb
116
133
  - lib/rocket_job/job_exception.rb
117
134
  - lib/rocket_job/jobs/dirmon_job.rb
135
+ - lib/rocket_job/jobs/simple_job.rb
136
+ - lib/rocket_job/plugins/document.rb
137
+ - lib/rocket_job/plugins/job/callbacks.rb
138
+ - lib/rocket_job/plugins/job/defaults.rb
139
+ - lib/rocket_job/plugins/job/logger.rb
140
+ - lib/rocket_job/plugins/job/model.rb
141
+ - lib/rocket_job/plugins/job/persistence.rb
142
+ - lib/rocket_job/plugins/job/state_machine.rb
143
+ - lib/rocket_job/plugins/job/worker.rb
144
+ - lib/rocket_job/plugins/restart.rb
145
+ - lib/rocket_job/plugins/singleton.rb
146
+ - lib/rocket_job/plugins/state_machine.rb
118
147
  - lib/rocket_job/version.rb
119
148
  - lib/rocket_job/worker.rb
120
149
  - lib/rocketjob.rb
121
150
  - test/config/mongo.yml
151
+ - test/config_test.rb
122
152
  - test/dirmon_entry_test.rb
123
153
  - test/dirmon_job_test.rb
124
- - test/files/_archive/archived.txt
125
154
  - test/files/text.txt
126
155
  - test/job_test.rb
127
- - test/job_worker_test.rb
128
- - test/jobs/test_job.rb
156
+ - test/plugins/job/callbacks_test.rb
157
+ - test/plugins/job/defaults_test.rb
158
+ - test/plugins/job/logger_test.rb
159
+ - test/plugins/job/model_test.rb
160
+ - test/plugins/job/persistence_test.rb
161
+ - test/plugins/job/state_machine_test.rb
162
+ - test/plugins/job/worker_test.rb
163
+ - test/plugins/restart_test.rb
164
+ - test/plugins/singleton_test.rb
165
+ - test/plugins/state_machine_event_callbacks_test.rb
166
+ - test/plugins/state_machine_test.rb
129
167
  - test/test_helper.rb
130
- - test/worker_test.rb
131
168
  homepage: http://rocketjob.io
132
169
  licenses:
133
170
  - GPL-3.0
@@ -143,23 +180,31 @@ required_ruby_version: !ruby/object:Gem::Requirement
143
180
  version: '0'
144
181
  required_rubygems_version: !ruby/object:Gem::Requirement
145
182
  requirements:
146
- - - ">="
183
+ - - ">"
147
184
  - !ruby/object:Gem::Version
148
- version: '0'
185
+ version: 1.3.1
149
186
  requirements: []
150
187
  rubyforge_project:
151
- rubygems_version: 2.4.5.1
188
+ rubygems_version: 2.4.8
152
189
  signing_key:
153
190
  specification_version: 4
154
191
  summary: Enterprise Batch Processing System for Ruby, JRuby, and Rubinius
155
192
  test_files:
156
193
  - test/config/mongo.yml
194
+ - test/config_test.rb
157
195
  - test/dirmon_entry_test.rb
158
196
  - test/dirmon_job_test.rb
159
- - test/files/_archive/archived.txt
160
197
  - test/files/text.txt
161
198
  - test/job_test.rb
162
- - test/job_worker_test.rb
163
- - test/jobs/test_job.rb
199
+ - test/plugins/job/callbacks_test.rb
200
+ - test/plugins/job/defaults_test.rb
201
+ - test/plugins/job/logger_test.rb
202
+ - test/plugins/job/model_test.rb
203
+ - test/plugins/job/persistence_test.rb
204
+ - test/plugins/job/state_machine_test.rb
205
+ - test/plugins/job/worker_test.rb
206
+ - test/plugins/restart_test.rb
207
+ - test/plugins/singleton_test.rb
208
+ - test/plugins/state_machine_event_callbacks_test.rb
209
+ - test/plugins/state_machine_test.rb
164
210
  - test/test_helper.rb
165
- - test/worker_test.rb
@@ -1,33 +0,0 @@
1
- # encoding: UTF-8
2
- require 'active_support/concern'
3
-
4
- # Worker behavior for a job
5
- module RocketJob
6
- module Concerns
7
- module Singleton
8
- extend ActiveSupport::Concern
9
-
10
- included do
11
- # Start the single instance of this job
12
- #
13
- # Returns true if the job was started
14
- # Returns false if the job is already running and doe not need to be started
15
- def self.start(*args, &block)
16
- # Prevent multiple Jobs of the same class from running at the same time
17
- return false if where(state: [:running, :queued]).count > 0
18
-
19
- perform_later(*args, &block)
20
- true
21
- end
22
-
23
- # TODO Make :perform_later, :perform_now, :perform, :now protected/private
24
- # class << self
25
- # # Ensure that only one instance of the job is running.
26
- # protected :perform_later, :perform_now, :perform, :now
27
- # end
28
- #self.send(:protected, :perform_later)
29
-
30
- end
31
- end
32
- end
33
- end
@@ -1,214 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- # Worker behavior for a job
4
- module RocketJob
5
- module Concerns
6
- module Worker
7
- def self.included(base)
8
- base.extend ClassMethods
9
- end
10
-
11
- module ClassMethods
12
- # Returns [Job] after queue-ing it for processing
13
- def later(method, *args, &block)
14
- if RocketJob::Config.inline_mode
15
- now(method, *args, &block)
16
- else
17
- job = build(method, *args, &block)
18
- job.save!
19
- job
20
- end
21
- end
22
-
23
- # Create a job and process it immediately in-line by this thread
24
- def now(method, *args, &block)
25
- build(method, *args, &block).work_now
26
- end
27
-
28
- # Build a Rocket Job instance
29
- #
30
- # Note:
31
- # - #save! must be called on the return job instance if it needs to be
32
- # queued for processing.
33
- # - If data is uploaded into the job instance before saving, and is then
34
- # discarded, call #cleanup! to clear out any partially uploaded data
35
- def build(method, *args, &block)
36
- job = new(arguments: args, perform_method: method.to_sym)
37
- block.call(job) if block
38
- job
39
- end
40
-
41
- # Method to be performed later
42
- def perform_later(*args, &block)
43
- later(:perform, *args, &block)
44
- end
45
-
46
- # Method to be performed later
47
- def perform_build(*args, &block)
48
- build(:perform, *args, &block)
49
- end
50
-
51
- # Method to be performed now
52
- def perform_now(*args, &block)
53
- now(:perform, *args, &block)
54
- end
55
-
56
- # Returns the next job to work on in priority based order
57
- # Returns nil if there are currently no queued jobs, or processing batch jobs
58
- # with records that require processing
59
- #
60
- # Parameters
61
- # worker_name [String]
62
- # Name of the worker that will be processing this job
63
- #
64
- # skip_job_ids [Array<BSON::ObjectId>]
65
- # Job ids to exclude when looking for the next job
66
- #
67
- # Note:
68
- # If a job is in queued state it will be started
69
- def next_job(worker_name, skip_job_ids = nil)
70
- query = {
71
- '$and' => [
72
- {
73
- '$or' => [
74
- {'state' => 'queued'}, # Jobs
75
- {'state' => 'running', 'sub_state' => :processing} # Slices
76
- ]
77
- },
78
- {
79
- '$or' => [
80
- {run_at: {'$exists' => false}},
81
- {run_at: {'$lte' => Time.now}}
82
- ]
83
- }
84
- ]
85
- }
86
- query['_id'] = {'$nin' => skip_job_ids} if skip_job_ids && skip_job_ids.size > 0
87
-
88
- while (doc = find_and_modify(
89
- query: query,
90
- sort: [['priority', 'asc'], ['created_at', 'asc']],
91
- update: {'$set' => {'worker_name' => worker_name, 'state' => 'running'}}
92
- ))
93
- job = load(doc)
94
- if job.running?
95
- return job
96
- else
97
- if job.expired?
98
- job.destroy
99
- logger.info "Destroyed expired job #{job.class.name}, id:#{job.id}"
100
- else
101
- # Also update in-memory state and run call-backs
102
- job.start
103
- job.set(started_at: job.started_at)
104
- return job
105
- end
106
- end
107
- end
108
- end
109
-
110
- end
111
-
112
- # Works on this job
113
- #
114
- # Returns [true|false] whether this job should be excluded from the next lookup
115
- #
116
- # If an exception is thrown the job is marked as failed and the exception
117
- # is set in the job itself.
118
- #
119
- # Thread-safe, can be called by multiple threads at the same time
120
- def work(worker)
121
- raise(ArgumentError, 'Job must be started before calling #work') unless running?
122
- begin
123
- # before_perform
124
- call_method(perform_method, arguments, event: :before, log_level: log_level)
125
- # Allow before perform to explicitly fail this job
126
- return unless running?
127
-
128
- # perform
129
- ret = call_method(perform_method, arguments, log_level: log_level)
130
- if self.collect_output?
131
- self.result = (ret.is_a?(Hash) || ret.is_a?(BSON::OrderedHash)) ? ret : {result: ret}
132
- end
133
-
134
- # Only run after perform if perform did not explicitly fail the job
135
- return unless running?
136
-
137
- # after_perform
138
- call_method(perform_method, arguments, event: :after, log_level: log_level)
139
-
140
- new_record? ? complete : complete!
141
- rescue StandardError => exc
142
- fail(worker.name, exc) if may_fail?
143
- logger.error("Exception running #{self.class.name}##{perform_method}", exc)
144
- save! unless new_record?
145
- raise exc if RocketJob::Config.inline_mode
146
- end
147
- false
148
- end
149
-
150
- # Validates and runs the work on this job now in the current thread
151
- # Returns this job once it has finished running
152
- def work_now
153
- # Call validations
154
- if respond_to?(:validate!)
155
- validate!
156
- elsif invalid?
157
- raise(MongoMapper::DocumentNotValid, "Validation failed: #{errors.messages.join(', ')}")
158
- end
159
- worker = RocketJob::Worker.new(name: 'inline')
160
- worker.started
161
- start if may_start?
162
- while running? && !work(worker)
163
- end
164
- self
165
- end
166
-
167
- protected
168
-
169
- # Calls a method on this job, if it is defined
170
- # Adds the event name to the method call if supplied
171
- #
172
- # Returns [Object] the result of calling the method
173
- #
174
- # Parameters
175
- # method [Symbol]
176
- # The method to call on this job
177
- #
178
- # arguments [Array]
179
- # Arguments to pass to the method call
180
- #
181
- # Options:
182
- # event: [Symbol]
183
- # Any one of: :before, :after
184
- # Default: None, just calls the method itself
185
- #
186
- # log_level: [Symbol]
187
- # Log level to apply to silence logging during the call
188
- # Default: nil ( no change )
189
- #
190
- def call_method(method, arguments, options = {})
191
- options = options.dup
192
- event = options.delete(:event)
193
- log_level = options.delete(:log_level)
194
- raise(ArgumentError, "Unknown #{self.class.name}#call_method options: #{options.inspect}") if options.size > 0
195
-
196
- the_method = event.nil? ? method : "#{event}_#{method}".to_sym
197
- if respond_to?(the_method)
198
- method_name = "#{self.class.name}##{the_method}"
199
- logger.info "Start #{method_name}"
200
- logger.benchmark_info(
201
- "Completed #{method_name}",
202
- metric: "rocketjob/#{self.class.name.underscore}/#{the_method}",
203
- log_exception: :full,
204
- on_exception_level: :error,
205
- silence: log_level
206
- ) do
207
- send(the_method, *arguments)
208
- end
209
- end
210
- end
211
-
212
- end
213
- end
214
- end
@@ -1,3 +0,0 @@
1
- Hello World
2
- Line2
3
- Line3