alephant-publisher-queue 1.3.6 → 1.4.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 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