status: add error? method
[upr.git] / lib / upr / monitor.rb
blob2ccb447962a6bb35e20b98b7ac97354187b38840
1 # -*- encoding: binary -*-
2 module Upr
4   # Keeps track of the status of all currently processing uploads
5   # This uses any {Moneta}[http://github.com/wycats/moneta]
6   # store to monitor upload progress.
7   #
8   # Usage (in config.ru with Moneta::Memory store):
9   #   require 'upr'
10   #   require 'moneta/memory'
11   #   use Upr, :backend => Upr::Monitor.new(Moneta::Memory.new)
12   #   run YourApplication.new
13   class Monitor < Struct.new(:moneta)
14     # nuke anything not read/updated in 10 seconds
15     OPT = { :expires_in => 10 }
17     def initialize(moneta_store = nil)
18       super
19       if moneta_store.nil?
20         require 'moneta/memory' # moneta does not autoload :<
21         self.moneta = Moneta::Memory.new
22       end
23     end
25     def start(upid, length)
26       moneta.store(upid, Status.new(0, length), OPT)
27     end
29     def read(upid)
30       moneta.update_key(upid, OPT)
31       moneta[upid]
32     end
34     def incr(upid, nr)
35       status = moneta[upid]
36       status.seen += nr
37       moneta.store(upid, status, OPT)
38     end
40     def finish(upid)
41       status = moneta[upid]
42       status.length ||= status.seen
43       status.seen = status.length
44       moneta.store(upid, status, OPT)
45     end
47   end
48 end