1 from Globals import InitializeClass
2 from Products.ZenRelations.RelSchema import *
3 from Products.ZenModel.ZenModelRM import ZenModelRM
4 import os
5 import sys
6 import time
7 import copy
8 import logging
9 from zope.interface import implements
10 from twisted.internet import defer
11 from twisted.spread import pb
12 from interfaces import IJobStatus
13 from logfile import LogFile
14 import tempfile
15 import transaction
16
17 SUCCESS = 0
18 FAILURE = 1
19
21
22 implements(IJobStatus)
23
24 _relations = (
25 ("jobmanager",
26 ToOne(
27 ToManyCont, "Products.Jobber.manager.JobManager", "jobs"
28 )
29 ),
30 ("job",
31 ToOne(
32 ToOne, "Products.Jobber.jobs.Job", "status"
33 )
34 ),
35 )
36
37 started = None
38 finished = None
39 result = None
40 filename = None
41 properties = None
42
56
58 return self.id.split('_')[-1]
59
61 try:
62 self._p_jar.sync()
63 except AttributeError:
64
65 pass
66 return self.filename
67
70
73
76
80
84
87
89 self.properties.setdefault('zProperties', {}).update(zprops)
90 self._p_changed = True
91
94
96 return (self.started is not None)
97
100
102 if self.finished:
103 d = defer.succeed(self)
104 else:
105 d = defer.Deferred()
106 self.finishDeferreds.append(d)
107 return d
108
111
113 """
114 Called by the Job when it's done. C{result} should be SUCCESS or
115 FAILURE.
116 """
117 self.finished = time.time()
118 self.result = result
119
120 for d in self.finishDeferreds:
121 d.callback(self)
122 del self.finishDeferreds
123
132
133
134 InitializeClass(JobStatus)
135
136
138 """
139 Represents a JobStatus object in a daemon.
140 """
141 id = None
142 _properties = None
143
147
148 - def get(self, key, default=None):
150
153
156
159
160 pb.setUnjellyableForClass(JobStatusProxy, JobStatusProxy)
161