ruby-clock 0.5.0 → 0.6.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.
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