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