upperkut 0.7.0 → 0.7.1

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
  SHA256:
3
- metadata.gz: 5c18a5b6516fc334c80ee3ccc35f1dab755490799581ff3bf50c6c3bcb45188c
4
- data.tar.gz: d7b6ed2df27d4275666043cd9692cac287a0d62f5a5ca16216ebeba093838a29
3
+ metadata.gz: f8a422257ff9efd3c1cc0f5cc8ca940c31b77df381a549ca1ad9e0fd59919eba
4
+ data.tar.gz: 3e6bfc18b1c2890a033dc5b301e4009eeeccdd026ae6c040be5f8d7f551bd8b5
5
5
  SHA512:
6
- metadata.gz: '09eacd8265373fd91432a997ac41e3b6ff120203476b3912d5bc7ccaa24dfb779d3f0817c10d4769782df1c7f563b2371eb6dfeab155a2c7442f9c3c51a75e2b'
7
- data.tar.gz: 51dde9c9d81ddd79e81e220d2f4f38443778fd5026223b5330da74fde567b2310d67f3cdacf1dedd489730ab664fcb030a8404122f70be62f0a17ef108d4167a
6
+ metadata.gz: 1d8b525f86a878faae9cd8297c75120c1a883b9b6652f6f39669fa6c428055966ae151b1de7115d5e54c5e593fe5e15df499985757e1ea619298aa3098dd71b7
7
+ data.tar.gz: 403e4c6cdd0da351bedbd0daeddf96ab8f06269ce3d09a4468c0c996a6a22b55a9af7d3f75fd7aafdca9e867b4ddffc83e0bb55cd24b05519e654421c2df7f8c
@@ -10,6 +10,8 @@ jobs:
10
10
  environment:
11
11
  CC_TEST_REPORTER_ID: 03ab83a772148a577d29d4acf438d7ebdc95c632224122d0ba8dbb291eedebe6
12
12
  COVERAGE: true
13
+ REDIS_URL: redis://localhost:6379
14
+ - image: redis:5.0
13
15
  steps:
14
16
  - checkout
15
17
 
@@ -0,0 +1,15 @@
1
+ version: "2"
2
+ plugins:
3
+ brakeman:
4
+ enabled: false
5
+ eslint:
6
+ enabled: false
7
+ csslint:
8
+ enabled: false
9
+ rubocop:
10
+ enabled: true
11
+ channel: rubocop-0-63
12
+ reek:
13
+ enabled: true
14
+ bundler-audit:
15
+ enabled: true
@@ -2,6 +2,13 @@
2
2
 
3
3
  0.7.x
4
4
  ---------
5
+ - Added Datahog middleware #42 by @gabriel-augusto
6
+ - Added redis to CI #40 by #henrich-m
7
+ - Specs improvements #34 and #35, #37 by @gabriel-augusto
8
+ - Enable Rubocop #32 by @henrich-m
9
+ - Added codeclimate #31 by @henrich-m
10
+
11
+
5
12
  - Extract Buffered Queue behavior to its own strategy #29
6
13
 
7
14
  0.6.x
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- upperkut (0.7.0)
4
+ upperkut (0.7.1)
5
5
  connection_pool (~> 2.2, >= 2.2.2)
6
6
  redis (>= 3.3.3, < 5)
7
7
 
data/README.md CHANGED
@@ -68,7 +68,7 @@ Examples:
68
68
 
69
69
  ## Development
70
70
 
71
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
71
+ After checking out the repo, run `bundle install` to install dependencies. Then, run `bundle exec rspec` to run the tests.
72
72
 
73
73
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
74
74
 
@@ -5,7 +5,7 @@ class MyWorker
5
5
 
6
6
  def perform(items)
7
7
  puts 'starting performing'
8
- exec_time = rand(9000..50000)
8
+ exec_time = rand(9000..50_000)
9
9
  sleep (exec_time.to_f / 1000.to_f)
10
10
  puts "performed #{items.size} items in #{exec_time.to_f / 1000.to_f} ms"
11
11
  end
@@ -34,8 +34,8 @@ class WithMiddlewares
34
34
  end
35
35
  end
36
36
 
37
- def perform(items)
38
- puts "executing........."
37
+ def perform(_items)
38
+ puts 'executing.........'
39
39
  exec_time = rand(80..200)
40
40
  sleep (exec_time.to_f / 1000.to_f)
41
41
  end
@@ -89,9 +89,13 @@ module Upperkut
89
89
  chain.add(Upperkut::Middlewares::Rollbar)
90
90
  end
91
91
 
92
+ if defined?(Datadog)
93
+ require_relative 'upperkut/middlewares/datadog'
94
+ chain.add(Upperkut::Middlewares::Datadog)
95
+ end
96
+
92
97
  chain
93
98
  end
94
-
95
99
  end
96
100
 
97
101
  # Error class responsible to signal the shutdown process
@@ -20,7 +20,6 @@ module Upperkut
20
20
  @worker.server_middlewares.invoke(@worker, items) do
21
21
  worker_instance.perform(items_body.dup)
22
22
  end
23
-
24
23
  rescue Exception => ex
