Sha256: c76501e36eeadf90c7f6b1d7d0682f919b14f23f2dd6696b4843a5e5b2a27a55
Contents?: true
Size: 1.86 KB
Versions: 22
Compression:
Stored size: 1.86 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 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.running? }.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
22 entries across 22 versions & 1 rubygems