require_relative 'upperkut/version' require_relative 'upperkut/worker' require 'redis' # Public: Upperkut is a batch background processing tool for Ruby. # # Examples: # # 1) Create a Worker class and the define how to process the batch; # # class MyWorker # include Upperkut::Worker # # # This is optional # # setup_upperkut do |config| # # Define which redis instance you want to use # config.redis = Redis.new(url: ENV['ANOTHER_REDIS_INSTANCE_URL']) # # # Define the amount of items must be accumulated # config.batch_size = 2_000 # The default value is 1_000 # # # How frequent the Processor should hit redis looking for elegible # # batch. The default value is 5 seconds. You can also set the env # # UPPERKUT_POLLING_INTERVAL. # config.polling_interval = 4 # # # How long the Processor should wait in seconds to process batch # # even though the amount of items did not reached the batch_size. # config.max_wait = 300 # end # # def perform(batch_items) # SidekiqJobA.perform_async(batch_items) # SidekiqJobB.perform_async(batch_items) # # process_metrics(batch_items) # end # end # # 2) Start pushings items; # # Myworker.push_items( # [{'id' => SecureRandom.uuid, 'name' => 'Robert C Hall', 'action' => 'EMAIL_OPENNED'}] # ) # # 3) Start Upperkut; # # $ bundle exec upperkut -worker MyWorker --concurrency 10 # # 4) That's it :) module Upperkut class Configuration attr_accessor :batch_size, :strategy, :max_wait, :polling_interval def self.default new.tap do |config| config.batch_size = 1_000 config.max_wait = Integer(ENV['UPPERKUT_MAX_WAIT'] || 20) config.polling_interval = Integer(ENV['UPPERKUT_POLLING_INTERVAL'] || 5) end end def middlewares @middlewares ||= init_middleware_chain yield @middlewares if block_given? @middlewares end private def init_middleware_chain chain = Middleware::Chain.new if defined?(NewRelic::Agent) require_relative 'upperkut/middlewares/new_relic' chain.add(Upperkut::Middlewares::NewRelic) end if defined?(Rollbar::VERSION) require_relative 'upperkut/middlewares/rollbar' chain.add(Upperkut::Middlewares::Rollbar) end chain end end # Error class responsible to signal the shutdown process class Shutdown < StandardError; end end