completed sample implementation (without Twisted), with simple logging
git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@2420 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
9650935184
commit
7c8489f170
7 changed files with 33 additions and 11 deletions
|
@ -107,7 +107,7 @@ the path to the configuration file.
|
|||
>>> master.config
|
||||
controller.name = 'sample'
|
||||
logger.name = 'default'
|
||||
logger.standard = 20
|
||||
logger.standard = 30
|
||||
scheduler.name = 'sample'
|
||||
|
||||
Controllers
|
||||
|
@ -158,9 +158,9 @@ We schedule a sample job by taking the role of the controller and simply
|
|||
call the master agent's callback method for entering jobs.
|
||||
|
||||
>>> from cybertools.agent.base.control import JobSpecification
|
||||
>>> jobSpec = JobSpecification('sample', agent='sample01')
|
||||
>>> jobSpec = JobSpecification('sample', '00001', agent='sample01')
|
||||
>>> master.setupJobs([jobSpec])
|
||||
Job <...Job object ...> on agent <...SampleAgent object ...> has been executed.
|
||||
Job 00001 on agent sample01 has been executed.
|
||||
|
||||
Logging
|
||||
-------
|
||||
|
@ -169,3 +169,15 @@ Logging
|
|||
<cybertools.agent.base.log.Logger object ...>
|
||||
>>> agent01.logger is master.logger
|
||||
True
|
||||
|
||||
>>> master.config.logger.standard = 20
|
||||
>>> master.logger.setup()
|
||||
>>> jobSpec = JobSpecification('sample', '00002', agent='sample01')
|
||||
>>> master.setupJobs([jobSpec])
|
||||
Job 00002 on agent sample01 has been executed.
|
||||
2... agent:sample01 job:00002 message:job execution
|
||||
|
||||
>>> for r in master.logger.records:
|
||||
... print r
|
||||
2... agent:sample01 job:00001 message:job execution
|
||||
2... agent:sample01 job:00002 message:job execution
|
||||
|
|
|
@ -34,6 +34,7 @@ class Agent(object):
|
|||
|
||||
implements(IAgent)
|
||||
|
||||
name = '???'
|
||||
master = None
|
||||
config = None
|
||||
logger = None
|
||||
|
@ -49,6 +50,7 @@ class Agent(object):
|
|||
|
||||
class Master(Agent):
|
||||
|
||||
name = 'master'
|
||||
scheduler = None
|
||||
|
||||
def __init__(self, configuration=None):
|
||||
|
@ -69,24 +71,26 @@ class Master(Agent):
|
|||
def setupAgents(self, agentSpecs):
|
||||
for spec in agentSpecs:
|
||||
agent = agents(self, spec.type)
|
||||
agent.name = spec.name
|
||||
self.children[spec.name] = agent
|
||||
|
||||
def setupJobs(self, jobSpecs):
|
||||
for spec in jobSpecs:
|
||||
job = jobs(self.scheduler, spec.type)
|
||||
job.agent = self.children[spec.agent]
|
||||
job.identifier = spec.identifier
|
||||
self.scheduler.schedule(job, spec.startTime)
|
||||
|
||||
|
||||
class SampleAgent(Agent):
|
||||
|
||||
def execute(self, job, params=None):
|
||||
msg = 'Job %s on agent %s has been executed.' % (job, self)
|
||||
print msg
|
||||
self.log(msg)
|
||||
print 'Job %s on agent %s has been executed.' % (job.identifier, self.name)
|
||||
self.log(job)
|
||||
|
||||
def log(self, msg):
|
||||
self.logger.log(dict(msg=msg))
|
||||
def log(self, job):
|
||||
self.logger.log(dict(message='job execution', job=job.identifier,
|
||||
agent=self.name))
|
||||
|
||||
|
||||
agents.register(SampleAgent, Master, name='sample')
|
||||
|
|
|
@ -68,8 +68,9 @@ class JobSpecification(object):
|
|||
|
||||
startTime = None
|
||||
|
||||
def __init__(self, type, **kw):
|
||||
def __init__(self, type, identifier, **kw):
|
||||
self.type = type
|
||||
self.identifier = identifier
|
||||
for k, v in kw.items():
|
||||
setattr(self, k, v)
|
||||
|
||||
|
|
|
@ -33,6 +33,7 @@ class Job(object):
|
|||
|
||||
implements(IScheduledJob)
|
||||
|
||||
identifier = '???'
|
||||
agent = None
|
||||
startTime = None
|
||||
repeat = 0
|
||||
|
|
|
@ -59,11 +59,12 @@ class Logger(object):
|
|||
def __init__(self, agent):
|
||||
self.agent = agent
|
||||
self.records = []
|
||||
self.externalLoggers = []
|
||||
self.setup()
|
||||
self.externalLoggers = []
|
||||
|
||||
def setup(self):
|
||||
conf = self.agent.config.logger
|
||||
self.externalLoggers = []
|
||||
if conf.standard:
|
||||
logger = logging.getLogger()
|
||||
logger.level = conf.standard
|
||||
|
|
|
@ -6,4 +6,4 @@
|
|||
|
||||
controller(name='sample')
|
||||
scheduler(name='sample')
|
||||
logger(name='default', standard=20)
|
||||
logger(name='default', standard=30)
|
||||
|
|
|
@ -31,6 +31,7 @@ class IAgent(Interface):
|
|||
""" An agent waits for jobs to execute.
|
||||
"""
|
||||
|
||||
name = Attribute('A name identifying the agent.')
|
||||
master = Attribute('IMaster instance.')
|
||||
config = Attribute('Configuration settings.')
|
||||
logger = Attribute('Logger instance to be used for recording '
|
||||
|
@ -154,6 +155,8 @@ class IScheduledJob(Interface):
|
|||
a predefined date and time - this is the basic job interface.
|
||||
"""
|
||||
|
||||
identifier = Attribute('A name/ID unique within the realm of the '
|
||||
'controller.')
|
||||
scheduler = Attribute('Scheduler that controls this job.')
|
||||
agent = Attribute('Agent responsible for executing the job.')
|
||||
startTime = Attribute('Date/time at which the job should be executed.')
|
||||
|
|
Loading…
Add table
Reference in a new issue