fluent-plugin-sidekiq 0.0.3 → 0.1.0

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
- SHA1:
3
- metadata.gz: 059e756a9e73cf254ee157e555267df9261a9a13
4
- data.tar.gz: 7e3d0983c645de754f06f07256ba1c45410b0ea8
2
+ SHA256:
3
+ metadata.gz: 8f504b306f8ff6c58c7d4301481958095054d689b44a0eb47814baa496bbbc15
4
+ data.tar.gz: 1d3622dbb05fca9ca6cc58dc55e3005acd90f8be778a698c00feda974bb0c54a
5
5
  SHA512:
6
- metadata.gz: 1ce4437c823b089f05d6b3272dcad3d45ed5ea3a615f896ed1c8ec850a13ac51adc65f0b363873791380c756842b219a26a1f3e12333f681ebd1decdac7461f4
7
- data.tar.gz: 5df444a5655b90174b24e52a84543a34d7d96cf23cb124d098bd46c2128a268ee3a637b99d00d38b759cced62f91d65dd38b636386593d808102cf9cb97ea8fd
6
+ metadata.gz: d266e1e43afa813a59f827439b58fc2b32a6a40e125060b76db612d32d735defce90cc33e41f410a826e2dc66af67f7bb27ab5e4523300a4164977bf46408fb4
7
+ data.tar.gz: df123481dddee992b042d27ecd75fc40c3581ed695d1a22375259741a9b9f76d9bad7c179213af1e9a094cf93a44b7389fc57302fe9833b0043f747940d3cab0
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.1.0
@@ -17,9 +17,9 @@ Gem::Specification.new do |spec|
17
17
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
18
  spec.require_paths = ["lib"]
19
19
 
20
- spec.add_dependency "fluentd"
21
- spec.add_dependency "redis"
20
+ spec.add_dependency "redis", "~> 3.0"
22
21
  spec.add_dependency "hiredis"
23
22
  spec.add_development_dependency "bundler", "~> 1.3"
24
23
  spec.add_development_dependency "rake"
24
+ spec.add_development_dependency "fluentd"
25
25
  end
@@ -1,43 +1,100 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'fluent/plugin/output'
1
4
  require "redis"
2
5
 
3
- class Fluent::SidekiqOutput < Fluent::BufferedOutput
4
- VERSION = "0.0.2"
5
- Fluent::Plugin.register_output("sidekiq", self)
6
+ module Fluent
7
+ module Plugin
8
+ class SidekiqOutput < Output
9
+ class Batch
10
+ attr_accessor :queue, :klass, :payload
6
11
 
7
- config_param :redis_url, :string, :default => 'redis://localhost:6379'
8
- config_param :redis_namespace, :string, :default => nil
12
+ def initialize(q, k)
13
+ self.queue = q
14
+ self.klass = k
15
+ self.payload = {:class => k, :retry => true, :jid => "", :enqueued_at => 0, :args => [[]] }
16
+ end
9
17
 
10
- def start
11
- super
12
- end
18
+ def acceptable_batch(q, c, p, max_size)
19
+ q == queue && c == klass && (payload[:args][0].length + p.length) <= max_size
20
+ end
13
21
 
14
- def shutdown
15
- super
16
- end
22
+ def add_to_batch(p)
23
+ payload[:retry] = p['retry']
24
+ payload[:jid] = p['jid']
25
+ payload[:enqueued_at] = p['enqueued_at']
26
+ payload[:args][0] += p['args'][0]
27
+ end
17
28
 
18
- def format(tag, time, record)
19
- [tag, time, record].to_msgpack
20
- end
29
+ def enqueue(client)
30
+ client.sadd("queues", queue)
31
+ client.lpush("queue:#{queue}", JSON.generate(payload))
32
+ end
33
+ end
21
34
 
22
- def redis_client
23
- opts = {url: @redis_url, driver: :hiredis}
24
- client = Redis.new(opts)
25
- if @redis_namespace
26
- require "redis/namespace"
27
- Redis::Namespace.new(@redis_namespace, client)
28
- else
29
- client
30
- end
31
- end
35
+ VERSION = "0.1.0"
36
+ Fluent::Plugin.register_output("sidekiq", self)
37
+
38
+ config_param :redis_url, :string, :default => 'redis://localhost:6379'
39
+ config_param :redis_namespace, :string, :default => nil
40
+ config_param :max_batch_size, :integer, :default => 100
41
+
42
+ def format(tag, time, record)
43
+ [tag, time, record].to_msgpack
44
+ end
45
+
46
+ def formatted_to_msgpack_binary
47
+ true
48
+ end
32
49
 
