1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 """spawn a local manager and worker"""
19
20 import gettext
21 import os
22 import shutil
23 import tempfile
24
25 from twisted.internet import reactor
26 from twisted.internet.defer import Deferred
27 from twisted.internet.error import ProcessDone
28 from twisted.internet.protocol import ProcessProtocol
29
30 from flumotion.common.signals import SignalMixin
31 from flumotion.configure import configure
32
33 __version__ = "$Rev$"
34 _ = gettext.gettext
35
36
48
49
51 """I am a class which can start a local manager and a worker which
52 connects to it.
53 It's mainly used by the greeter in a debug mode and by the testsuite
54 """
55 __signals__ = ['description-changed',
56 'error',
57 'finished',
58 ]
59
61 self._path = tempfile.mkdtemp(suffix='.flumotion')
62 self._confDir = os.path.join(self._path, 'etc')
63 self._logDir = os.path.join(self._path, 'var', 'log')
64 self._runDir = os.path.join(self._path, 'var', 'run')
65 self._port = port
66
67
68
71
74
77
80
87
88 for serviceName in ['manager', 'worker']:
89 chain(["flumotion",
90 "-C", self._confDir,
91 "-L", self._logDir,
92 "-R", self._runDir,
93 "create", serviceName,
94 "admin", str(self._port)],
95 _('Creating %s ...') % serviceName,
96 _("Could not create %s." % serviceName))
97 chain(["flumotion",
98 "-C", self._confDir,
99 "-L", self._logDir,
100 "-R", self._runDir,
101 "start", serviceName, "admin"],
102 _('Starting %s ...' % serviceName),
103 _("Could not start %s." % serviceName))
104
105 d.addErrback(lambda f: None)
106
107 def done(result):
108 self._finished()
109 d.addCallback(done)
110
111
112 d.callback(None)
113
114 return d
115
116 - def stop(self, cleanUp=False):
121
122 for serviceName in ['manager', 'worker']:
123 chain(["flumotion",
124 "-C", self._confDir,
125 "-L", self._logDir,
126 "-R", self._runDir,
127 "stop", serviceName, "admin"], '', '')
128
129 def done(result):
130 if cleanUp:
131 self._cleanUp()
132 d.addCallback(done)
133
134
135 d.callback(None)
136 return d
137
138
139
141 self.emit('finished')
142
143 - def _error(self, failure, failMessage, args):
144 self.emit('error', failure, failMessage, args)
145
148
149 - def _spawnProcess(self, result, args, description, failMessage):
163 protocol.deferred.addErrback(error, failMessage)
164 return protocol.deferred
165
167 shutil.rmtree(self._path)
168