25
24
  @worker.push_items(items_body)
26
25
 
@@ -18,7 +18,7 @@ module Upperkut
18
18
  require 'rails'
19
19
  if ::Rails::VERSION::MAJOR == 4
20
20
  require File.expand_path("#{@options[:require]}/config/application.rb")
21
- ::Rails::Application.initializer "upperkut.eager_load" do
21
+ ::Rails::Application.initializer 'upperkut.eager_load' do
22
22
  ::Rails.application.config.eager_load = true
23
23
  end
24
24
 
@@ -4,9 +4,8 @@ require 'socket'
4
4
 
5
5
  module Upperkut
6
6
  module Logging
7
-
8
7
  class DefaultFormatter < Logger::Formatter
9
- def call(severity, time, program_name, message)
8
+ def call(severity, time, _program_name, message)
10
9
  "upperkut: #{time.utc.iso8601(3)} hostname=#{Socket.gethostname} "\
11
10
  "pid=#{::Process.pid} severity=#{severity} #{format_message(message)}\n"
12
11
  end
@@ -16,11 +15,10 @@ module Upperkut
16
15
  def format_message(message)
17
16
  return "msg=#{message} " unless message.is_a?(Hash)
18
17
 
19
- message.each_with_object('') do |(k,v), memo|
18
+ message.each_with_object('') do |(k, v), memo|
20
19
  memo << "#{k}=#{v}\s"
21
20
  memo
22
21
  end
23
-
24
22
  end
25
23
  end
26
24
 
@@ -9,6 +9,7 @@ module Upperkut
9
9
 
10
10
  def add(item)
11
11
  return @items if @items.include?(item)
12
+
12
13
  @items << item
13
14
  end
14
15
 
@@ -0,0 +1,11 @@
1
+ module Upperkut
2
+ module Middlewares
3
+ class Datadog
4
+ def call(worker, _items)
5
+ ::Datadog.tracer.trace(worker.name) do
6
+ yield
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -14,13 +14,12 @@ module Upperkut
14
14
  def handle_exception(e, worker, items)
15
15
  scope = {
16
16
  framework: "Upperkut #{::Upperkut::VERSION}",
17
- request: { params: { items_size: items.size } },
18
- context: worker.name
17
+ request: { params: { items_size: items.size } },
18
+ context: worker.name
19
19
  }
20
20
 
21
- ::Rollbar.scope(scope).error(e, :use_exception_level_filters => true)
21
+ ::Rollbar.scope(scope).error(e, use_exception_level_filters: true)
22
22
  end
23
23
  end
24
24
  end
25
25
  end
26
-
@@ -28,6 +28,7 @@ module Upperkut
28
28
 
29
29
  def kill
30
30
  return unless @thread
31
+
31
32
  @thread.raise Upperkut::Shutdown
32
33
  @thread.value # wait
33
34
  end
@@ -3,14 +3,13 @@ require 'redis'
3
3
 
4
4
  module Upperkut
5
5
  class RedisPool
6
-
7
6
  DEFAULT_OPTIONS = {
8
- pool_timeout: 1, # pool related option
9
- size: 2, # pool related option
10
- connect_timeout: 0.2,
11
- read_timeout: 5.0,
12
- write_timeout: 0.5,
13
- url: ENV['REDIS_URL'],
7
+ pool_timeout: 1, # pool related option
8
+ size: 2, # pool related option
9
+ connect_timeout: 0.2,
10
+ read_timeout: 5.0,
11
+ write_timeout: 0.5,
12
+ url: ENV['REDIS_URL']
14
13
  }.freeze
15
14
 
16
15
  def initialize(options)
@@ -22,7 +21,7 @@ module Upperkut
22
21
  end
23
22
 
24
23
  def create
25
- ConnectionPool.new(:timeout => @pool_timeout, :size => @size) do
24
+ ConnectionPool.new(timeout: @pool_timeout, size: @size) do
26
25
  Redis.new(@options)
27
26
  end
28
27
  end
@@ -6,7 +6,7 @@ module Upperkut
6
6
  # items - The Array of items do be inserted.
7
7
  #
8
8
  # Returns true when success, raise when error.
9
- def push_items(items = [])
9
+ def push_items(_items = [])
10
10
  raise NotImplementedError
11
11
  end
12
12
 
@@ -15,7 +15,7 @@ module Upperkut
15
15
  # batch_size: # of items to be retrieved.
16
16
  #
17
17
  # Returns an Array containing events as hash.
18
- def fetch_items(batch_size)
18
+ def fetch_items(_batch_size)
19
19
  raise NotImplementedError
20
20
  end
21
21
 
@@ -10,7 +10,7 @@ module Upperkut
10
10
  attr_reader :options
11
11
 
12
12
  def initialize(worker, options = {})
13
- @options = options
13
+ @options = options
14
14
  @redis_options = options.fetch(:redis, {})
15
15
  @redis_pool = setup_redis_pool
16
16
  @worker = worker
@@ -30,6 +30,7 @@ module Upperkut
30
30
  def push_items(items = [])
31
31
  items = [items] if items.is_a?(Hash)
