fluent-plugin-sidekiq 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/VERSION +1 -1
- data/lib/fluent/plugin/out_sidekiq.rb +63 -9
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 94201545914e3c1a8a9c1f46f2900844bf3fe666
|
4
|
+
data.tar.gz: 905b90eba9fa9a355018e0ab69e3092c4fe32ef0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: abaef90d540ef6dc3efc2a80c3073dc09911a7ee5e7fd38298d2e22c807e351d5fb0ae22e7e1196a8c62d5ee8c8efceac1d4ccb94d5a712186d3d555b70bb329
|
7
|
+
data.tar.gz: 054e8fcda8959847b1b5953f5d9e7dc5f82f5424ec22e4650cbf8f186eef667462266339372f2c3e361ff73327ed90222a9329211c99e6865c6a8a2f69734e1e
|
data/README.md
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.4
|
@@ -1,11 +1,38 @@
|
|
1
1
|
require "redis"
|
2
2
|
|
3
3
|
class Fluent::SidekiqOutput < Fluent::BufferedOutput
|
4
|
-
|
4
|
+
class Batch
|
5
|
+
attr_accessor :queue, :klass, :payload
|
6
|
+
|
7
|
+
def initialize(q, k)
|
8
|
+
self.queue = q
|
9
|
+
self.klass = k
|
10
|
+
self.payload = {:class => k, :retry => true, :jid => "", :enqueued_at => 0, :args => [[]] }
|
11
|
+
end
|
12
|
+
|
13
|
+
def acceptable_batch(q, c, p, max_size)
|
14
|
+
q == queue && c == klass && (payload[:args][0].length + p.length) <= max_size
|
15
|
+
end
|
16
|
+
|
17
|
+
def add_to_batch(p)
|
18
|
+
payload[:retry] = p['retry']
|
19
|
+
payload[:jid] = p['jid']
|
20
|
+
payload[:enqueued_at] = p['enqueued_at']
|
21
|
+
payload[:args][0] += p['args'][0]
|
22
|
+
end
|
23
|
+
|
24
|
+
def enqueue(client)
|
25
|
+
client.sadd("queues", queue)
|
26
|
+
client.lpush("queue:#{queue}", JSON.generate(payload))
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
VERSION = "0.0.4"
|
5
31
|
Fluent::Plugin.register_output("sidekiq", self)
|
6
32
|
|
7
33
|
config_param :redis_url, :string, :default => 'redis://localhost:6379'
|
8
34
|
config_param :redis_namespace, :string, :default => nil
|
35
|
+
config_param :max_batch_size, :integer, :default => 100
|
9
36
|
|
10
37
|
def start
|
11
38
|
super
|
@@ -32,17 +59,44 @@ class Fluent::SidekiqOutput < Fluent::BufferedOutput
|
|
32
59
|
|
33
60
|
def write(chunk)
|
34
61
|
client = redis_client
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
62
|
+
scheduled_jobs = []
|
63
|
+
batches = []
|
64
|
+
manually_queue = []
|
65
|
+
|
66
|
+
chunk.msgpack_each do |tag, time, data|
|
67
|
+
at = data.delete('at')
|
68
|
+
if at
|
69
|
+
scheduled_jobs << [at, data['payload']]
|
70
|
+
else
|
71
|
+
payload = JSON.parse(data['payload'])
|
72
|
+
if payload['args'][0].kind_of?(Array) && payload['args'][0].all? { |a| a.kind_of?(Hash) }
|
41
73
|
queue = data.delete('queue')
|
42
|
-
|
43
|
-
|
74
|
+
klass = payload['class']
|
75
|
+
|
76
|
+
batch = batches.find { |b| b.acceptable_batch(queue, klass, payload['args'][0], max_batch_size) }
|
77
|
+
if !batch
|
78
|
+
batch = Batch.new(queue, klass)
|
79
|
+
batches << batch
|
80
|
+
end
|
81
|
+
|
82
|
+
batch.add_to_batch(payload)
|
83
|
+
else
|
84
|
+
# Manual queuing
|
85
|
+
manually_queue << data
|
44
86
|
end
|
45
87
|
end
|
46
88
|
end
|
89
|
+
|
90
|
+
if scheduled_jobs.length > 0
|
91
|
+
client.zadd('schedule', scheduled_jobs)
|
92
|
+
end
|
93
|
+
batches.each do |batch|
|
94
|
+
batch.enqueue(client)
|
95
|
+
end
|
96
|
+
manually_queue.each do |data|
|
97
|
+
queue = data.delete('queue')
|
98
|
+
client.sadd('queues', queue)
|
99
|
+
client.lpush("queue:#{queue}", data['payload'])
|
100
|
+
end
|
47
101
|
end
|
48
102
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-sidekiq
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Scarborough
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-08-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fluentd
|