dynarex_cron 0.2.5 → 0.3.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
- checksums.yaml.gz.sig +0 -0
- data/lib/dynarex_cron.rb +55 -82
- data.tar.gz.sig +0 -0
- metadata +3 -3
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 50ddabd424bdebc70f64092c80431839151e5ba5
|
4
|
+
data.tar.gz: 6cd42774d6718f4cf3528dcdd0be63347e212754
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ebb728bb6a28f3f38db4b7cdcf5932dea5d50c6c0e6f7ea8dac5454c18c3abf134863d078d41a6d4b9640d2e5734407faf1410e7114f89ecea3dd9281df24b53
|
7
|
+
data.tar.gz: 477bc7f6d63da17edca61dc6df30bfee7aac48daf32142923776dc804117805ca3a434f29ce8c2d67a9e2690c585ade8f4b5bf5516a20ef9440cb92c5a93c69f
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/lib/dynarex_cron.rb
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
require 'dynarex'
|
6
6
|
require 'chronic_cron'
|
7
|
-
require '
|
7
|
+
require 'websocket-eventmachine-client'
|
8
8
|
require 'rscript'
|
9
9
|
require 'chronic_duration'
|
10
10
|
require 'logger'
|
@@ -13,11 +13,12 @@ DF = "%Y-%m-%d %H:%M"
|
|
13
13
|
|
14
14
|
class DynarexCron
|
15
15
|
|
16
|
-
# options: e.g. sps_address
|
16
|
+
# options: e.g. sps_address: 'sps', sps_port: '59000'
|
17
17
|
#
|
18
18
|
def initialize(dynarex_file=nil, options={})
|
19
19
|
|
20
|
-
opt = {sps_address: nil,
|
20
|
+
opt = {sps_address: nil, sps_port='59000', drb_port: nil, log: nil}\
|
21
|
+
.merge options
|
21
22
|
@logger = Logger.new(opt[:log],'weekly') if opt[:log]
|
22
23
|
|
23
24
|
@cron_entries, @cron_events = [], []
|
@@ -26,35 +27,46 @@ class DynarexCron
|
|
26
27
|
load_entries() if @dynarex_file
|
27
28
|
load_events() if @include_url
|
28
29
|
|
29
|
-
@sps_address = opt[:sps_address]
|
30
|
-
|
31
|
-
if opt[:
|
32
|
-
|
30
|
+
@sps_address, @sps_port = opt[:sps_address], opt[:sps_port]
|
31
|
+
|
32
|
+
if opt[:drb_port] then
|
33
|
+
|
33
34
|
Thread.new {
|
34
35
|
|
35
36
|
# start up the DRb service
|
36
|
-
DRb.start_service 'druby://:' + opt[:
|
37
|
+
DRb.start_service 'druby://:' + opt[:drb_port], self
|
37
38
|
|
38
39
|
# wait for the DRb service to finish before exiting
|
39
40
|
DRb.thread.join
|
40
41
|
}
|
41
|
-
end
|
42
|
+
end
|
43
|
+
|
42
44
|
end
|
43
45
|
|
44
46
|
def start
|
47
|
+
|
45
48
|
@running = true
|
46
|
-
puts '[' + Time.now.strftime(DF) + '] DynarexCron started'
|
47
|
-
|
48
|
-
|
49
|
+
puts '[' + Time.now.strftime(DF) + '] DynarexCron started'
|
50
|
+
params = {uri: "ws://%s:%s" % [@sps_address, @sps_port]}
|
51
|
+
|
52
|
+
@ws = WebSocket::EventMachine::Client
|
53
|
+
|
54
|
+
EventMachine.run do
|
49
55
|
|
50
|
-
|
51
|
-
|
52
|
-
|
56
|
+
@ws.connect(params)
|
57
|
+
|
58
|
+
EM.add_periodic_timer(60) do
|
59
|
+
iterate @cron_entries
|
60
|
+
iterate @cron_events
|
61
|
+
end
|
53
62
|
end
|
63
|
+
|
54
64
|
end
|
55
65
|
|
56
66
|
def stop()
|
57
67
|
@running = false
|
68
|
+
@ws.close
|
69
|
+
EM.stop_event_loop
|
58
70
|
end
|
59
71
|
|
60
72
|
def load_entries()
|
@@ -84,7 +96,9 @@ class DynarexCron
|
|
84
96
|
|
85
97
|
if h[:cron].to_time.strftime(DF) == Time.now.strftime(DF) then
|
86
98
|
|
87
|
-
|
99
|
+
topic, msg = h[:job].match(/^pub(?:lish)\s+([^:]+):(.*)/).captures
|
100
|
+
@ws.send "%s: %s" % [topic, msg]
|
101
|
+
|
88
102
|
begin
|
89
103
|
h[:cron].next # advances the time
|
90
104
|
rescue
|
@@ -94,107 +108,66 @@ class DynarexCron
|
|
94
108
|
|
95
109
|
end
|
96
110
|
end
|
97
|
-
end
|
111
|
+
end
|
98
112
|
|
99
|
-
def run(job)
|
100
|
-
|
101
|
-
case job
|
102
|
-
|
103
|
-
when /^(run )/
|
104
|
-
code2, args = RScript.new.read ($').scan(/[^'"]+/).map(&:strip)
|
105
|
-
eval code2
|
106
|
-
|
107
|
-
when /^(pub\s*(?:lish)?\s+)/
|
108
|
-
|
109
|
-
return unless @sps_address
|
110
|
-
SimplePubSub::Client.connect(@sps_address) do |client|
|
111
|
-
topic, msg = ($').split(/:\s*/,2)
|
112
|
-
client.publish(topic, msg)
|
113
|
-
end
|
114
|
-
|
115
|
-
when /^`([^`]+)/
|
116
|
-
`#{$1}`
|
117
|
-
|
118
|
-
when %r{http://}
|
119
|
-
open(s, 'UserAgent' => 'DynarexCron v0.1')
|
120
|
-
|
121
|
-
else
|
122
|
-
eval(s)
|
123
|
-
end
|
124
|
-
|
125
|
-
end
|
126
|
-
|
127
113
|
end
|
128
114
|
|
129
|
-
|
130
115
|
class DynarexEvents < DynarexCron
|
131
116
|
|
132
117
|
attr_reader :to_a
|
133
118
|
|
134
|
-
# options: e.g. sps_address, 'sps', drb_server: 58000
|
135
|
-
#
|
136
119
|
def initialize(dynarex_file=nil, options={})
|
137
120
|
|
138
|
-
opt = {sps_address: nil
|
121
|
+
opt = {sps_address: nil}.merge options
|
122
|
+
|
123
|
+
@cron_events = []
|
139
124
|
|
140
|
-
@entries, @cron_events = [], []
|
141
|
-
|
142
125
|
@dynarex_file = dynarex_file
|
143
126
|
load_events()
|
144
127
|
|
145
128
|
@sps_address = opt[:sps_address]
|
146
129
|
|
147
|
-
if opt[:drb_server] then
|
148
|
-
|
149
|
-
Thread.new {
|
150
|
-
|
151
|
-
# start up the DRb service
|
152
|
-
DRb.start_service 'druby://:' + opt[:drb_server], self
|
153
|
-
|
154
|
-
# wait for the DRb service to finish before exiting
|
155
|
-
DRb.thread.join
|
156
|
-
}
|
157
|
-
end
|
158
130
|
end
|
159
131
|
|
160
|
-
def add_entry(h)
|
161
|
-
# if the entry already exists delete it
|
162
|
-
@entries.delete @entries.find {|x| x[:job] == h[:job]}
|
163
|
-
@entries << h
|
164
|
-
end
|
165
|
-
|
166
132
|
def load_events()
|
167
133
|
|
168
134
|
dynarex = Dynarex.new @dynarex_file
|
169
|
-
@entries = dynarex.to_h
|
170
|
-
@cron_events = self.to_a
|
171
|
-
'events loaded and refreshed'
|
135
|
+
@entries = dynarex.to_h
|
136
|
+
@cron_events = self.to_a
|
172
137
|
end
|
173
138
|
|
174
139
|
alias refresh load_events
|
175
140
|
|
176
141
|
def start
|
142
|
+
|
177
143
|
@running = true
|
178
144
|
puts '[' + Time.now.strftime(DF) + '] DynarexEvents started'
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
145
|
+
params = {uri: "ws://%s:%s" % [@sps_address, @sps_port]}
|
146
|
+
|
147
|
+
@ws = WebSocket::EventMachine::Client
|
148
|
+
|
149
|
+
EventMachine.run do
|
150
|
+
|
151
|
+
@ws.connect(params)
|
152
|
+
|
153
|
+
EM.add_periodic_timer(60) do
|
154
|
+
iterate @cron_events
|
155
|
+
end
|
156
|
+
|
183
157
|
end
|
184
158
|
end
|
185
159
|
|
186
160
|
def to_a()
|
187
|
-
|
188
|
-
return unless @entries
|
189
|
-
|
161
|
+
|
190
162
|
@entries.inject([]) do |r,h|
|
191
163
|
|
192
|
-
h[:cron] = ChronicCron.new(h[:date]
|
193
|
-
h[:job]
|
164
|
+
h[:cron] = ChronicCron.new(h[:date])
|
165
|
+
h[:job] = 'pub event: ' + h[:title]
|
194
166
|
|
195
|
-
if h[:reminder].
|
167
|
+
if h[:reminder].length > 0 then
|
196
168
|
rmndr = {}
|
197
|
-
rmndr[:cron] = ChronicCron.new((Chronic.parse(h[:date]) -
|
169
|
+
rmndr[:cron] = ChronicCron.new((Chronic.parse(h[:date]) -
|
170
|
+
ChronicDuration.parse(h[:reminder])).to_s)
|
198
171
|
rmndr[:job] = 'pub event: reminder ' + h[:title]
|
199
172
|
r << rmndr
|
200
173
|
end
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dynarex_cron
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Robertson
|
@@ -31,7 +31,7 @@ cert_chain:
|
|
31
31
|
y6cNz+NnybgoQfG28NcwV1e/31NTJk5VqdKHKnTfPcp/y35T9YoElNn5cSs93qc5
|
32
32
|
U5VVkvsVQudaZw==
|
33
33
|
-----END CERTIFICATE-----
|
34
|
-
date: 2013-
|
34
|
+
date: 2013-11-22 00:00:00.000000000 Z
|
35
35
|
dependencies:
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: dynarex
|
@@ -62,7 +62,7 @@ dependencies:
|
|
62
62
|
- !ruby/object:Gem::Version
|
63
63
|
version: '0'
|
64
64
|
- !ruby/object:Gem::Dependency
|
65
|
-
name:
|
65
|
+
name: websocket-eventmachine-client
|
66
66
|
requirement: !ruby/object:Gem::Requirement
|
67
67
|
requirements:
|
68
68
|
- - ">="
|
metadata.gz.sig
CHANGED
Binary file
|