alephant-publisher-queue 1.3.6 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d78e6c9917deaa56cc0ecd2bd563388eb30f4d62
4
- data.tar.gz: 715428fae721f928bc8e933b2f7da3b24feea3eb
3
+ metadata.gz: 24e9192b5a057c899884a53375972d72cc0baad0
4
+ data.tar.gz: 7706335077074b40c57b360b2c9e2f2703a56c95
5
5
  SHA512:
6
- metadata.gz: 656c8367bc881ec7f9a245358ac3d4f15b788fd6e5c7fa8e7b726f8308f514798f7882c93970a9617d18179b969fdac07c8eeb0412637f5feee2e825da1f74d0
7
- data.tar.gz: 7d42f79f877161ff832505437115ce3b1196097e52ef87a9f4b9014ac54681e10585d52c93639b09455639ed2fb579feceff963002e5c8e27901a7abd4c846cc
6
+ metadata.gz: 9c08fec946dadb90c1d505ce4e32cf39186a272dda8d6a795ec3a0a27ce25493e89a99230a166001895099a366e859f48ffb768e0a72020c5e27c87b8ed50d5f
7
+ data.tar.gz: 846f42745e6c3a690108300e389bf9d52b38cffe4bc006af3d69b51c335617d4d95c7745add7172cfa63ec9146d165f089e83ddd8c3f78d93d7a1cd0e963630a
@@ -15,7 +15,9 @@ module Alephant
15
15
  :receive_wait_time,
16
16
  :sqs_queue_name,
17
17
  :visibility_timeout,
18
- :aws_account_id
18
+ :aws_account_id,
19
+ :log_archive_message,
20
+ :async_store
19
21
  ]
20
22
 
