insque 0.4.3 → 0.5.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 +4 -4
- data/insque.gemspec +3 -2
- data/lib/insque/version.rb +1 -1
- data/lib/insque.rb +57 -23
- data/lib/tasks/insque.rake +2 -0
- metadata +11 -6
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: db352d3e0afe2bfd0243f0e9cd15a905226ae4fe
         | 
| 4 | 
            +
              data.tar.gz: 9ea0abcc665e264a0c51d1be4a20a9ba3e8d1ce7
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: cf57b0954f22ce0f5628df247942a732af6b4e61fab2b85667651107408091703f7ec733eaed175cd9f54911ca665a5c6d9dffebb55c06beb7c0de9a6c129970
         | 
| 7 | 
            +
              data.tar.gz: 2c2d5ae8ba1839d06b2f50519754c38ec2476178a88805570b099f32c63c95edcd4d3e91be05c30e4ed183edd862052b1b64cc8593281021419372b7dcd53663
         | 
    
        data/insque.gemspec
    CHANGED
    
    | @@ -5,8 +5,9 @@ Gem::Specification.new do |gem| | |
| 5 5 | 
             
              gem.authors       = ["gropher"]
         | 
| 6 6 | 
             
              gem.email         = ["grophen@gmail.com"]
         | 
| 7 7 | 
             
              gem.description   = "Instant queue. Background processing and message driven communication tool. Faster and simplier alternative to Resque."
         | 
| 8 | 
            -
              gem.summary       = " | 
| 8 | 
            +
              gem.summary       = "Redis-based multi-threaded queue"
         | 
| 9 9 | 
             
              gem.homepage      = "https://github.com/Gropher/Insque"
         | 
| 10 | 
            +
              gem.licenses      = ['MIT']
         | 
| 10 11 |  | 
| 11 12 | 
             
              gem.files         = `git ls-files`.split($\)
         | 
| 12 13 | 
             
              gem.executables   = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
         | 
| @@ -15,5 +16,5 @@ Gem::Specification.new do |gem| | |
| 15 16 | 
             
              gem.require_paths = ["lib"]
         | 
| 16 17 | 
             
              gem.version       = Insque::VERSION
         | 
