Merge remote-tracking branch 'origin/master' into bump_weibo_2

Andrew Cantino 10 年之前
父节点
当前提交
40909b35b9
共有 8 个文件被更改,包括 63 次插入56 次删除
  1. 2 2
      Gemfile
  2. 19 19
      Gemfile.lock
  3. 15 0
      app/jobs/agent_check_job.rb
  4. 16 0
      app/jobs/agent_receive_job.rb
  5. 6 32
      app/models/agent.rb
  6. 1 1
      app/models/agents/email_agent.rb
  7. 1 1
      app/models/agents/email_digest_agent.rb
  8. 3 1
      config/application.rb

+ 2 - 2
Gemfile

@@ -21,8 +21,8 @@ gem 'weibo_2', github: 'cantino/weibo_2', branch: 'master'
21 21
 gem "google-api-client", require: 'google/api_client'
22 22
 
23 23
 # Twitter Agents
24
-gem 'twitter', '~> 5.8.0' # Must to be loaded before cantino-twitter-stream.
25
-gem 'twitter-stream', github: 'dsander/twitter-stream', branch: 'huginn'
24
+gem 'twitter', '~> 5.14.0' # Must to be loaded before cantino-twitter-stream.
25
+gem 'twitter-stream', github: 'cantino/twitter-stream', branch: 'huginn'
26 26
 gem 'omniauth-twitter'
27 27
 
28 28
 # Tumblr Agents

+ 19 - 19
Gemfile.lock

@@ -1,4 +1,14 @@
1 1
 GIT
2
+  remote: git://github.com/cantino/twitter-stream.git
3
+  revision: f7e7edb0bae013bffabf3598e7147773d9fd370f
4
+  branch: huginn
5
+  specs:
6
+    twitter-stream (0.1.15)
7
+      eventmachine (~> 1.0.7)
8
+      http_parser.rb (~> 0.6.0)
9
+      simple_oauth (~> 0.3.0)
10
+
11
+GIT
2 12
   remote: git://github.com/cantino/weibo_2.git
3 13
   revision: 00e57d29d8252126014b038cd738b02e05e4cfc5
4 14
   branch: master
@@ -10,16 +20,6 @@ GIT
10 20
       rest-client (~> 1.8)
11 21
 
12 22
 GIT
13
-  remote: git://github.com/dsander/twitter-stream.git
14
-  revision: 1713b4fe5b387580364b39716bb5c26d6601c50f
15
-  branch: huginn
16
-  specs:
17
-    twitter-stream (0.1.15)
18
-      eventmachine (~> 1.0.7)
19
-      http_parser.rb (~> 0.6.0)
20
-      simple_oauth (~> 0.2.0)
21
-
22
-GIT
23 23
   remote: git://github.com/wunderlist/omniauth-wunderlist.git
24 24
   revision: d0910d0396107b9302aa1bc50e74bb140990ccb8
25 25
   ref: d0910d0396107b9302aa1bc50e74bb140990ccb8
@@ -67,7 +67,7 @@ GEM
67 67
       minitest (~> 5.1)
68 68
       thread_safe (~> 0.3, >= 0.3.4)
69 69
       tzinfo (~> 1.1)
70
-    addressable (2.3.7)
70
+    addressable (2.3.8)
71 71
     arel (6.0.0)
72 72
     autoparse (0.3.3)
73 73
       addressable (>= 2.3.1)
@@ -144,7 +144,7 @@ GEM
144 144
     em-websocket (0.5.1)
145 145
       eventmachine (>= 0.12.9)
146 146
       http_parser.rb (~> 0.6.0)
147
-    equalizer (0.0.9)
147
+    equalizer (0.0.11)
148 148
     erector (0.10.0)
149 149
       treetop (>= 1.2.3)
150 150
     erubis (2.7.0)
@@ -212,8 +212,8 @@ GEM
212 212
     httmultiparty (0.3.10)
213 213
       httparty (>= 0.7.3)
214 214
       multipart-post
215
-    http (0.5.1)
216
-      http_parser.rb
215
+    http (0.6.4)
216
+      http_parser.rb (~> 0.6.0)
217 217
     http-cookie (1.0.2)
218 218
       domain_name (~> 0.5)
219 219
     http_parser.rb (0.6.0)