33
- def write(chunk)
34
- 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']])
50
+ def redis_client
51
+ opts = {url: @redis_url, driver: :hiredis}
52
+ client = Redis.new(opts)
53
+ if @redis_namespace
54
+ require "redis/namespace"
55
+ Redis::Namespace.new(@redis_namespace, client)
40
56
  else
57
+ client
58
+ end
59
+ end
60
+
61
+ def write(chunk)
62
+ client = redis_client
63
+ scheduled_jobs = []
64
+ batches = []
65
+ manually_queue = []
66
+
67
+ chunk.msgpack_each do |tag, time, data|
68
+ at = data.delete('at')
69
+ if at
70
+ scheduled_jobs << [at, data['payload']]
71
+ else
72
+ payload = JSON.parse(data['payload'])
73
+ if payload['args'][0].kind_of?(Array) && payload['args'][0].all? { |a| a.kind_of?(Hash) }
74
+ queue = data.delete('queue')
75
+ klass = payload['class']
76
+
77
+ batch = batches.find { |b| b.acceptable_batch(queue, klass, payload['args'][0], max_batch_size) }
78
+ if !batch
79
+ batch = Batch.new(queue, klass)
80
+ batches << batch
81
+ end
82
+
83
+ batch.add_to_batch(payload)
84
+ else
85
+ # Manual queuing
86
+ manually_queue << data
87
+ end
88
+ end
89
+ end
90
+
91
+ if scheduled_jobs.length > 0
92
+ client.zadd('schedule', scheduled_jobs)
93
+ end
94
+ batches.each do |batch|
95
+ batch.enqueue(client)
96
+ end
97
+ manually_queue.each do |data|
41
98
  queue = data.delete('queue')
42
99
  client.sadd('queues', queue)
43
100
  client.lpush("queue:#{queue}", data['payload'])
metadata CHANGED
@@ -1,83 +1,83 @@
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.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Scarborough
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-21 00:00:00.000000000 Z
11
+ date: 2022-08-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: fluentd
14
+ name: redis
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '3.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '3.0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: redis
28
+ name: hiredis
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: hiredis
42
+ name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :runtime
47
+ version: '1.3'
48
+ type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: '1.3'
55
55
  - !ruby/object:Gem::Dependency
56
- name: bundler
56
+ name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: '1.3'
61
+ version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ~>
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: '1.3'
68
+ version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: rake
70
+ name: fluentd
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '>='
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '>='
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  description: Sidekiq plugin for Fluentd
@@ -87,9 +87,9 @@ executables: []
87
87
  extensions: []
88
88
  extra_rdoc_files: []
89
89
  files:
90
- - .gitignore
91
- - .ruby-gemset
92
- - .ruby-version
90
+ - ".gitignore"
91
+ - ".ruby-gemset"
92
+ - ".ruby-version"
93
93
  - Gemfile
94
94
  - LICENSE.txt
95
95
  - README.md
@@ -101,24 +101,23 @@ homepage: https://github.com/GoCarrot/fluent-plugin-sidekiq
101
101
  licenses:
102
102
  - MIT
103
103
  metadata: {}
104
- post_install_message:
104
+ post_install_message:
105
105
  rdoc_options: []
106
106
  require_paths:
107
107
  - lib
108
108
  required_ruby_version: !ruby/object:Gem::Requirement
109
109
  requirements:
110
- - - '>='
110
+ - - ">="
111
111
  - !ruby/object:Gem::Version
112
112
  version: '0'
113
113
  required_rubygems_version: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - '>='
115
+ - - ">="
116
116
  - !ruby/object:Gem::Version
117
117
  version: '0'
118
118
  requirements: []
119
- rubyforge_project:
120
- rubygems_version: 2.1.11
121
- signing_key:
119
+ rubygems_version: 3.2.3
120
+ signing_key:
122
121
  specification_version: 4
123
122
  summary: Sidekiq plugin for Fluentd
124
123
  test_files: []