| 17 18 |  | 
| 18 | 
            -
              gem.add_dependency('redis', '>= 2.2.2' | 
| 19 | 
            +
              gem.add_dependency('redis', '~> 2.2', '>= 2.2.2')
         | 
| 19 20 | 
             
            end
         | 
    
        data/lib/insque/version.rb
    CHANGED
    
    
    
        data/lib/insque.rb
    CHANGED
    
    | @@ -7,16 +7,33 @@ module Insque | |
| 7 7 | 
             
                @debug = debug
         | 
| 8 8 | 
             
              end
         | 
| 9 9 |  | 
| 10 | 
            +
              def self.redis= redis
         | 
| 11 | 
            +
                @redis = redis
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              def self.redis
         | 
| 15 | 
            +
                @redis
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
              def self.redis_class= klass
         | 
| 19 | 
            +
                @redis_class = klass
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              def self.redis_config
         | 
| 23 | 
            +
                @redis_config
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
             | 
| 10 26 | 
             
              def self.redis_config= redis
         | 
| 11 27 | 
             
                @redis_config = redis
         | 
| 12 | 
            -
                @redis =  | 
| 13 | 
            -
                @redis.select 7
         | 
| 28 | 
            +
                @redis = self.create_redis_connection
         | 
| 14 29 | 
             
              end
         | 
| 15 30 |  | 
| 16 31 | 
             
              def self.sender= sender
         | 
| 17 32 | 
             
                @sender = sender
         | 
| 18 | 
            -
                @inbox = " | 
| 19 | 
            -
                @processing = " | 
| 33 | 
            +
                @inbox = "{insque}inbox_#{sender}"
         | 
| 34 | 
            +
                @processing = "{insque}processing_#{sender}"
         | 
| 35 | 
            +
                @slow_inbox = "{insque}slow_inbox_#{sender}"
         | 
| 36 | 
            +
                @slow_processing = "{insque}slow_processing_#{sender}"
         | 
| 20 37 | 
             
                create_send_later_handler
         | 
| 21 38 | 
             
              end
         | 
| 22 39 |  | 
| @@ -24,9 +41,11 @@ module Insque | |
| 24 41 | 
             
                keys = []
         | 
| 25 42 | 
             
                case recipient
         | 
| 26 43 | 
             
                when :any
         | 
| 27 | 
            -
                  keys = @redis.smembers ' | 
| 44 | 
            +
                  keys = @redis.smembers '{insque}inboxes'
         | 
| 28 45 | 
             
                when :self
         | 
| 29 46 | 
             
                  keys = [@inbox]
         | 
| 47 | 
            +
                when :slow
         | 
| 48 | 
            +
                  keys = [@slow_inbox]
         | 
| 30 49 | 
             
                else
         | 
| 31 50 | 
             
                  keys = recipient.is_a?(Array) ? recipient : [recipient]
         | 
| 32 51 | 
             
                end
         | 
| @@ -37,14 +56,29 @@ module Insque | |
| 37 56 | 
             
                end
         | 
| 38 57 | 
             
              end
         | 
| 39 58 |  | 
| 40 | 
            -
              def self.listen worker_name=''
         | 
| 41 | 
            -
                redis  | 
| 42 | 
            -
                redis. | 
| 59 | 
            +
              def self.listen worker_name='', redis=nil
         | 
| 60 | 
            +
                redis ||= create_redis_connection
         | 
| 61 | 
            +
                redis.sadd '{insque}inboxes', @inbox
         | 
| 62 | 
            +
                do_listen @inbox, @processing, redis, worker_name
         | 
| 63 | 
            +
              end
         | 
| 43 64 |  | 
| 44 | 
            -
             | 
| 45 | 
            -
                 | 
| 65 | 
            +
              def self.slow_listen worker_name='', redis=nil
         | 
| 66 | 
            +
                do_listen @slow_inbox, @slow_processing, (redis || create_redis_connection), worker_name
         | 
| 67 | 
            +
              end
         | 
| 68 | 
            +
             | 
| 69 | 
            +
              def self.janitor redis=nil
         | 
| 70 | 
            +
                real_janitor @inbox, @processing, (redis || create_redis_connection)
         | 
| 71 | 
            +
              end
         | 
| 72 | 
            +
             | 
| 73 | 
            +
              def self.slow_janitor redis=nil
         | 
| 74 | 
            +
                real_janitor @slow_inbox, @slow_processing, (redis || create_redis_connection)
         | 
| 75 | 
            +
              end
         | 
| 76 | 
            +
             | 
| 77 | 
            +
            private
         | 
| 78 | 
            +
              def self.do_listen inbox, processing, redis, worker_name
         | 
| 79 | 
            +
                log "#{worker_name} START LISTENING #{inbox}"
         | 
| 46 80 | 
             
                loop do
         | 
| 47 | 
            -
                  message = redis.brpoplpush( | 
| 81 | 
            +
                  message = redis.brpoplpush(inbox, processing, 0)
         | 
| 48 82 | 
             
                  log "#{worker_name} RECEIVING: #{message}" if @debug
         | 
| 49 83 | 
             
                  begin
         | 
| 50 84 | 
             
                    parsed_message = JSON.parse message
         | 
| @@ -54,20 +88,17 @@ module Insque | |
| 54 88 | 
             
                    log e.inspect
         | 
| 55 89 | 
             
                    log e.backtrace
         | 
| 56 90 | 
             
                  end
         | 
| 57 | 
            -
                  redis.lrem  | 
| 91 | 
            +
                  redis.lrem processing, 0, message
         | 
| 58 92 | 
             
                end
         | 
| 59 93 | 
             
              end
         | 
| 60 94 |  | 
| 61 | 
            -
              def self. | 
| 62 | 
            -
                redis = Redis.new @redis_config
         | 
| 63 | 
            -
                redis.select 7
         | 
| 64 | 
            -
             | 
| 95 | 
            +
              def self.real_janitor inbox, processing, redis
         | 
| 65 96 | 
             
                loop do
         | 
| 66 | 
            -
                  redis.watch  | 
| 97 | 
            +
                  redis.watch processing
         | 
| 67 98 | 
             
                  errors = []
         | 
| 68 99 | 
             
                  restart = []
         | 
| 69 100 | 
             
                  delete = []
         | 
| 70 | 
            -
                  redis.lrange( | 
| 101 | 
            +
                  redis.lrange(processing, 0, -1).each do |m|
         | 
| 71 102 | 
             
                    begin
         | 
| 72 103 | 
             
                      parsed_message = JSON.parse(m)
         | 
| 73 104 | 
             
                      if parsed_message['restarted_at'] && DateTime.parse(parsed_message['restarted_at']) < 1.hour.ago.utc
         | 
| @@ -82,8 +113,8 @@ module Insque | |
| 82 113 | 
             
                    end
         | 
| 83 114 | 
             
                  end
         | 
| 84 115 | 
             
                  result = redis.multi do |r|
         | 
| 85 | 
            -
                    restart.each {|m| r.lpush  | 
| 86 | 
            -
                    delete.each {|m| r.lrem  | 
| 116 | 
            +
                    restart.each {|m| r.lpush inbox, m.to_json }
         | 
| 117 | 
            +
                    delete.each {|m| r.lrem processing, 0, m }
         | 
| 87 118 | 
             
                  end
         | 
| 88 119 | 
             
                  if result
         | 
| 89 120 | 
             
                    errors.each {|m| log "ERROR: #{m.to_json}" }
         | 
| @@ -96,7 +127,10 @@ module Insque | |
| 96 127 | 
             
                end
         | 
| 97 128 | 
             
              end
         | 
| 98 129 |  | 
| 99 | 
            -
             | 
| 130 | 
            +
              def self.create_redis_connection
         | 
| 131 | 
            +
                (@redis_class || Redis).new @redis_config
         | 
| 132 | 
            +
              end 
         | 
| 133 | 
            +
             | 
| 100 134 | 
             
              def self.log message
         | 
| 101 135 | 
             
                print "#{Time.now.utc} #{message}\n"
         | 
| 102 136 | 
             
                STDOUT.flush if @debug
         | 
| @@ -112,14 +146,14 @@ end | |
| 112 146 | 
             
            if defined?(ActiveRecord::Base)
         | 
| 113 147 | 
             
              class ActiveRecord::Base
         | 
| 114 148 | 
             
                def send_later(method, *args)
         | 
| 115 | 
            -
                  Insque.broadcast :send_later, {:class => self.class.name, :id => id, :method => method, :args => args }, : | 
| 149 | 
            +
                  Insque.broadcast :send_later, {:class => self.class.name, :id => id, :method => method, :args => args }, :slow
         | 
| 116 150 | 
             
                end
         | 
| 117 151 | 
             
                def self.acts_as_insque_crud(*args)
         | 
| 118 152 | 
             
                  options = args.extract_options!
         | 
| 119 153 | 
             
                  excluded = (options[:exclude] || []).map(&:to_s)
         | 
| 120 154 |  | 
| 121 155 | 
             
                  set_callback :commit, :after do
         | 
| 122 | 
            -
                    action = [:create, :update, :destroy].map {|a| a if  | 
| 156 | 
            +
                    action = [:create, :update, :destroy].map {|a| a if transaction_include_any_action?([a]) }.compact.first
         | 
| 123 157 | 
             
                    params = self.serializable_hash(options).delete_if {|key| (['created_at', 'updated_at'] + excluded).include? key}
         | 
| 124 158 | 
             
                    Insque.broadcast :"#{self.class.to_s.underscore}_#{action}", params
         | 
| 125 159 | 
             
                  end
         | 
    
        data/lib/tasks/insque.rake
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,19 +1,22 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: insque
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.5.1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - gropher
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2017-01-10 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: redis
         | 
| 15 15 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 16 16 | 
             
                requirements:
         | 
| 17 | 
            +
                - - "~>"
         | 
| 18 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            +
                    version: '2.2'
         | 
| 17 20 | 
             
                - - ">="
         | 
| 18 21 | 
             
                  - !ruby/object:Gem::Version
         | 
| 19 22 | 
             
                    version: 2.2.2
         | 
| @@ -21,6 +24,9 @@ dependencies: | |
| 21 24 | 
             
              prerelease: false
         | 
| 22 25 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 26 | 
             
                requirements:
         | 
| 27 | 
            +
                - - "~>"
         | 
| 28 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 29 | 
            +
                    version: '2.2'
         | 
| 24 30 | 
             
                - - ">="
         | 
| 25 31 | 
             
                  - !ruby/object:Gem::Version
         | 
| 26 32 | 
             
                    version: 2.2.2
         | 
| @@ -46,7 +52,8 @@ files: | |
| 46 52 | 
             
            - lib/insque/version.rb
         | 
| 47 53 | 
             
            - lib/tasks/insque.rake
         | 
| 48 54 | 
             
            homepage: https://github.com/Gropher/Insque
         | 
| 49 | 
            -
            licenses: | 
| 55 | 
            +
            licenses:
         | 
| 56 | 
            +
            - MIT
         | 
| 50 57 | 
             
            metadata: {}
         | 
| 51 58 | 
             
            post_install_message: 
         | 
| 52 59 | 
             
            rdoc_options: []
         | 
| @@ -67,7 +74,5 @@ rubyforge_project: | |
| 67 74 | 
             
            rubygems_version: 2.5.1
         | 
| 68 75 | 
             
            signing_key: 
         | 
| 69 76 | 
             
            specification_version: 4
         | 
| 70 | 
            -
            summary:  | 
| 71 | 
            -
              Faster and simplier alternative to Resque.
         | 
| 77 | 
            +
            summary: Redis-based multi-threaded queue
         | 
| 72 78 | 
             
            test_files: []
         | 
| 73 | 
            -
            has_rdoc: 
         |