beanworker 0.0.1 → 0.0.2
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.
- data/History.txt +7 -0
- data/Manifest.txt +2 -1
- data/README.rdoc +34 -0
- data/bin/beanworker +27 -0
- data/lib/beanworker/worker.rb +26 -0
- data/lib/beanworker.rb +1 -1
- metadata +11 -9
    
        data/History.txt
    CHANGED
    
    
    
        data/Manifest.txt
    CHANGED
    
    
    
        data/README.rdoc
    CHANGED
    
    | @@ -21,6 +21,40 @@ beanstalk-client | |
| 21 21 | 
             
            -P|--pid       - path to the directory, where pid-file(s) will be saved, default is current directory
         | 
| 22 22 |  | 
| 23 23 | 
             
            == DSL
         | 
| 24 | 
            +
            jobs.rb:
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                class SomeWorker
         | 
| 27 | 
            +
                  extend Beanworker::Worker
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                  class << self
         | 
| 30 | 
            +
                    def some_job(args={})
         | 
| 31 | 
            +
                      do_somethin_slow_with(args)
         | 
| 32 | 
            +
                    end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                    def another_job(args={})
         | 
| 35 | 
            +
                      do_something
         | 
| 36 | 
            +
                    end
         | 
| 37 | 
            +
                  end
         | 
| 38 | 
            +
                end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                class AnotherWorker
         | 
| 41 | 
            +
                  extend Beanworker::Worker
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                  class << self
         | 
| 44 | 
            +
                    def scheduled_job(args={})
         | 
| 45 | 
            +
                      do_somethin_slow_with(args)
         | 
| 46 | 
            +
                    end
         | 
| 47 | 
            +
                  end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                  schedule :scheduled_job, 2*24*3600, at: '04:30', timeout: 3600, { param1: 'some_value' }
         | 
| 50 | 
            +
                end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                SlowWorker.perform    2, :some_job.
         | 
| 53 | 
            +
                                         :another_job
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                AnotherWorker.perform 1, :scheduled_jov
         | 
| 56 | 
            +
             | 
| 57 | 
            +
            == API:
         | 
| 24 58 |  | 
| 25 59 | 
             
            TODO
         | 
| 26 60 |  | 
    
        data/bin/beanworker
    ADDED
    
    | @@ -0,0 +1,27 @@ | |
| 1 | 
            +
            #!/usr/bin/env ruby
         | 
| 2 | 
            +
            if ARGV[0] == '-h' || ARGV[0] == '--help'
         | 
| 3 | 
            +
              abort 'beanworker <jobs.rb> <host:port|path/to/file.yml> [-d|--daemonize] [-m|--monitor] [-P|--pid <path/to/pid/dir>]'
         | 
| 4 | 
            +
            end
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            if ARGV[0] == '-v' || ARGV[0] == '--version'
         | 
| 7 | 
            +
              abort Beanworker::VERSION
         | 
| 8 | 
            +
            end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            opts = {
         | 
| 11 | 
            +
                daemonize:  ARGV.include?('-d') || ARGV.include?('--daemonize'),
         | 
| 12 | 
            +
                monitor:    ARGV.include?('-m') || ARGV.include?('--monitor'),
         | 
| 13 | 
            +
                pid_dir:    (i = ARGV.index('-P') || ARGV.index('--pid')) ? File.expand_path(ARGV[i+1], Dir.pwd) : './',
         | 
| 14 | 
            +
                jobs_file:  File.expand_path(ARGV[0], Dir.pwd)
         | 
| 15 | 
            +
            }
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            conn_file = File.expand_path(ARGV[1], Dir.pwd)
         | 
| 18 | 
            +
            File.file?(conn_file) ? opts[:connection_file] = conn_file : opts[:connection_host] = ARGV[1]
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            trap('INT') do
         | 
| 21 | 
            +
              puts 'Exiting'
         | 
| 22 | 
            +
              exit
         | 
| 23 | 
            +
            end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
             | 
| 26 | 
            +
            require File.expand_path('../../lib/beanworker', __FILE__)
         | 
| 27 | 
            +
            Beanworker.run opts
         | 
    
        data/lib/beanworker/worker.rb
    CHANGED
    
    | @@ -1,5 +1,6 @@ | |
| 1 1 | 
             
            #coding: utf-8
         | 
| 2 2 | 
             
            require 'timeout'
         | 
| 3 | 
            +
            require 'time'
         | 
| 3 4 | 
             
            require 'pry'
         | 
| 4 5 |  | 
| 5 6 | 
             
            module Beanworker
         | 
| @@ -16,6 +17,22 @@ module Beanworker | |
| 16 17 | 
             
                  end
         | 
| 17 18 | 
             
                end
         | 
| 18 19 |  | 
| 20 | 
            +
                def schedule(name, frequency, opts={}, *args)
         | 
| 21 | 
            +
                  at = make_first_schedule(frequency, opts[:at])
         | 
| 22 | 
            +
                  timeout_secs = [opts[:timeout] || frequency, frequency-5].min
         | 
| 23 | 
            +
                  Thread.new do
         | 
| 24 | 
            +
                    loop do
         | 