21
23
  WRITER_OPTS = [
@@ -1,5 +1,6 @@
1
- require 'alephant/logger'
2
- require 'date'
1
+ require "alephant/logger"
2
+ require "date"
3
+ require "json"
3
4
 
4
5
  module Alephant
5
6
  module Publisher
@@ -8,41 +9,79 @@ module Alephant
8
9
  class Archiver
9
10
  include Logger
10
11
 
11
- attr_reader :cache, :async
12
+ attr_reader :cache, :async, :log_message_body
12
13
 
13
- def initialize(cache, async = true)
14
- @async = async
15
- @cache = cache
14
+ def initialize(cache, opts)
15
+ @cache = cache
16
+ @async = opts[:async_store]
17
+ @log_message_body = opts[:log_archive_message]
16
18
  end
17
19
 
18
20
  def see(message)
19
21
  return if message.nil?
20
- message.tap { |m| async ? async_store(m) : store(m) }
22
+ message.tap do |m|
23
+ async ? async_store(m) : sync_store(m)
24
+ end
21
25
  end
22
26
 
23
27
  private
24
28
 
25
- def async_store(m)
26
- Thread.new { store(m) }
27
- logger.metric "AsynchronouslyArchivedData"
29
+ def async_store(message)
30
+ Thread.new do
31
+ logger.metric "AsynchronouslyArchivedData"
32
+ store message
33
+ end
28
34
  end
29
35
 
30
- def store(m)
36
+ def sync_store(message)
31
37
  logger.metric "SynchronouslyArchivedData"
32
- logger.info "Publisher::Queue::SQSHelper::Archiver#store: '#{m.body}' at 'archive/#{date_key}/#{m.id}'"
33
- cache.put("archive/#{date_key}/#{m.id}", m.body, meta_for(m))
38
+ store message
39
+ end
40
+
41
+ def store(message)
42
+ logger.info log_message(message)
43
+ store_item message
44
+ end
45
+
46
+ def store_item(message)
47
+ cache.put(
48
+ cache_key(message.id),
49
+ message.body,
50
+ meta_for(message)
51
+ )
52
+ end
53
+
54
+ def cache_key(id)
55
+ "archive/#{date_key}/#{id}"
56
+ end
57
+
58
+ def log_message_parts(id)
59
+ [
60
+ "#{self.class}#store:",
61
+ "'#archive/#{date_key}/#{id}'"
62
+ ]
63
+ end
64
+
65
+ def log_message(m)
66
+ log_message_parts(m.id).tap do |parts|
67
+ parts << "(#{encoded_body m.body})" if log_message_body
68
+ end.join(" ")
69
+ end
70
+
71
+ def encoded_body(message)
72
+ JSON.generate message.split("\n")
34
73
  end
35
74
 
36
75
  def date_key
37
- DateTime.now.strftime('%d-%m-%Y_%H')
76
+ DateTime.now.strftime("%d-%m-%Y_%H")
38
77
  end
39
78
 
40
79
  def meta_for(m)
41
80
  {
42
- :id => m.id,
43
- :md5 => m.md5,
44
- :logged_at => DateTime.now.to_s,
45
- :queue => m.queue.url,
81
+ :id => m.id,
82
+ :md5 => m.md5,
83
+ :logged_at => DateTime.now.to_s,
84
+ :queue => m.queue.url
46
85
  }
47
86
  end
48
87
  end
@@ -50,4 +89,3 @@ module Alephant
50
89
  end
51
90
  end
52
91
  end
53
-
@@ -1,7 +1,7 @@
1
1
  module Alephant
2
2
  module Publisher
3
3
  module Queue
4
- VERSION = "1.3.6"
4
+ VERSION = "1.4.0"
5
5
  end
6
6
  end
7
7
  end
@@ -43,7 +43,17 @@ module Alephant
43
43
  private
44
44
 
45
45
  def archiver
46
- SQSHelper::Archiver.new(archive_cache)
46
+ SQSHelper::Archiver.new(archive_cache, archiver_opts)
47
+ end
48
+
49
+ def archiver_opts
50
+ options = {
51
+ :log_archive_message => true,
52
+ :async_store => true
53
+ }
54
+ options.each do |key, value|
55
+ options[key] = opts.queue[key] == "true" if opts.queue.has_key? key
56
+ end
47
57
  end
48
58
 
49
59
  def archive_cache
@@ -1,32 +1,68 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Alephant::Publisher::Queue::SQSHelper::Archiver do
4
- describe "#see" do
5
- it "calls cache put with the correct params" do
6
- time_now = DateTime.parse("Feb 24 1981")
7
- allow(DateTime).to receive(:now).and_return(time_now)
4
+ let (:cache) { instance_double("Alephant::Cache", :put => nil) }
5
+ let (:queue) { instance_double("AWS::SQS::Queue", :url => nil) }
6
+ let (:message) do
7
+ instance_double(
8
+ "AWS::SQS::ReceivedMessage",
9
+ :id => "id",
10
+ :body => "bar_baz",
11
+ :md5 => "qux",
12
+ :queue => queue
13
+ )
14
+ end
8
15
 
9
- q = double("queue").as_null_object
10
- c = double("cache").as_null_object
16
+ let (:opts) do
17
+ {
18
+ :log_archive_message => true,
19
+ :async_store => false
20
+ }
21
+ end
11
22
 
12
- expect(q).to receive(:url).and_return('url')
23
+ let (:subject) { described_class.new(cache, opts) }
24
+
25
+ describe "#see" do
26
+ let (:time_now) { DateTime.parse("Feb 24 1981") }
13
27
 
14
- m = Struct.new(:id, :body, :md5, :queue).new('id', 'body', 'md5', q)
28
+ context "calls cache put with the correct params" do
29
+ before(:each) do
30
+ allow(DateTime).to receive(:now).and_return(time_now)
31
+ end
15
32
 
16
- expect(c).to receive(:put).with(
17
- "archive/#{time_now.strftime('%d-%m-%Y_%H')}/id",
18
- "body",
19
- {
20
- :id => "id",
21
- :md5 => "md5",
22
- :logged_at => time_now.to_s,
23
- :queue => "url"
24
- }
25
- )
33
+ specify do
34
+ expect(cache).to receive(:put).with(
35
+ "archive/#{time_now.strftime('%d-%m-%Y_%H')}/id",
36
+ message.body,
37
+ {
38
+ :id => message.id,
39
+ :md5 => message.md5,
40
+ :logged_at => time_now.to_s,
41
+ :queue => message.queue.url
42
+ }
43
+ )
44
+ subject.see(message)
45
+ end
46
+ end
47
+ end
48
+
49
+ describe "logging archive message" do
50
+ context "enabled" do
51
+ specify do
52
+ subject.see(message)
53
+ expect(message).to have_received(:body).twice
54
+ end
55
+ end
26
56
 
27
- instance = Alephant::Publisher::Queue::SQSHelper::Archiver.new(c, false)
57
+ context "disabled" do
58
+ before(:each) do
59
+ opts[:log_archive_message] = false
60
+ end
28
61
 
29
- instance.see(m)
62
+ specify do
63
+ subject.see(message)
64
+ expect(message).to have_received(:body).once
65
+ end
30
66
  end
31
67
  end
32
68
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alephant-publisher-queue
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.6
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - revett
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-23 00:00:00.000000000 Z
11
+ date: 2015-05-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement