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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 24e9192b5a057c899884a53375972d72cc0baad0
|
4
|
+
data.tar.gz: 7706335077074b40c57b360b2c9e2f2703a56c95
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9c08fec946dadb90c1d505ce4e32cf39186a272dda8d6a795ec3a0a27ce25493e89a99230a166001895099a366e859f48ffb768e0a72020c5e27c87b8ed50d5f
|
7
|
+
data.tar.gz: 846f42745e6c3a690108300e389bf9d52b38cffe4bc006af3d69b51c335617d4d95c7745add7172cfa63ec9146d165f089e83ddd8c3f78d93d7a1cd0e963630a
|
@@ -1,5 +1,6 @@
|
|
1
|
-
require
|
2
|
-
require
|
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,
|
14
|
-
@
|
15
|
-
@
|
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
|
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(
|
26
|
-
Thread.new
|
27
|
-
|
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
|
36
|
+
def sync_store(message)
|
31
37
|
logger.metric "SynchronouslyArchivedData"
|
32
|
-
|
33
|
-
|
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(
|
76
|
+
DateTime.now.strftime("%d-%m-%Y_%H")
|
38
77
|
end
|
39
78
|
|
40
79
|
def meta_for(m)
|
41
80
|
{
|
42
|
-
:id
|
43
|
-
:md5
|
44
|
-
:logged_at
|
45
|
-
:queue
|
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
|
-
|
@@ -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
|
data/spec/archiver_spec.rb
CHANGED
@@ -1,32 +1,68 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Alephant::Publisher::Queue::SQSHelper::Archiver do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
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
|
-
|
10
|
-
|
16
|
+
let (:opts) do
|
17
|
+
{
|
18
|
+
:log_archive_message => true,
|
19
|
+
:async_store => false
|
20
|
+
}
|
21
|
+
end
|
11
22
|
|
12
|
-
|
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
|
-
|
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
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
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
|
-
|
57
|
+
context "disabled" do
|
58
|
+
before(:each) do
|
59
|
+
opts[:log_archive_message] = false
|
60
|
+
end
|
28
61
|
|
29
|
-
|
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.
|
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-
|
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
|