ruby-clock 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: aecbbec2f68af72734fdb4daed9bbe35b47b3b012a2074915241eac7f8b6c40a
4
- data.tar.gz: 3bef0b2f87eb30ca32e5cd142249ef7a4ef1c34deb2714dc76cb2ecab3754600
3
+ metadata.gz: e0fec8d8c66e1783260e73fad69f39572677871d722d1c62437c94741452340e
4
+ data.tar.gz: 03e5b84ef4cd5277da5623173ca70887dc3aac0296445e573459050341376b78
5
5
  SHA512:
6
- metadata.gz: 9cb10c6514f7e28394632e6fbd76b19e2666ede782cf344918aeea3eaa368e318b7ee3135b7c252208c8f0090657b629cd469eaa704b0b908ce34fa213735213
7
- data.tar.gz: 943997440dfb369138ad5084497dbdd76504d030d58c5508eced067930205171089518a752b42a3b7cf398dc5560a9ab8ecb70b0dc01f35188c3380853a23738
6
+ metadata.gz: 70134452766d69a5dbebc795cc31babb56ac14b6363aa6416379600fb6fa0546ccc9b131a17342b1376a101acc89ae746a1f9f19795274224a72e9291f9f6eba
7
+ data.tar.gz: 4aeb5e68d8108f40e10c11b4ea9fe4a3ad390ba4652afcc4e71cbc11c8c49b36be3f4c8b762f17eda1cffc488f1d5b803388bfb5f3e219962c289dd581549f81
data/Gemfile.lock CHANGED
@@ -1,21 +1,23 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ruby-clock (0.4.0)
5
- rufus-scheduler (~> 3.7)
4
+ ruby-clock (0.6.0)
5
+ method_source
6
+ rufus-scheduler (~> 3.8)
6
7
 
7
8
  GEM
8
9
  remote: https://rubygems.org/
9
10
  specs:
10
- concurrent-ruby (1.1.7)
11
+ concurrent-ruby (1.1.9)
11
12
  et-orbi (1.2.4)
12
13
  tzinfo
13
- fugit (1.4.1)
14
+ fugit (1.5.0)
14
15
  et-orbi (~> 1.1, >= 1.1.8)
15
16
  raabro (~> 1.4)
17
+ method_source (1.0.0)
16
18
  raabro (1.4.0)
17
19
  rake (12.3.3)
18
- rufus-scheduler (3.7.0)
20
+ rufus-scheduler (3.8.0)
19
21
  fugit (~> 1.1, >= 1.1.6)
20
22
  tzinfo (2.0.4)
21
23
  concurrent-ruby (~> 1.0)
data/README.md CHANGED
@@ -102,6 +102,63 @@ You can define before, after, and around callbacks which will run for all jobs.
102
102
  Read [the rufus-scheduler documentation](https://github.com/jmettraux/rufus-scheduler/#callbacks)
103
103
  to learn how to do this. Where the documentation references `s`, you should use `schedule`.
104
104
 
105
+ ### Job Identifier
106
+
107
+ ruby-clock adds the `identifier` method to `Rufus::Scheduler::Job`. This method will return the job's
108
+ [name](https://github.com/jmettraux/rufus-scheduler/#name--string) if one was given.
109
+ If a name is not given, the last non-comment code line in the job's block
110
+ will be used instead. If for some reason an error is encountered while calculating this, the next
111
+ fallback is the line number of the job in Clockfile.
112
+
113
+ Some examples of jobs and their identifiers:
114
+
115
+ ```ruby
116
+ schedule.every '1 second', name: 'my job' do |variable|
117
+ Foo.bar
118
+ end
119
+ # => my job
120
+
121
+ schedule.every '1 day', name: 'my job' do |variable|
122
+ daily_things = Foo.setup_daily
123
+ daily_things.process
124
+ # TODO: figure out best time of day
125
+ end
126
+ # => daily_things.process
127
+
128
+ # n.b. ruby-clock isn't yet smart enough to remove trailing comments
129
+ schedule.every '1 week', name: 'my job' do |variable|
130
+ weekly_things = Foo.setup_weekly
131
+ weekly_things.process # does this work???!1~
132
+ end
133
+ # => weekly_things.process # does this work???!1~
134
+ ```
135
+
136
+ This can be used for keeping track of job behavior in logs or a
137
+ stats tracker. For example:
138
+
139
+ ```ruby
140
+ def schedule.on_post_trigger(job, trigger_time)
141
+ duration = Time.now-trigger_time.to_t
142
+ StatsTracker.value('Clock: Job Execution Time', duration.round(2))
143
+ StatsTracker.value("Clock: Job #{job.identifier} Execution Time", duration.round(2))
144
+ StatsTracker.increment('Clock: Job Executions')
145
+ end
146
+
147
+ schedule.every '10 seconds', name: 'thread stats' do
148
+ thread_usage = Hash.new(0)
149
+ schedule.work_threads(:active).each do |t|
150
+ thread_usage[t[:rufus_scheduler_job].identifier] += 1
151
+ end
152
+ thread_usage.each do |job, count|
153
+ StatsTracker.value("Clock: Job #{job} Active Threads", count)
154
+ end
155
+
156
+ StatsTracker.value("Clock: Active Threads", schedule.work_threads(:active).size)
157
+ StatsTracker.value("Clock: Vacant Threads", schedule.work_threads(:vacant).size)
158
+ StatsTracker.value("Clock: DB Pool Size", ActiveRecord::Base.connection_pool.connections.size)
159
+ end
160
+ ```
161
+
105
162
  ### other rufus-scheduler Options
106
163
 
107
164
  All rufus-scheduler options are set to defaults. The `schedule` variable
data/exe/clock CHANGED
@@ -1,6 +1,20 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'ruby-clock'
4
+ require 'method_source'
5
+
6
+ class Rufus::Scheduler::Job
7
+ def identifier
8
+ @identifier ||= begin
9
+ name || handler.source.split("\n").reject(&:empty?).grep_v(/#.*/)[-2].strip
10
+ rescue
11
+ source_location.join('-')
12
+ rescue
13
+ 'error-calculating-job-identifier'
14
+ end
15
+ end
16
+ end
17
+
4
18
  include RubyClock
5
19
 
6
20
  listen_to_signals
@@ -1,3 +1,3 @@
1
1
  module RubyClock
2
- VERSION = "0.5.0"
2
+ VERSION = "0.6.0"
3
3
  end
data/ruby-clock.gemspec CHANGED
@@ -29,5 +29,6 @@ Gem::Specification.new do |spec|
29
29
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
30
30
  spec.require_paths = ["lib"]
31
31
 
32
- spec.add_dependency "rufus-scheduler", '~> 3.7'
32
+ spec.add_dependency "rufus-scheduler", '~> 3.8'
33
+ spec.add_dependency "method_source"
33
34
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-clock
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Bachir
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-01-04 00:00:00.000000000 Z
11
+ date: 2021-07-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rufus-scheduler
@@ -16,14 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '3.7'
19
+ version: '3.8'
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: '3.7'
26
+ version: '3.8'
27
+ - !ruby/object:Gem::Dependency
28
+ name: method_source
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  description:
28
42
  email:
29
43
  - j@jjb.cc
@@ -65,7 +79,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
65
79
  - !ruby/object:Gem::Version
66
80
  version: '0'
67
81
  requirements: []
68
- rubygems_version: 3.1.2
82
+ rubygems_version: 3.1.6
69
83
  signing_key:
70
84
  specification_version: 4
71
85
  summary: A "clock" process for invoking ruby code within a persistent runtime