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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 059e756a9e73cf254ee157e555267df9261a9a13
4
- data.tar.gz: 7e3d0983c645de754f06f07256ba1c45410b0ea8
3
+ metadata.gz: 94201545914e3c1a8a9c1f46f2900844bf3fe666
4
+ data.tar.gz: 905b90eba9fa9a355018e0ab69e3092c4fe32ef0
5
5
  SHA512:
6
- metadata.gz: 1ce4437c823b089f05d6b3272dcad3d45ed5ea3a615f896ed1c8ec850a13ac51adc65f0b363873791380c756842b219a26a1f3e12333f681ebd1decdac7461f4
7
- data.tar.gz: 5df444a5655b90174b24e52a84543a34d7d96cf23cb124d098bd46c2128a268ee3a637b99d00d38b759cced62f91d65dd38b636386593d808102cf9cb97ea8fd
6
+ metadata.gz: abaef90d540ef6dc3efc2a80c3073dc09911a7ee5e7fd38298d2e22c807e351d5fb0ae22e7e1196a8c62d5ee8c8efceac1d4ccb94d5a712186d3d555b70bb329
7
+ data.tar.gz: 054e8fcda8959847b1b5953f5d9e7dc5f82f5424ec22e4650cbf8f186eef667462266339372f2c3e361ff73327ed90222a9329211c99e6865c6a8a2f69734e1e
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Fluent::Plugin::Sidekiq
1
+ # Fluent::Plugin::Sidekiq, a plugin for [Fluentd](http://fluentd.org)
2
2
 
3
3
  TODO: Write a gem description
4
4
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.0.4
@@ -1,11 +1,38 @@
1
1
  require "redis"
2
2
 
3
3
  class Fluent::SidekiqOutput < Fluent::BufferedOutput
4
- VERSION = "0.0.2"
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
- client.multi do
36
- chunk.msgpack_each do |tag, time, data|
37
- at = data.delete('at')
38
- if at
39
- client.zadd('schedule', [at, data['payload']])
40
- else
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
- client.sadd('queues', queue)
43
- client.lpush("queue:#{queue}", data['payload'])
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.3
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: 2013-12-21 00:00:00.000000000 Z
11
+ date: 2014-08-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluentd