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 +4 -4
- data/Gemfile.lock +7 -5
- data/README.md +57 -0
- data/exe/clock +14 -0
- data/lib/ruby-clock/version.rb +1 -1
- data/ruby-clock.gemspec +2 -1
- metadata +19 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e0fec8d8c66e1783260e73fad69f39572677871d722d1c62437c94741452340e
|
4
|
+
data.tar.gz: 03e5b84ef4cd5277da5623173ca70887dc3aac0296445e573459050341376b78
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
5
|
-
|
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.
|
11
|
+
concurrent-ruby (1.1.9)
|
11
12
|
et-orbi (1.2.4)
|
12
13
|
tzinfo
|
13
|
-
fugit (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.
|
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
|
data/lib/ruby-clock/version.rb
CHANGED
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.
|
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.
|
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-
|
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.
|
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.
|
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.
|
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
|