@@ -403,7 +403,7 @@ GEM
403 403
       jwt (>= 0.1.5)
404 404
       multi_json (>= 1.0.0)
405 405
     simple-rss (1.3.1)
406
-    simple_oauth (0.2.0)
406
+    simple_oauth (0.3.1)
407 407
     simplecov (0.9.2)
408 408
       docile (~> 1.1.0)
409 409
       multi_json (~> 1.0)
@@ -451,17 +451,17 @@ GEM
451 451
       builder (>= 2.1.2)
452 452
       jwt (>= 0.1.2)
453 453
       multi_json (>= 1.3.0)
454
-    twitter (5.8.0)
454
+    twitter (5.14.0)
455 455
       addressable (~> 2.3)
456 456
       buftok (~> 0.2.0)
457 457
       equalizer (~> 0.0.9)
458 458
       faraday (~> 0.9.0)
459
-      http (~> 0.5.0)
459
+      http (~> 0.6.0)
460 460
       http_parser.rb (~> 0.6.0)
461 461
       json (~> 1.8)
462 462
       memoizable (~> 0.4.0)
463 463
       naught (~> 1.0)
464
-      simple_oauth (~> 0.2.0)
464
+      simple_oauth (~> 0.3.0)
465 465
     typhoeus (0.6.9)
466 466
       ethon (>= 0.7.1)
467 467
     tzinfo (1.2.2)
@@ -571,7 +571,7 @@ DEPENDENCIES
571 571
   therubyracer (~> 0.12.1)
572 572
   tumblr_client
573 573
   twilio-ruby (~> 3.11.5)
574
-  twitter (~> 5.8.0)
574
+  twitter (~> 5.14.0)
575 575
   twitter-stream!
576 576
   typhoeus (~> 0.6.3)
577 577
   tzinfo (>= 1.2.0)

+ 15 - 0
app/jobs/agent_check_job.rb

@@ -0,0 +1,15 @@
1
+class AgentCheckJob < ActiveJob::Base
2
+  # Given an Agent id, load the Agent, call #check on it, and then save it with an updated `last_check_at` timestamp.
3
+  def perform(agent_id)
4
+    agent = Agent.find(agent_id)
5
+    begin
6
+      return if agent.unavailable?
7
+      agent.check
8
+      agent.last_check_at = Time.now
9
+      agent.save!
10
+    rescue => e
11
+      agent.error "Exception during check. #{e.message}: #{e.backtrace.join("\n")}"
12
+      raise
13
+    end
14
+  end
15
+end

+ 16 - 0
app/jobs/agent_receive_job.rb

@@ -0,0 +1,16 @@
1
+class AgentReceiveJob < ActiveJob::Base
2
+  # Given an Agent id and an array of Event ids, load the Agent, call #receive on it with the Event objects, and then
3
+  # save it with an updated `last_receive_at` timestamp.
4
+  def perform(agent_id, event_ids)
5
+    agent = Agent.find(agent_id)
6
+    begin
7
+      return if agent.unavailable?
8
+      agent.receive(Event.where(:id => event_ids).order(:id))
9
+      agent.last_receive_at = Time.now
10
+      agent.save!
11
+    rescue => e
12
+      agent.error "Exception during receive. #{e.message}: #{e.backtrace.join("\n")}"
13
+      raise
14
+    end
15
+  end
16
+end

+ 6 - 32
app/models/agent.rb

@@ -387,24 +387,11 @@ class Agent < ActiveRecord::Base
387 387
       end
388 388
     end
389 389
 
390
-    # Given an Agent id and an array of Event ids, load the Agent, call #receive on it with the Event objects, and then
391
-    # save it with an updated `last_receive_at` timestamp.
392
-    #
393
-    # This method is tagged with `handle_asynchronously` and will be delayed and run with delayed_job.  It accepts Agent
394
-    # and Event ids instead of a literal ActiveRecord models because it is preferable to serialize delayed_jobs with ids.
390
+    # This method will enqueue an AgentReceiveJob job. It accepts Agent and Event ids instead of a literal ActiveRecord
391
+    # models because it is preferable to serialize jobs with ids.
395 392
     def async_receive(agent_id, event_ids)