| 25 | 
            +
                      sleep(at - Time.now)
         | 
| 26 | 
            +
                      Timeout.timeout timeout_secs do
         | 
| 27 | 
            +
                        self.send(name, *args)
         | 
| 28 | 
            +
                      end
         | 
| 29 | 
            +
                      at += frequency
         | 
| 30 | 
            +
                    end
         | 
| 31 | 
            +
                  end
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                private
         | 
| 35 | 
            +
             | 
| 19 36 | 
             
                def get_one_job(connection)
         | 
| 20 37 | 
             
                  job = connection.reserve
         | 
| 21 38 | 
             
                  name, args = job.stats['tube'].gsub('.', '_'), job.ybody
         | 
| @@ -47,5 +64,14 @@ module Beanworker | |
| 47 64 | 
             
                def fork_default(val)
         | 
| 48 65 | 
             
                  @need_fork = val
         | 
| 49 66 | 
             
                end
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                def make_first_schedule(frequency, at)
         | 
| 69 | 
            +
                  if at && (frequency % (24*3600) == 0)
         | 
| 70 | 
            +
                    t = Time.parse at
         | 
| 71 | 
            +
                    t > Time.now ? t : (t + 24*3600)
         | 
| 72 | 
            +
                  else
         | 
| 73 | 
            +
                    Time.now + frequency
         | 
| 74 | 
            +
                  end
         | 
| 75 | 
            +
                end
         | 
| 50 76 | 
             
              end
         | 
| 51 77 | 
             
            end
         | 
    
        data/lib/beanworker.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: beanworker
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.0. | 
| 4 | 
            +
              version: 0.0.2
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -9,11 +9,11 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2011-10- | 
| 12 | 
            +
            date: 2011-10-24 00:00:00.000000000Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: beanstalk-client
         | 
| 16 | 
            -
              requirement: & | 
| 16 | 
            +
              requirement: &15411580 !ruby/object:Gem::Requirement
         | 
| 17 17 | 
             
                none: false
         | 
| 18 18 | 
             
                requirements:
         | 
| 19 19 | 
             
                - - ! '>='
         | 
| @@ -21,10 +21,10 @@ dependencies: | |
| 21 21 | 
             
                    version: '0'
         | 
| 22 22 | 
             
              type: :runtime
         | 
| 23 23 | 
             
              prerelease: false
         | 
| 24 | 
            -
              version_requirements: * | 
| 24 | 
            +
              version_requirements: *15411580
         | 
| 25 25 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 26 26 | 
             
              name: beanqueue
         | 
| 27 | 
            -
              requirement: & | 
| 27 | 
            +
              requirement: &15410040 !ruby/object:Gem::Requirement
         | 
| 28 28 | 
             
                none: false
         | 
| 29 29 | 
             
                requirements:
         | 
| 30 30 | 
             
                - - ! '>='
         | 
| @@ -32,10 +32,10 @@ dependencies: | |
| 32 32 | 
             
                    version: 0.1.0
         | 
| 33 33 | 
             
              type: :runtime
         | 
| 34 34 | 
             
              prerelease: false
         | 
| 35 | 
            -
              version_requirements: * | 
| 35 | 
            +
              version_requirements: *15410040
         | 
| 36 36 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 37 37 | 
             
              name: hoe
         | 
| 38 | 
            -
              requirement: & | 
| 38 | 
            +
              requirement: &15407500 !ruby/object:Gem::Requirement
         | 
| 39 39 | 
             
                none: false
         | 
| 40 40 | 
             
                requirements:
         | 
| 41 41 | 
             
                - - ~>
         | 
| @@ -43,13 +43,14 @@ dependencies: | |
| 43 43 | 
             
                    version: '2.12'
         | 
| 44 44 | 
             
              type: :development
         | 
| 45 45 | 
             
              prerelease: false
         | 
| 46 | 
            -
              version_requirements: * | 
| 46 | 
            +
              version_requirements: *15407500
         | 
| 47 47 | 
             
            description: ! 'It is a worker-side Beanstalk-based job-queueing dispatcher
         | 
| 48 48 |  | 
| 49 49 | 
             
              This is a pre-release, I will complete tests and docs in couple days'
         | 
| 50 50 | 
             
            email:
         | 
| 51 51 | 
             
            - gearhead@it-primorye.ru
         | 
| 52 | 
            -
            executables: | 
| 52 | 
            +
            executables:
         | 
| 53 | 
            +
            - beanworker
         | 
| 53 54 | 
             
            extensions: []
         | 
| 54 55 | 
             
            extra_rdoc_files:
         | 
| 55 56 | 
             
            - History.txt
         | 
| @@ -61,6 +62,7 @@ files: | |
| 61 62 | 
             
            - Rakefile
         | 
| 62 63 | 
             
            - lib/beanworker.rb
         | 
| 63 64 | 
             
            - lib/beanworker/worker.rb
         | 
| 65 | 
            +
            - bin/beanworker
         | 
| 64 66 | 
             
            - test/test_beanworker.rb
         | 
| 65 67 | 
             
            - .gemtest
         | 
| 66 68 | 
             
            homepage: http://github.com/GearHead90/beanworker
         |