fluent-plugin-sidekiq 0.0.3 → 0.0.4

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: 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