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 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")
@@ -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
- while !(client.closed?) && (message = client.gets)
12
- puts message.inspect
13
- client.close
14
- end
15
- end
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
- def fetch(target_time=Time.now)
18
- Storage::Schedule.where(['at <= ?', target_time]).where(:active => true)
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, :scheduler
4
+ attr_reader :storage
5
5
 
6
- def initialize
6
+ def initialize(runner=nil)
7
7
  @storage = Storage.new
8
- @scheduler = Khronos::Scheduler.new
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
- @scheduler.fetch(Time.now).each do |schedule|
19
- schedule.update_attributes(:active => false)
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 'eventmachine'
3
- require 'em-http'
3
+ require 'girl_friday'
4
4
 
5
5
  module Khronos
6
6
  module Server
7
7
 
8
- class Runner < EventMachine::Connection
9
- def post_init
10
- puts "-- someone connected to the server!"
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 receive_data json
14
- puts "Receive data to run: #{json}"
15
- schedule = JSON.parse(json)
16
- send_data ">>> you sent: #{schedule.inspect}"
18
+ def enqueue(schedule)
19
+ @queue.push(schedule.to_json)
20
+ end
17
21
 
18
- # Close connection with client immediatelly
19
- close_connection
22
+ def process(json)
23
+ schedule = JSON.parse(json)
24
+ puts "Process => #{schedule.inspect}"
20
25
 
21
26
  if (url = schedule['task_url'])
22
- http = EventMachine::HttpRequest.new(url).get :redirects => 5
23
- http.callback do
24
- puts "#{url}\n#{http.response_header.status} - #{http.response.length} bytes\n"
25
- puts http.response
26
- end
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 enqueue_recurrency!(schedule)
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
- EventMachine::HttpRequest.new(url).patch :redirects => 2
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
+
@@ -1,3 +1,3 @@
1
1
  module Khronos
2
- VERSION = '0.0.2'
2
+ VERSION = '0.0.3.pre1'
3
3
  end
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.2
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-09 00:00:00.000000000 Z
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: '0'
247
+ version: 1.3.1
215
248
  requirements: []
216
249
  rubyforge_project:
217
250
  rubygems_version: 1.8.24