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