1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 """flumotion-rrdmon entry point, command line parsing and invokation"""
19
20 import os
21 import sys
22
23 from twisted.internet import reactor
24
25 from flumotion.admin.rrdmon import rrdmon, config
26 from flumotion.common import log
27 from flumotion.common.options import OptionGroup, OptionParser
28 from flumotion.common.process import startup
29 from flumotion.configure import configure
30
31 __version__ = "$Rev$"
32
33
34
35
37 parser = OptionParser(domain="flumotion-rrdmon")
38
39 group = OptionGroup(parser, "rrdmon")
40 group.add_option('-s', '--service-name',
41 action="store", type="string", dest="serviceName",
42 help="name to use for log and pid files "
43 "when run as a daemon")
44 group.add_option('-D', '--daemonize',
45 action="store_true", dest="daemonize",
46 help="run in background as a daemon")
47 group.add_option('', '--daemonize-to',
48 action="store", dest="daemonizeTo",
49 help="what directory to run from when daemonizing")
50
51 parser.add_option('-L', '--logdir',
52 action="store", dest="logdir",
53 help="flumotion log directory (default: %s)" %
54 configure.logdir)
55 parser.add_option('-R', '--rundir',
56 action="store", dest="rundir",
57 help="flumotion run directory (default: %s)" %
58 configure.rundir)
59 parser.add_option_group(group)
60
61 return parser
62
63
73
74
76 parser = _createParser()
77 log.debug('rrdmon', 'Parsing arguments (%r)' % ', '.join(args))
78 options, args = parser.parse_args(args)
79
80
81 for d in ['logdir', 'rundir']:
82 o = getattr(options, d, None)
83 if o:
84 log.debug('rrdmon', 'Setting configure.%s to %s' % (d, o))
85 setattr(configure, d, o)
86
87
88 if len(args) != 2:
89 raise SystemExit('usage: flumotion-rrdtool [OPTIONS] CONFIG-FILE')
90
91 confXml = args[1]
92 cfg = _readConfig(confXml, options)
93
94
95 if options.debug:
96 log.setFluDebug(options.debug)
97
98 if options.daemonizeTo and not options.daemonize:
99 sys.stderr.write(
100 'ERROR: --daemonize-to can only be used with -D/--daemonize.\n')
101 return 1
102
103 if options.serviceName and not options.daemonize:
104 sys.stderr.write(
105 'ERROR: --service-name can only be used with -D/--daemonize.\n')
106 return 1
107
108 monitor = rrdmon.RRDMonitor(cfg['sources'])
109
110 name = 'rrdmon'
111 if options.daemonize:
112 if options.serviceName:
113 name = options.serviceName
114 if not options.daemonizeTo:
115 options.daemonizeTo = "/"
116
117 startup("rrdmon", name, options.daemonize, options.daemonizeTo)
118
119 log.debug('rrdmon', 'Running Flumotion version %s' %
120 configure.version)
121 import twisted.copyright
122 log.debug('rrdmon', 'Running against Twisted version %s' %
123 twisted.copyright.version)
124
125
126 reactor.run()
127
128 return 0
129