32
32
  return false if items.empty?
33
+
33
34
  redis do |conn|
34
35
  conn.rpush(key, encode_json_items(items))
35
36
  end
@@ -56,7 +57,7 @@ module Upperkut
56
57
  def metrics
57
58
  {
58
59
  'latency' => latency,
59
- 'size' => size
60
+ 'size' => size
60
61
  }
61
62
  end
62
63
 
@@ -76,6 +77,7 @@ module Upperkut
76
77
 
77
78
  def fulfill_condition?(buff_size)
78
79
  return false if buff_size.zero?
80
+
79
81
  buff_size >= @batch_size || @waiting_time >= @max_wait
80
82
  end
81
83
 
@@ -89,19 +91,20 @@ module Upperkut
89
91
  item = redis { |conn| conn.lrange(key, 0, 0) }
90
92
  item = decode_json_items(item).first
91
93
  return 0 unless item
94
+
92
95
  now = Time.now.to_f
93
96
  now - item.fetch('enqueued_at', Time.now).to_f
94
97
  end
95
98
 
96
-
97
-
98
99
  def setup_redis_pool
99
100
  return @redis_options if @redis_options.is_a?(ConnectionPool)
101
+
100
102
  RedisPool.new(options.fetch(:redis, {})).create
101
103
  end
102
104
 
103
105
  def redis
104
- raise ArgumentError, "requires a block" unless block_given?
106
+ raise ArgumentError, 'requires a block' unless block_given?
107
+
105
108
  @redis_pool.with do |conn|
106
109
  yield conn
107
110
  end
@@ -16,7 +16,7 @@ module Upperkut
16
16
  items = items.collect do |i|
17
17
  JSON.generate(
18
18
  'enqueued_at' => Time.now.to_i,
19
- 'body' => i
19
+ 'body' => i
20
20
  )
21
21
  end
22
22
  end
@@ -1,3 +1,3 @@
1
1
  module Upperkut
2
- VERSION = '0.7.0'.freeze
2
+ VERSION = '0.7.1'.freeze
3
3
  end
@@ -1,4 +1,3 @@
1
-
2
1
  lib = File.expand_path('lib', __dir__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
3
  require 'upperkut/version'
@@ -22,8 +21,8 @@ Gem::Specification.new do |spec|
22
21
 
23
22
  spec.required_ruby_version = '>= 2.2.2'
24
23
 
25
- spec.add_dependency 'redis', '>= 3.3.3', '< 5'
26
24
  spec.add_dependency 'connection_pool', '~> 2.2', '>= 2.2.2'
25
+ spec.add_dependency 'redis', '>= 3.3.3', '< 5'
27
26
  spec.add_development_dependency 'bundler', '~> 1.16'
28
27
  spec.add_development_dependency 'rake', '~> 10.0'
29
28
  spec.add_development_dependency 'rspec', '~> 3.0'
metadata CHANGED
@@ -1,55 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: upperkut
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nando Sousa
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-04-02 00:00:00.000000000 Z
11
+ date: 2019-04-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: redis
14
+ name: connection_pool
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 3.3.3
20
- - - "<"
19
+ version: '2.2'
20
+ - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: '5'
22
+ version: 2.2.2
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - ">="
27
+ - - "~>"
28
28
  - !ruby/object:Gem::Version
29
- version: 3.3.3
30
- - - "<"
29
+ version: '2.2'
30
+ - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: '5'
32
+ version: 2.2.2
33
33
  - !ruby/object:Gem::Dependency
34
- name: connection_pool
34
+ name: redis
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - "~>"
38
- - !ruby/object:Gem::Version
39
- version: '2.2'
40
37
  - - ">="
41
38
  - !ruby/object:Gem::Version
42
- version: 2.2.2
39
+ version: 3.3.3
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '5'
43
43
  type: :runtime
44
44
  prerelease: false
45
45
  version_requirements: !ruby/object:Gem::Requirement
46
46
  requirements:
47
- - - "~>"
48
- - !ruby/object:Gem::Version
49
- version: '2.2'
50
47
  - - ">="
51
48
  - !ruby/object:Gem::Version
52
- version: 2.2.2
49
+ version: 3.3.3
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '5'
53
53
  - !ruby/object:Gem::Dependency
54
54
  name: bundler
55
55
  requirement: !ruby/object:Gem::Requirement
@@ -101,6 +101,7 @@ extensions: []
101
101
  extra_rdoc_files: []
102
102
  files:
103
103
  - ".circleci/config.yml"
104
+ - ".codeclimate.yml"
104
105
  - ".gitignore"
105
106
  - ".rspec"
106
107
  - CHANGELOG.md
@@ -120,6 +121,7 @@ files:
120
121
  - lib/upperkut/logging.rb
121
122
  - lib/upperkut/manager.rb
122
123
  - lib/upperkut/middleware.rb
124
+ - lib/upperkut/middlewares/datadog.rb
123
125
  - lib/upperkut/middlewares/new_relic.rb
124
126
  - lib/upperkut/middlewares/rollbar.rb
125
127
  - lib/upperkut/processor.rb