khronos 0.0.2 → 0.0.3.pre1
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.
- data/khronos.gemspec +2 -0
- data/lib/khronos/scheduler.rb +7 -14
- data/lib/khronos/server/controller.rb +5 -8
- data/lib/khronos/server/em_runner.rb +56 -0
- data/lib/khronos/server/runner.rb +25 -28
- data/lib/khronos/version.rb +1 -1
- metadata +38 -5
data/khronos.gemspec
CHANGED
@@ -22,6 +22,8 @@ Gem::Specification.new do |s|
|
|
22
22
|
s.add_dependency "activesupport", "~> 3.2.8"
|
23
23
|
s.add_dependency "eventmachine", "~> 1.0.0.beta.4"
|
24
24
|
s.add_dependency "em-http-request", "~> 1.0.3"
|
25
|
+
s.add_dependency "rest-client", "~> 1.6.7"
|
26
|
+
s.add_dependency "girl_friday", "~> 0.10.0"
|
25
27
|
|
26
28
|
s.files = `git ls-files`.split("\n")
|
27
29
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
data/lib/khronos/scheduler.rb
CHANGED
@@ -3,24 +3,17 @@ require 'json'
|
|
3
3
|
|
4
4
|
module Khronos
|
5
5
|
class Scheduler
|
6
|
-
module Methods
|
7
|
-
def run(schedule)
|
8
|
-
client = TCPSocket.new( Config.instance.runner['host'], Config.instance.runner['port'] )
|
9
|
-
client.puts( schedule.to_json )
|
10
6
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
7
|
+
def self.run(schedule, runner=nil)
|
8
|
+
schedule.update_attributes(:active => false)
|
9
|
+
schedule.save
|
10
|
+
runner.enqueue(schedule)
|
11
|
+
end
|
16
12
|
|
17
|
-
|
18
|
-
|
19
|
-
end
|
13
|
+
def self.fetch(target_time=Time.now)
|
14
|
+
Storage::Schedule.where(['at <= ?', target_time]).where(:active => true)
|
20
15
|
end
|
21
16
|
|
22
|
-
include Methods
|
23
|
-
extend Methods
|
24
17
|
end
|
25
18
|
end
|
26
19
|
|
@@ -1,11 +1,11 @@
|
|
1
1
|
module Khronos
|
2
2
|
module Server
|
3
3
|
class Controller
|
4
|
-
attr_reader :storage
|
4
|
+
attr_reader :storage
|
5
5
|
|
6
|
-
def initialize
|
6
|
+
def initialize(runner=nil)
|
7
7
|
@storage = Storage.new
|
8
|
-
@
|
8
|
+
@runner = runner
|
9
9
|
end
|
10
10
|
|
11
11
|
def logger=(logger)
|
@@ -15,11 +15,8 @@ module Khronos
|
|
15
15
|
def check_schedule!
|
16
16
|
puts "Check... #{Time.now}"
|
17
17
|
count = 0
|
18
|
-
|
19
|
-
|
20
|
-
schedule.save
|
21
|
-
|
22
|
-
@scheduler.run(schedule)
|
18
|
+
Khronos::Scheduler.fetch(Time.now).each do |schedule|
|
19
|
+
Khronos::Scheduler.run(schedule, @runner)
|
23
20
|
count += 1
|
24
21
|
end
|
25
22
|
puts "Tick. #{count} jobs to run."
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'eventmachine'
|
3
|
+
require 'em-http'
|
4
|
+
|
5
|
+
#
|
6
|
+
# DEPRECATED:
|
7
|
+
# This class was used just for testing purpose.
|
8
|
+
#
|
9
|
+
|
10
|
+
module Khronos
|
11
|
+
module Server
|
12
|
+
|
13
|
+
class Runner < EventMachine::Connection
|
14
|
+
def post_init
|
15
|
+
puts "-- someone connected to the server!"
|
16
|
+
end
|
17
|
+
|
18
|
+
def receive_data json
|
19
|
+
puts "Receive data to run: #{json}"
|
20
|
+
schedule = JSON.parse(json)
|
21
|
+
send_data ">>> you sent: #{schedule.inspect}"
|
22
|
+
|
23
|
+
# Close connection with client immediatelly
|
24
|
+
close_connection
|
25
|
+
|
26
|
+
if (url = schedule['task_url'])
|
27
|
+
http = EventMachine::HttpRequest.new(url).get :redirects => 5
|
28
|
+
http.callback do
|
29
|
+
puts "#{url}\n#{http.response_header.status} - #{http.response.length} bytes\n"
|
30
|
+
puts http.response
|
31
|
+
end
|
32
|
+
|
33
|
+
http.errback do
|
34
|
+
puts "#{url}\n" + http.error
|
35
|
+
end
|
36
|
+
|
37
|
+
enqueue_recurrency!(schedule)
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
def enqueue_recurrency!(schedule)
|
43
|
+
url = "http://#{Config.instance.scheduler['host']}"
|
44
|
+
url += ":#{Config.instance.scheduler['port']}" if Config.instance.scheduler['port']
|
45
|
+
url += "/task?id=#{schedule['id']}"
|
46
|
+
EventMachine::HttpRequest.new(url).patch :redirects => 2
|
47
|
+
end
|
48
|
+
|
49
|
+
def unbind
|
50
|
+
puts "-- someone disconnected from the echo server!"
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
@@ -1,51 +1,48 @@
|
|
1
|
+
require 'rest-client'
|
1
2
|
require 'json'
|
2
|
-
require '
|
3
|
-
require 'em-http'
|
3
|
+
require 'girl_friday'
|
4
4
|
|
5
5
|
module Khronos
|
6
6
|
module Server
|
7
7
|
|
8
|
-
class Runner <
|
9
|
-
|
10
|
-
|
8
|
+
class Runner < GirlFriday::WorkQueue
|
9
|
+
attr_reader :queue
|
10
|
+
|
11
|
+
def initialize(*args)
|
12
|
+
@queue = self
|
13
|
+
super(*args) do |schedule|
|
14
|
+
self.process(schedule)
|
15
|
+
end
|
11
16
|
end
|
12
17
|
|
13
|
-
def
|
14
|
-
|
15
|
-
|
16
|
-
send_data ">>> you sent: #{schedule.inspect}"
|
18
|
+
def enqueue(schedule)
|
19
|
+
@queue.push(schedule.to_json)
|
20
|
+
end
|
17
21
|
|
18
|
-
|
19
|
-
|
22
|
+
def process(json)
|
23
|
+
schedule = JSON.parse(json)
|
24
|
+
puts "Process => #{schedule.inspect}"
|
20
25
|
|
21
26
|
if (url = schedule['task_url'])
|
22
|
-
|
23
|
-
|
24
|
-
puts "
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
http.errback do
|
29
|
-
puts "#{url}\n" + http.error
|
27
|
+
begin
|
28
|
+
response = RestClient.get(url)
|
29
|
+
puts "Callback: success. response length: #{response.length.inspect}"
|
30
|
+
rescue Exception => e
|
31
|
+
puts "Callback: error. (#{e.inspect})"
|
30
32
|
end
|
31
|
-
|
32
|
-
enqueue_recurrency!(schedule)
|
33
|
+
calculate_recurrency!(schedule)
|
33
34
|
end
|
34
|
-
|
35
35
|
end
|
36
36
|
|
37
|
-
def
|
37
|
+
def calculate_recurrency!(schedule)
|
38
38
|
url = "http://#{Config.instance.scheduler['host']}"
|
39
39
|
url += ":#{Config.instance.scheduler['port']}" if Config.instance.scheduler['port']
|
40
40
|
url += "/task?id=#{schedule['id']}"
|
41
|
-
|
42
|
-
end
|
43
|
-
|
44
|
-
def unbind
|
45
|
-
puts "-- someone disconnected from the echo server!"
|
41
|
+
RestClient.patch(url)
|
46
42
|
end
|
47
43
|
|
48
44
|
end
|
49
45
|
|
50
46
|
end
|
51
47
|
end
|
48
|
+
|
data/lib/khronos/version.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: khronos
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.3.pre1
|
5
|
+
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Endel Dreyer
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-09-
|
12
|
+
date: 2012-09-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sinatra
|
@@ -139,6 +139,38 @@ dependencies:
|
|
139
139
|
- - ~>
|
140
140
|
- !ruby/object:Gem::Version
|
141
141
|
version: 1.0.3
|
142
|
+
- !ruby/object:Gem::Dependency
|
143
|
+
name: rest-client
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
146
|
+
requirements:
|
147
|
+
- - ~>
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: 1.6.7
|
150
|
+
type: :runtime
|
151
|
+
prerelease: false
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ~>
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: 1.6.7
|
158
|
+
- !ruby/object:Gem::Dependency
|
159
|
+
name: girl_friday
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
161
|
+
none: false
|
162
|
+
requirements:
|
163
|
+
- - ~>
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: 0.10.0
|
166
|
+
type: :runtime
|
167
|
+
prerelease: false
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
none: false
|
170
|
+
requirements:
|
171
|
+
- - ~>
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: 0.10.0
|
142
174
|
description: Ruby HTTP Job Scheduler Interface. An advanced Cron replacement for the
|
143
175
|
cloud.
|
144
176
|
email:
|
@@ -164,6 +196,7 @@ files:
|
|
164
196
|
- lib/khronos/scheduler.rb
|
165
197
|
- lib/khronos/server.rb
|
166
198
|
- lib/khronos/server/controller.rb
|
199
|
+
- lib/khronos/server/em_runner.rb
|
167
200
|
- lib/khronos/server/runner.rb
|
168
201
|
- lib/khronos/server/scheduler.rb
|
169
202
|
- lib/khronos/storage.rb
|
@@ -209,9 +242,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
209
242
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
210
243
|
none: false
|
211
244
|
requirements:
|
212
|
-
- - ! '
|
245
|
+
- - ! '>'
|
213
246
|
- !ruby/object:Gem::Version
|
214
|
-
version:
|
247
|
+
version: 1.3.1
|
215
248
|
requirements: []
|
216
249
|
rubyforge_project:
|
217
250
|
rubygems_version: 1.8.24
|