396
-      agent = Agent.find(agent_id)
397
-      begin
398
-        return if agent.unavailable?
399
-        agent.receive(Event.where(:id => event_ids).order(:id))
400
-        agent.last_receive_at = Time.now
401
-        agent.save!
402
-      rescue => e
403
-        agent.error "Exception during receive. #{e.message}: #{e.backtrace.join("\n")}"
404
-        raise
405
-      end
393
+      AgentReceiveJob.perform_later(agent_id, event_ids)
406 394
     end
407
-    handle_asynchronously :async_receive
408 395
 
409 396
     # Given a schedule name, run `check` via `bulk_check` on all Agents with that schedule.
410 397
     # This is called by bin/schedule.rb for each schedule in `SCHEDULES`.
@@ -425,24 +412,11 @@ class Agent < ActiveRecord::Base
425 412
       end
426 413
     end
427 414
 
428
-    # Given an Agent id, load the Agent, call #check on it, and then save it with an updated `last_check_at` timestamp.
429
-    #
430
-    # This method is tagged with `handle_asynchronously` and will be delayed and run with delayed_job.  It accepts an Agent
431
-    # id instead of a literal Agent because it is preferable to serialize delayed_jobs with ids, instead of with the full
432
-    # Agents.
415
+    # This method will enqueue an AgentCheckJob job. It accepts an Agent id instead of a literal Agent because it is
416
+    # preferable to serialize job with ids, instead of with the full Agents.
433 417
     def async_check(agent_id)
434
-      agent = Agent.find(agent_id)
435
-      begin
436
-        return if agent.unavailable?
437
-        agent.check
438
-        agent.last_check_at = Time.now
439
-        agent.save!
440
-      rescue => e
441
-        agent.error "Exception during check. #{e.message}: #{e.backtrace.join("\n")}"
442
-        raise
443
-      end
418
+      AgentCheckJob.perform_later(agent_id)
444 419
     end
445
-    handle_asynchronously :async_check
446 420
   end
447 421
 end
448 422
 

+ 1 - 1
app/models/agents/email_agent.rb

@@ -35,7 +35,7 @@ module Agents
35 35
       incoming_events.each do |event|
36 36
         log "Sending digest mail to #{user.email} with event #{event.id}"
37 37
         recipients(event.payload).each do |recipient|
38
-          SystemMailer.delay.send_message(:to => recipient, :subject => interpolated(event)['subject'], :headline => interpolated(event)['headline'], :body => interpolated(event)['body'], :groups => [present(event.payload)])
38
+          SystemMailer.send_message(:to => recipient, :subject => interpolated(event)['subject'], :headline => interpolated(event)['headline'], :body => interpolated(event)['body'], :groups => [present(event.payload)]).deliver_later
39 39
         end
40 40
       end
41 41
     end

+ 1 - 1
app/models/agents/email_digest_agent.rb

@@ -42,7 +42,7 @@ module Agents
42 42
         groups = self.memory['queue'].map { |payload| present(payload) }
43 43
         log "Sending digest mail to #{user.email} with events [#{ids}]"
44 44
         recipients.each do |recipient|
45
-          SystemMailer.delay.send_message(:to => recipient, :subject => interpolated['subject'], :headline => interpolated['headline'], :groups => groups)
45
+          SystemMailer.send_message(:to => recipient, :subject => interpolated['subject'], :headline => interpolated['headline'], :groups => groups).deliver_later
46 46
         end
47 47
         self.memory['queue'] = []
48 48
         self.memory['events'] = []

+ 3 - 1
config/application.rb

@@ -13,7 +13,7 @@ module Huginn
13 13
     # -- all .rb files in that directory are automatically loaded.
14 14
 
15 15
     # Custom directories with classes and modules you want to be autoloadable.
16
-    config.autoload_paths += %W(#{config.root}/lib #{config.root}/app/presenters)
16
+    config.autoload_paths += %W(#{config.root}/lib #{config.root}/app/presenters #{config.root}/app/jobs)
17 17
 
18 18
     # Activate observers that should always be running.
19 19
     # config.active_record.observers = :cacher, :garbage_collector, :forum_observer
@@ -52,5 +52,7 @@ module Huginn
52 52
 
53 53
     # Do not swallow errors in after_commit/after_rollback callbacks.
54 54
     config.active_record.raise_in_transactional_callbacks = true
55
+
56
+    config.active_job.queue_adapter = :delayed_job
55 57
   end
56 58
 end