blob: 09321e1a54d7d24a9af2ce94b2d3174c7170b719 [file] [log] [blame]
#!/usr/bin/python
#
# Copyright 2010 Google Inc. All Rights Reserved.
#
import getpass
import os
from automation.common.state_machine import BasicStateMachine
STATUS_NOT_EXECUTED = "NOT_EXECUTED"
STATUS_EXECUTING = "EXECUTING"
STATUS_SUCCEEDED = "SUCCEEDED"
STATUS_FAILED = "FAILED"
class JobGroupStateMachine(BasicStateMachine):
state_machine = {
STATUS_NOT_EXECUTED: [STATUS_EXECUTING],
STATUS_EXECUTING: [STATUS_SUCCEEDED, STATUS_FAILED]}
final_states = [STATUS_SUCCEEDED, STATUS_FAILED]
class JobGroup(object):
HOMEDIR_PREFIX = os.path.join("/home", getpass.getuser(), "www", "automation")
def __init__(self, label, jobs=None, cleanup_on_completion=True,
cleanup_on_failure=False, description=""):
self._state = JobGroupStateMachine(STATUS_NOT_EXECUTED)
self.id = 0
self.label = label
self.jobs = []
self.cleanup_on_completion = cleanup_on_completion
self.cleanup_on_failure = cleanup_on_failure
self.description = description
if jobs:
for job in jobs:
self.AddJob(job)
def _StateGet(self):
return self._state
def _StateSet(self, new_state):
self._state.Change(new_state)
status = property(_StateGet, _StateSet)
@property
def home_dir(self):
return os.path.join(self.HOMEDIR_PREFIX, "job-group-%d" % self.id)
@property
def time_submitted(self):
try:
return self.status.timeline[1].time_started
except IndexError:
return None
def __repr__(self):
return '{%s: %s}' % (self.__class__.__name__, self.id)
def __str__(self):
return "\n".join(["Job-Group:",
"ID: %s" % self.id] +
[str(job) for job in self.jobs])
def AddJob(self, job):
self.jobs.append(job)
job.group = self