diff --git a/agent/__init__.py b/agent/__init__.py index c102675..7b437e7 100644 --- a/agent/__init__.py +++ b/agent/__init__.py @@ -4,4 +4,6 @@ $Id$ # register default adapters -from cybertools.agent.base import agent, control, job, log, schedule +#from cybertools.agent.base import agent, control, job, log, schedule +from cybertools.agent.base import agent, control, job, log +from cybertools.agent.core import schedule \ No newline at end of file diff --git a/agent/base/control.py b/agent/base/control.py index 726d019..01d9281 100644 --- a/agent/base/control.py +++ b/agent/base/control.py @@ -48,6 +48,7 @@ class Controller(object): class SampleController(Controller): + def _getAgents(self): return [AgentSpecification('sample01', 'sample')] @@ -65,6 +66,7 @@ class AgentSpecification(object): class JobSpecification(object): + startTime = None diff --git a/agent/base/job.py b/agent/base/job.py index 3b1ce35..64c130c 100644 --- a/agent/base/job.py +++ b/agent/base/job.py @@ -24,7 +24,8 @@ $Id$ from zope.interface import implements -from cybertools.agent.base.schedule import Scheduler +#from cybertools.agent.base.schedule import Scheduler +from cybertools.agent.core.schedule import Scheduler from cybertools.agent.components import jobs from cybertools.agent.interfaces import IScheduledJob @@ -59,3 +60,4 @@ class Job(object): newJob.successors = [s.copy() for s in self.successors] jobs.register(Job, Scheduler, name='sample') +#jobs.register(Job, Scheduler, name='BasicCrawler') diff --git a/agent/base/sample.cfg b/agent/base/sample.cfg index fca1099..fe68ee0 100644 --- a/agent/base/sample.cfg +++ b/agent/base/sample.cfg @@ -1,9 +1,9 @@ -# -# sample.cfg - agent configuration for demonstration and testing purposes -# -# $Id$ -# - -controller(name='sample') -scheduler(name='sample') -logger(name='default', standard=30) +# +# sample.cfg - agent configuration for demonstration and testing purposes +# +# $Id$ +# + +controller(name='sample') +scheduler(name='sample') +logger(name='default', standard=30) diff --git a/agent/base/schedule.py b/agent/base/schedule.py index 12411e8..8b7ac04 100644 --- a/agent/base/schedule.py +++ b/agent/base/schedule.py @@ -48,3 +48,4 @@ class Scheduler(object): schedulers.register(Scheduler, Master, name='sample') +#schedulers.register(Scheduler, Master, name='BasicCrawler') diff --git a/agent/core/schedule.py b/agent/core/schedule.py new file mode 100644 index 0000000..77132fc --- /dev/null +++ b/agent/core/schedule.py @@ -0,0 +1,70 @@ +# +# Copyright (c) 2008 Helmut Merz helmutm@cy55.de +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +""" +Basic (sample) job scheduler. + +$Id: schedule.py 2415 2008-02-24 15:04:13Z helmutm $ +""" + +from time import time +from zope.interface import implements + +from cybertools.agent.base.agent import Master +from cybertools.agent.components import schedulers +from cybertools.agent.interfaces import IScheduler + +from twisted.internet import reactor +from twisted.internet.defer import Deferred + + +class Scheduler(object): + + implements(IScheduler) + + def __init__(self, agent): + self.agent = agent + self.queue = [] + + def schedule(self, job, startTime=None): + print "core.schedule called" + job.startTime = startTime or int(time()) + self.queue.append(job) + if startTime is None: + startTime = int(time()) + + if startTime < int(time()): + ''' + Only small test for first draft + ''' + startTime = startTime + int(time()) + job.startTime = startTime + job.scheduler = self + #while startTime in self.queue: + # startTime += 1 + #self.queue[startTime] = job + #reactor.callLater(startTime-int(time()), job.execute) + job.execute() + return startTime + + def getJobsToExecute(startTime=0): + return [j for j in self.queue.values() if startTime <= j.startTime] + + +schedulers.register(Scheduler, Master, name='sample') +#schedulers.register(Scheduler, Master, name='BasicCrawler')