# -*- python -*- import __main__, logging, iso8601, time import dbagg, dbagg.scan from dbagg.web import SourceModel from twisted.web.woven import model, view, controller from twisted.internet import reactor class DownloaderModel(model.MethodModel): def initialize(self, *args, **kwargs): self.log = logging.getLogger("%s"%self.__class__) self.downloader = kwargs.get('downloader', None) def wmfactory_url(self, request): if self.downloader.source is not None: return self.downloader.source.url else: return "" class DelayedCallModel(model.MethodModel): def initialize(self, *args, **kwargs): self.log = logging.getLogger("%s"%self.__class__) self.call = kwargs.get('call', None) def wmfactory_func(self, request): return "%s" % self.call.func def wmfactory_kw(self, request): return "%s" % self.call.kw def wmfactory_time(self, request): return iso8601.ctime(self.call.getTime()) class StatusPage(dbagg.web.AggPage): templateFile = 'status.html.tmpl' def initialize(self, *args, **kwargs): self.log = logging.getLogger("%s"%self.__class__) self.app = kwargs['app'] self.sources = self.app.getServiceNamed('sources') self.items = self.app.getServiceNamed('items') self.scanner = self.app.getServiceNamed('source_scanner') def wmfactory_downloaders(self, request): return map(lambda x: DownloaderModel(downloader=x), self.scanner.downloaders) def wmfactory_delayedCalls(self, request): return map(lambda x: DelayedCallModel(call=x), reactor.getDelayedCalls()) def wmfactory_queuedSources(self, request): return map(lambda x: SourceModel(source=x, sources=self.sources, items=self.items), self.scanner.queue) resource = StatusPage(app=__main__.main_app)