unique_job 0.2.1 → 0.4.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
2
  SHA256:
3
- metadata.gz: b243c0d4dea6a7399aa0a41dd0f2164e60de12db4b964b49df4a1964c4ae35fc
4
- data.tar.gz: 2a29407adb437d8cf3111aed035a2da17bb6da1147d086ad5d039a1880629fe2
3
+ metadata.gz: 4cbff20f17ded63e7824299a196e4b46da0314658cfdebfb79566847905e7720
4
+ data.tar.gz: 1c7778662c1ab6f3e2e00ed4dec04886bc72159f09ec3a3e9a244168e19802f7
5
5
  SHA512:
6
- metadata.gz: 96526b267c18a5894593092aad3c9c455b657e3e81b251a8f55c77ec0c1f4034cc05f05797e0491c4ccaf51f985b1fb2b504af8dbe82a5a60d323905b4e63586
7
- data.tar.gz: 653dba5f3c033debbd67e68d7aa3a79c15b0ca03c7488cc6113edfbff57c3199e7abdfa669fc932519fcc636a16174b03c109663674b16f4efd7d37569f567ca
6
+ metadata.gz: 5ac698df69e9a40d980066ce2d37bc58af82da710ba82b7c91a99a7965651c1ea5b717c410b34e8bc0d6668543172814a63fcd714609d34eb39bfb44497da8d9
7
+ data.tar.gz: 9acb300b369ada327e4946af6bb4f1c11e2a23398e75209427310a8478ee8c7844ce56e805256ccafe93e6b5dedce33c0cfdc74bfce15a2fef3839223cb7f328
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.7.4
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- unique_job (0.2.1)
4
+ unique_job (0.4.0)
5
5
  redis
6
6
  sidekiq (> 6.0, < 7.0)
7
7
 
@@ -9,17 +9,14 @@ GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
11
  connection_pool (2.2.3)
12
- minitest (5.11.3)
13
- rack (2.2.2)
14
- rack-protection (2.0.8.1)
15
- rack
16
- rake (12.3.2)
17
- redis (4.2.1)
18
- sidekiq (6.0.7)
12
+ minitest (5.14.2)
13
+ rack (2.2.3)
14
+ rake (12.3.3)
15
+ redis (4.2.2)
16
+ sidekiq (6.1.2)
19
17
  connection_pool (>= 2.2.2)
20
18
  rack (~> 2.0)
21
- rack-protection (>= 2.0.0)
22
- redis (>= 4.1.0)
19
+ redis (>= 4.2.0)
23
20
 
24
21
  PLATFORMS
25
22
  ruby
@@ -4,6 +4,10 @@ module UniqueJob
4
4
  class ClientMiddleware
5
5
  include Util
6
6
 
7
+ def initialize(redis_options)
8
+ @redis_options = redis_options
9
+ end
10
+
7
11
  def call(worker_str, job, queue, redis_pool, &block)
8
12
  if job.has_key?('at')
9
13
  # perform_in or perform_at
@@ -40,8 +40,10 @@ module UniqueJob
40
40
  end
41
41
 
42
42
  class << self
43
+ attr_accessor :redis_options
44
+
43
45
  def redis
44
- @redis ||= Redis.client(ENV['REDIS_HOST'])
46
+ @redis ||= Redis.new(redis_options)
45
47
  end
46
48
  end
47
49
 
@@ -58,7 +60,7 @@ module UniqueJob
58
60
  super(*args, &blk)
59
61
  rescue => e
60
62
  elapsed = Time.now - start
61
- logger.warn "Rescue all errors in #{self.class}##{method_name} #{e.inspect} elapsed=#{sprintf("%.3f sec", elapsed)}"
63
+ logger.warn "[UniqueJob] Rescue all errors in #{self.class}##{method_name} #{e.inspect} elapsed=#{sprintf("%.3f sec", elapsed)}"
62
64
  logger.debug { e.backtrace.join("\n") }
63
65
  nil
64
66
  end
@@ -4,6 +4,10 @@ module UniqueJob
4
4
  class ServerMiddleware
