aboutsummaryrefslogtreecommitdiff
path: root/deprecated/automation/common/job_group.py
diff options
context:
space:
mode:
Diffstat (limited to 'deprecated/automation/common/job_group.py')
-rw-r--r--deprecated/automation/common/job_group.py73
1 files changed, 73 insertions, 0 deletions
diff --git a/deprecated/automation/common/job_group.py b/deprecated/automation/common/job_group.py
new file mode 100644
index 00000000..96912fc1
--- /dev/null
+++ b/deprecated/automation/common/job_group.py
@@ -0,0 +1,73 @@
+# 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