Sha256: 56bce071536bdefb2ade56189ce8529118df560d193f65391ba1bdff7a9f4734

Contents?: true

Size: 1.9 KB

Versions: 16

Compression:

Stored size: 1.9 KB

Contents

# encoding: utf-8

class AsyncProcess
  include SuckerPunch::Job
  attr_reader :handler
end

class ExampleProcess < AsyncProcess

  attr_reader :log, :error, :interrupted, :name, :id
  
  def self.name
    "THE NAME"
  end

  def perform(handler, other_params)
    @handler = handler
    @handler.total = params[:ids].count
    # loop
    # if error @handler.log("error no falta", e.message)
    # @handler.increase
    #
  end
end

class ProcessHandler

  attr_reader :log, :error, :interrupted, :name, :id, :performed, :total, :clazz
  attr_accessor :total

  def initialize(id, name, clazz)
    @id = id
    @total = 0
    @performed = 0
    @log = []
    @error = ""
    @interrupted = false
    @name = name
    @clazz = clazz
  end

  def progress
    return 0 if @total == 0
    (@performed.to_f / @total.to_f)*100.0
  end

  def increase
    @performed += 1
  end

  def log(severity, message)
    @log << "[#{severity}] #{Time.now} #{message}"
  end

  def interrupt
    @interrupted = true
  end

  def interrupted?
    @interrupted
  end

  def running?
    @total != @performed
  end
end

class ProcessManager
  include Singleton

  attr_reader :handlers

  def initialize
    @handlers = []
  end

  def find(clazz)
    @handlers.find { |handler| handler.clazz == clazz }
  end

  def run(*args)
    clean(args.first.to_s)
    if !running?(args.first.to_s)
      handler = ProcessHandler.new(rand(1..100000000), args.first.name, args.first.to_s)
      clazz = args.first
      args[0] = handler
      clazz.perform_async(*args)
      @handlers << handler
      handler
    else
      find(args.first.to_s)
    end
  end

  def finish(handler)
    @handlers -= [handler]
  end

  def clean(clazz)
    @handlers.select { |handler| handler.clazz == clazz }.each do |handler|
      handler.interrupt
      self.finish(handler)
    end
  end

  def running?(clazz)
    !@handlers.select { |handler| handler.clazz == clazz }.empty?
  end

end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
sinatra-hexacta-1.0.0 lib/sinatra/extensions/processmanager.rb
sinatra-hexacta-0.9.12 lib/sinatra/extensions/processmanager.rb
sinatra-hexacta-0.9.11 lib/sinatra/extensions/processmanager.rb
sinatra-hexacta-0.9.10 lib/sinatra/extensions/processmanager.rb
sinatra-hexacta-0.9.9 lib/sinatra/extensions/processmanager.rb
sinatra-hexacta-0.9.8 lib/sinatra/extensions/processmanager.rb
sinatra-hexacta-0.9.7 lib/sinatra/extensions/processmanager.rb
sinatra-hexacta-0.9.6 lib/sinatra/extensions/processmanager.rb
sinatra-hexacta-0.9.5 lib/sinatra/extensions/processmanager.rb
sinatra-hexacta-0.9.4 lib/sinatra/extensions/processmanager.rb
sinatra-hexacta-0.9.3 lib/sinatra/extensions/processmanager.rb
sinatra-hexacta-0.9.2 lib/sinatra/extensions/processmanager.rb
sinatra-hexacta-0.9.1 lib/sinatra/extensions/processmanager.rb
sinatra-hexacta-0.9.0 lib/sinatra/extensions/processmanager.rb
sinatra-hexacta-0.8.8 lib/sinatra/extensions/processmanager.rb
sinatra-hexacta-0.8.7 lib/sinatra/extensions/processmanager.rb