schedulero 0.1.1
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 +7 -0
- data/.version +1 -0
- data/lib/schedulero.rb +112 -0
- metadata +73 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 68ae0fbd4f3eb868a50f64ca330706a1acf29a71d42aa2eb89d6232abbf36c60
|
4
|
+
data.tar.gz: 223117c9bec29af59fda35bb8d64b9286216192d153da5a598d4283b945e22a2
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 91dd146dd80f9d06f77395cb23f67925b671cec1f3df7eb1519bfaf6bcf45ac0865fb3013d289ee749b3485a5a1e724d5f693c970b6f03a62989b6e9af2d8ce6
|
7
|
+
data.tar.gz: 30762af755ba57d8d3c8b2362f743b9c283ebccba80514cfd77da1ecad69aad1511003039d61bb7c62081c4e94606e6130bceff75c556073dcd77cc461cfad62
|
data/.version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.1
|
data/lib/schedulero.rb
ADDED
@@ -0,0 +1,112 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
require 'json'
|
3
|
+
require 'logger'
|
4
|
+
require 'colorize'
|
5
|
+
require 'as-duration'
|
6
|
+
|
7
|
+
class Schedulero
|
8
|
+
def initialize state_file: nil, log_file: true
|
9
|
+
|
10
|
+
# log file
|
11
|
+
log_file = case log_file
|
12
|
+
when String
|
13
|
+
log_file
|
14
|
+
when true
|
15
|
+
'./log/schedulero.log'
|
16
|
+
when false
|
17
|
+
nil
|
18
|
+
end
|
19
|
+
|
20
|
+
@logger = Logger.new log_file
|
21
|
+
@logger.datetime_format = "%Y-%m-%d %H:%M:%S"
|
22
|
+
|
23
|
+
# state file
|
24
|
+
unless state_file
|
25
|
+
state_file = 'schedulero.json'
|
26
|
+
state_file = Dir.exists?('./tmp') ? "./tmp/#{state_file}" : state_file
|
27
|
+
end
|
28
|
+
|
29
|
+
@state_file = Pathname.new state_file
|
30
|
+
|
31
|
+
if @state_file.exist?
|
32
|
+
@state = JSON.load @state_file.read
|
33
|
+
else
|
34
|
+
@state = {}
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def run &block
|
39
|
+
@logger.info 'running...'
|
40
|
+
|
41
|
+
instance_exec &block
|
42
|
+
|
43
|
+
@state_file.write @state.to_json
|
44
|
+
end
|
45
|
+
|
46
|
+
def every name, seconds, &block
|
47
|
+
@state[name] ||= 0
|
48
|
+
|
49
|
+
now = Time.now.to_i
|
50
|
+
diff = (@state[name] + seconds.to_i) - now
|
51
|
+
|
52
|
+
if diff < 0
|
53
|
+
puts 'running "%s"' % name.green
|
54
|
+
|
55
|
+
@state[name] = now
|
56
|
+
|
57
|
+
begin
|
58
|
+
@logger.info 'Run: %s' % name
|
59
|
+
yield
|
60
|
+
rescue
|
61
|
+
log_errror name
|
62
|
+
end
|
63
|
+
else
|
64
|
+
puts 'skipping "%s" for %s' % [name, humanize_seconds(diff)]
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def at name, hours, &block
|
69
|
+
@state[name] ||= 0
|
70
|
+
|
71
|
+
hour_now = Time.now.hour
|
72
|
+
hours = [hours] unless hours.class == Array
|
73
|
+
|
74
|
+
if hours.include?(hour_now) && (Time.now.to_i - @state[name] > 3700)
|
75
|
+
puts 'running "%s"' % name.green
|
76
|
+
|
77
|
+
@state[name] = Time.now.to_i
|
78
|
+
|
79
|
+
begin
|
80
|
+
@logger.info 'Run: %s' % name
|
81
|
+
yield
|
82
|
+
rescue
|
83
|
+
log_errror name
|
84
|
+
end
|
85
|
+
else
|
86
|
+
puts 'skipping "%s" at %d, running in %s' % [name, hour_now, hours]
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def log_errror name
|
91
|
+
msg = '%s: %s (%s)' % [name, $!.message, $!.class]
|
92
|
+
puts msg.red
|
93
|
+
|
94
|
+
Dir.mkdir('./log') unless Dir.exist?('./log')
|
95
|
+
|
96
|
+
@logger.error(msg)
|
97
|
+
end
|
98
|
+
|
99
|
+
def humanize_seconds secs
|
100
|
+
return '-' unless secs
|
101
|
+
|
102
|
+
secs = secs.to_i
|
103
|
+
|
104
|
+
[[60, :sec], [60, :min], [24, :h], [356, :days], [1000, :years]].map{ |count, name|
|
105
|
+
if secs > 0
|
106
|
+
secs, n = secs.divmod(count)
|
107
|
+
"#{n.to_i} #{name}"
|
108
|
+
end
|
109
|
+
}.compact.reverse.slice(0,2).join(' ')
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
metadata
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: schedulero
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Dino Reic
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-03-08 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: as-duration
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: colorize
|
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'
|
41
|
+
description: Super simple scheduler that will run tasks every x seconds/minutes/hours
|
42
|
+
email: reic.dino@gmail.com
|
43
|
+
executables: []
|
44
|
+
extensions: []
|
45
|
+
extra_rdoc_files: []
|
46
|
+
files:
|
47
|
+
- "./.version"
|
48
|
+
- "./lib/schedulero.rb"
|
49
|
+
homepage: https://github.com/dux/schedulero
|
50
|
+
licenses:
|
51
|
+
- MIT
|
52
|
+
metadata: {}
|
53
|
+
post_install_message:
|
54
|
+
rdoc_options: []
|
55
|
+
require_paths:
|
56
|
+
- lib
|
57
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '0'
|
67
|
+
requirements: []
|
68
|
+
rubyforge_project:
|
69
|
+
rubygems_version: 2.7.5
|
70
|
+
signing_key:
|
71
|
+
specification_version: 4
|
72
|
+
summary: Simple scheduler
|
73
|
+
test_files: []
|