5
5
  include Util
6
6
 
7
+ def initialize(redis_options)
8
+ @redis_options = redis_options
9
+ end
10
+
7
11
  def call(worker, msg, queue, &block)
8
12
  perform_if_unique(worker, msg['args'], &block)
9
13
  end
@@ -8,26 +8,27 @@ module UniqueJob
8
8
  def perform_if_unique(worker, args, &block)
9
9
  if worker.respond_to?(:unique_key)
10
10
  unique_key = worker.unique_key(*args)
11
+ logger.debug { "[UniqueJob] Calculate unique key worker=#{worker.class} key=#{unique_key}" }
11
12
 
12
13
  if unique_key.nil? || unique_key.to_s.empty?
13
- logger.warn { "#{self.class}##{__method__} Key is blank worker=#{worker.class} args=#{truncate(args.inspect)}" }
14
+ logger.warn { "[UniqueJob] Don't check a job with a blank key worker=#{worker.class} key=#{unique_key}" }
14
15
  yield
15
- elsif perform_unique_check(worker, args, unique_key.to_s)
16
+ elsif check_uniqueness(worker, unique_key.to_s)
16
17
  yield
18
+ else
19
+ logger.debug { "[UniqueJob] Duplicate job skipped worker=#{worker.class} key=#{unique_key}" }
20
+ perform_callback(worker, :after_skip, args)
21
+ nil
17
22
  end
18
23
  else
19
24
  yield
20
25
  end
21
26
  end
22
27
 
23
- def perform_unique_check(worker, args, unique_key)
28
+ def check_uniqueness(worker, unique_key)
24
29
  history = job_history(worker)
25
30
 
26
31
  if history.exists?(unique_key)
27
- logger.info { "#{self.class}##{__method__} Skip duplicate job for #{history.ttl} seconds, remaining #{history.ttl(unique_key)} seconds worker=#{worker.class} args=#{truncate(args.inspect)} key=#{unique_key}" }
28
-
29
- perform_callback(worker, :after_skip, args)
30
-
31
32
  false
32
33
  else
33
34
  history.add(unique_key)
@@ -37,6 +38,7 @@ module UniqueJob
37
38
 
38
39
  def job_history(worker)
39
40
  ttl = worker.respond_to?(:unique_in) ? worker.unique_in : 3600
41
+ JobHistory.redis_options = @redis_options
40
42
  JobHistory.new(worker.class, self.class, ttl)
41
43
  end
42
44
 
@@ -59,8 +61,7 @@ module UniqueJob
59
61
  worker.send(callback_name, *args)
60
62
  end
61
63
  rescue ArgumentError => e
62
- message = "The number of parameters of the callback method (#{parameters.size}) is not the same as the number of arguments (#{args.size})"
63
- raise ArgumentError.new("#{self.class}:#{worker.class} #{message} callback_name=#{callback_name} args=#{args.inspect} parameters=#{parameters.inspect}")
64
+ raise ArgumentError.new("[UniqueJob] Invalid parameters callback=#{callback_name}")
64
65
  end
65
66
  end
66
67
  end
@@ -1,3 +1,3 @@
1
1
  module UniqueJob
2
- VERSION = "0.2.1"
2
+ VERSION = "0.4.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unique_job
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ts-3156
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-08-18 00:00:00.000000000 Z
11
+ date: 2021-11-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sidekiq
@@ -52,6 +52,7 @@ extensions: []
52
52
  extra_rdoc_files: []
53
53
  files:
54
54
  - ".gitignore"
55
+ - ".ruby-version"
55
56
  - ".travis.yml"
56
57
  - CODE_OF_CONDUCT.md
57
58
  - Gemfile
@@ -91,8 +92,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
91
92
  - !ruby/object:Gem::Version
92
93
  version: '0'
93
94
  requirements: []
94
- rubyforge_project:
95
- rubygems_version: 2.7.6
95
+ rubygems_version: 3.1.6
96
96
  signing_key:
97
97
  specification_version: 4
98
98
  summary: Set a uniqueness to Sidekiq jobs