1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import os
23
24 from twisted.internet import reactor
25
26 from flumotion.configure import configure
27 from flumotion.common import log, keycards, common, errors
28 from flumotion.job import job
29 from flumotion.twisted import credentials, fdserver
30 from flumotion.common.options import OptionParser
31
33 parser = OptionParser(domain="flumotion-job")
34
35 log.debug('job', 'Parsing arguments (%r)' % ', '.join(args))
36 options, args = parser.parse_args(args)
37
38
39 if len(args) != 3:
40 parser.error("must pass an avatarId and a path to the socket: %r" %
41 args)
42 avatarId = args[1]
43 socket = args[2]
44
45
46 log.info('job', "Starting job '%s'" % avatarId)
47
48
49
50
51 from flumotion.common import setup
52 setup.setupPackagePath()
53
54 log.info('job', 'Connecting to worker on socket %s' % (socket))
55
56 job_factory = job.JobClientFactory(avatarId)
57 reactor.connectWith(fdserver.FDConnector, socket, job_factory,
58 10, checkPID=False)
59
60
61 if 'FLU_PROFILE' in os.environ:
62 try:
63 import statprof
64 statprof.start()
65 print 'Profiling started.'
66
67 def stop_profiling():
68 statprof.stop()
69 statprof.display()
70
71 reactor.addSystemEventTrigger('before', 'shutdown',
72 stop_profiling)
73 except ImportError, e:
74 print ('Profiling requested, but statprof is not available (%s)'
75 % e)
76
77 reactor.addSystemEventTrigger('before', 'shutdown',
78 job_factory.medium.shutdownHandler)
79
80
81 log.info('job', "Started job '%s'" % avatarId)
82
83 reactor.run()
84
85
86 log.info('job', "Stopping job '%s'" % avatarId)
87
88 log.info('job', "Stopped job '%s'" % avatarId)
89
90 return 0
91