Revision 796b5152
b/lib/tools/ensure_dirs.py | ||
---|---|---|
201 | 201 |
return paths |
202 | 202 |
|
203 | 203 |
|
204 |
def SetupLogging(opts): |
|
205 |
"""Configures the logging module. |
|
206 |
|
|
207 |
""" |
|
208 |
formatter = logging.Formatter("%(asctime)s: %(message)s") |
|
209 |
|
|
210 |
stderr_handler = logging.StreamHandler() |
|
211 |
stderr_handler.setFormatter(formatter) |
|
212 |
if opts.debug: |
|
213 |
stderr_handler.setLevel(logging.NOTSET) |
|
214 |
elif opts.verbose: |
|
215 |
stderr_handler.setLevel(logging.INFO) |
|
216 |
else: |
|
217 |
stderr_handler.setLevel(logging.WARNING) |
|
218 |
|
|
219 |
root_logger = logging.getLogger("") |
|
220 |
root_logger.setLevel(logging.NOTSET) |
|
221 |
root_logger.addHandler(stderr_handler) |
|
222 |
|
|
223 |
|
|
224 | 204 |
def ParseOptions(): |
225 | 205 |
"""Parses the options passed to the program. |
226 | 206 |
|
... | ... | |
246 | 226 |
""" |
247 | 227 |
(opts, args) = ParseOptions() |
248 | 228 |
|
249 |
SetupLogging(opts)
|
|
229 |
utils.SetupToolLogging(opts.debug, opts.verbose)
|
|
250 | 230 |
|
251 | 231 |
if args: |
252 | 232 |
logging.error("No arguments are expected") |
b/lib/tools/prepare_node_join.py | ||
---|---|---|
94 | 94 |
return opts |
95 | 95 |
|
96 | 96 |
|
97 |
def SetupLogging(opts): |
|
98 |
"""Configures the logging module. |
|
99 |
|
|
100 |
""" |
|
101 |
formatter = logging.Formatter("%(asctime)s: %(message)s") |
|
102 |
|
|
103 |
stderr_handler = logging.StreamHandler() |
|
104 |
stderr_handler.setFormatter(formatter) |
|
105 |
if opts.debug: |
|
106 |
stderr_handler.setLevel(logging.NOTSET) |
|
107 |
elif opts.verbose: |
|
108 |
stderr_handler.setLevel(logging.INFO) |
|
109 |
else: |
|
110 |
stderr_handler.setLevel(logging.WARNING) |
|
111 |
|
|
112 |
root_logger = logging.getLogger("") |
|
113 |
root_logger.setLevel(logging.NOTSET) |
|
114 |
root_logger.addHandler(stderr_handler) |
|
115 |
|
|
116 |
|
|
117 | 97 |
def _VerifyCertificate(cert, _noded_cert_file=pathutils.NODED_CERT_FILE): |
118 | 98 |
"""Verifies a certificate against the local node daemon certificate. |
119 | 99 |
|
... | ... | |
319 | 299 |
""" |
320 | 300 |
opts = ParseOptions() |
321 | 301 |
|
322 |
SetupLogging(opts)
|
|
302 |
utils.SetupToolLogging(opts.debug, opts.verbose)
|
|
323 | 303 |
|
324 | 304 |
try: |
325 | 305 |
data = LoadData(sys.stdin.read()) |
b/lib/utils/log.py | ||
---|---|---|
25 | 25 |
import os.path |
26 | 26 |
import logging |
27 | 27 |
import logging.handlers |
28 |
from cStringIO import StringIO |
|
28 | 29 |
|
29 | 30 |
from ganeti import constants |
30 | 31 |
from ganeti import compat |
... | ... | |
269 | 270 |
raise |
270 | 271 |
|
271 | 272 |
return compat.partial(_ReopenLogFiles, reopen_handlers) |
273 |
|
|
274 |
|
|
275 |
def SetupToolLogging(debug, verbose, threadname=False, |
|
276 |
_root_logger=None, _stream=None): |
|
277 |
"""Configures the logging module for tools. |
|
278 |
|
|
279 |
All log messages are sent to stderr. |
|
280 |
|
|
281 |
@type debug: boolean |
|
282 |
@param debug: Disable log message filtering |
|
283 |
@type verbose: boolean |
|
284 |
@param verbose: Enable verbose log messages |
|
285 |
@type threadname: boolean |
|
286 |
@param threadname: Whether to include thread name in output |
|
287 |
|
|
288 |
""" |
|
289 |
if _root_logger is None: |
|
290 |
root_logger = logging.getLogger("") |
|
291 |
else: |
|
292 |
root_logger = _root_logger |
|
293 |
|
|
294 |
fmt = StringIO() |
|
295 |
fmt.write("%(asctime)s:") |
|
296 |
|
|
297 |
if threadname: |
|
298 |
fmt.write(" %(threadName)s") |
|
299 |
|
|
300 |
if debug or verbose: |
|
301 |
fmt.write(" %(levelname)s") |
|
302 |
|
|
303 |
fmt.write(" %(message)s") |
|
304 |
|
|
305 |
formatter = logging.Formatter(fmt.getvalue()) |
|
306 |
|
|
307 |
stderr_handler = logging.StreamHandler(_stream) |
|
308 |
stderr_handler.setFormatter(formatter) |
|
309 |
if debug: |
|
310 |
stderr_handler.setLevel(logging.NOTSET) |
|
311 |
elif verbose: |
|
312 |
stderr_handler.setLevel(logging.INFO) |
|
313 |
else: |
|
314 |
stderr_handler.setLevel(logging.WARNING) |
|
315 |
|
|
316 |
root_logger.setLevel(logging.NOTSET) |
|
317 |
root_logger.addHandler(stderr_handler) |
b/test/ganeti.utils.log_unittest.py | ||
---|---|---|
26 | 26 |
import logging |
27 | 27 |
import tempfile |
28 | 28 |
import shutil |
29 |
import threading |
|
30 |
from cStringIO import StringIO |
|
29 | 31 |
|
30 | 32 |
from ganeti import constants |
31 | 33 |
from ganeti import errors |
34 |
from ganeti import compat |
|
32 | 35 |
from ganeti import utils |
33 | 36 |
|
34 | 37 |
import testutils |
... | ... | |
192 | 195 |
self.assertTrue(utils.ReadFile(logfile2).endswith("This is a test\n")) |
193 | 196 |
|
194 | 197 |
|
198 |
class TestSetupToolLogging(unittest.TestCase): |
|
199 |
def test(self): |
|
200 |
error_name = logging.getLevelName(logging.ERROR) |
|
201 |
warn_name = logging.getLevelName(logging.WARNING) |
|
202 |
info_name = logging.getLevelName(logging.INFO) |
|
203 |
debug_name = logging.getLevelName(logging.DEBUG) |
|
204 |
|
|
205 |
for debug in [False, True]: |
|
206 |
for verbose in [False, True]: |
|
207 |
logger = logging.Logger("TestLogger") |
|
208 |
buf = StringIO() |
|
209 |
|
|
210 |
utils.SetupToolLogging(debug, verbose, _root_logger=logger, _stream=buf) |
|
211 |
|
|
212 |
logger.error("level=error") |
|
213 |
logger.warning("level=warning") |
|
214 |
logger.info("level=info") |
|
215 |
logger.debug("level=debug") |
|
216 |
|
|
217 |
lines = buf.getvalue().splitlines() |
|
218 |
|
|
219 |
self.assertTrue(compat.all(line.count(":") == 3 for line in lines)) |
|
220 |
|
|
221 |
messages = [line.split(":", 3)[-1].strip() for line in lines] |
|
222 |
|
|
223 |
if debug: |
|
224 |
self.assertEqual(messages, [ |
|
225 |
"%s level=error" % error_name, |
|
226 |
"%s level=warning" % warn_name, |
|
227 |
"%s level=info" % info_name, |
|
228 |
"%s level=debug" % debug_name, |
|
229 |
]) |
|
230 |
elif verbose: |
|
231 |
self.assertEqual(messages, [ |
|
232 |
"%s level=error" % error_name, |
|
233 |
"%s level=warning" % warn_name, |
|
234 |
"%s level=info" % info_name, |
|
235 |
]) |
|
236 |
else: |
|
237 |
self.assertEqual(messages, [ |
|
238 |
"level=error", |
|
239 |
"level=warning", |
|
240 |
]) |
|
241 |
|
|
242 |
def testThreadName(self): |
|
243 |
thread_name = threading.currentThread().getName() |
|
244 |
|
|
245 |
for enable_threadname in [False, True]: |
|
246 |
logger = logging.Logger("TestLogger") |
|
247 |
buf = StringIO() |
|
248 |
|
|
249 |
utils.SetupToolLogging(True, True, threadname=enable_threadname, |
|
250 |
_root_logger=logger, _stream=buf) |
|
251 |
|
|
252 |
logger.debug("test134042376") |
|
253 |
|
|
254 |
lines = buf.getvalue().splitlines() |
|
255 |
self.assertEqual(len(lines), 1) |
|
256 |
|
|
257 |
if enable_threadname: |
|
258 |
self.assertTrue((" %s " % thread_name) in lines[0]) |
|
259 |
else: |
|
260 |
self.assertTrue(thread_name not in lines[0]) |
|
261 |
|
|
262 |
|
|
195 | 263 |
if __name__ == "__main__": |
196 | 264 |
testutils.GanetiTestProgram() |
b/tools/cluster-merge | ||
---|---|---|
781 | 781 |
shutil.rmtree(self.work_dir) |
782 | 782 |
|
783 | 783 |
|
784 |
def SetupLogging(options): |
|
785 |
"""Setting up logging infrastructure. |
|
786 |
|
|
787 |
@param options: Parsed command line options |
|
788 |
|
|
789 |
""" |
|
790 |
formatter = logging.Formatter("%(asctime)s: %(levelname)s %(message)s") |
|
791 |
|
|
792 |
stderr_handler = logging.StreamHandler() |
|
793 |
stderr_handler.setFormatter(formatter) |
|
794 |
if options.debug: |
|
795 |
stderr_handler.setLevel(logging.NOTSET) |
|
796 |
elif options.verbose: |
|
797 |
stderr_handler.setLevel(logging.INFO) |
|
798 |
else: |
|
799 |
stderr_handler.setLevel(logging.WARNING) |
|
800 |
|
|
801 |
root_logger = logging.getLogger("") |
|
802 |
root_logger.setLevel(logging.NOTSET) |
|
803 |
root_logger.addHandler(stderr_handler) |
|
804 |
|
|
805 |
|
|
806 | 784 |
def main(): |
807 | 785 |
"""Main routine. |
808 | 786 |
|
... | ... | |
821 | 799 |
|
822 | 800 |
(options, args) = parser.parse_args() |
823 | 801 |
|
824 |
SetupLogging(options)
|
|
802 |
utils.SetupToolLogging(options.debug, options.verbose)
|
|
825 | 803 |
|
826 | 804 |
if not args: |
827 | 805 |
parser.error("No clusters specified") |
b/tools/move-instance | ||
---|---|---|
719 | 719 |
logging.info("Destination cluster RAPI version: %s", dest_client.GetVersion()) |
720 | 720 |
|
721 | 721 |
|
722 |
def SetupLogging(options): |
|
723 |
"""Setting up logging infrastructure. |
|
724 |
|
|
725 |
@param options: Parsed command line options |
|
726 |
|
|
727 |
""" |
|
728 |
fmt = "%(asctime)s: %(threadName)s " |
|
729 |
if options.debug or options.verbose: |
|
730 |
fmt += "%(levelname)s " |
|
731 |
fmt += "%(message)s" |
|
732 |
|
|
733 |
formatter = logging.Formatter(fmt) |
|
734 |
|
|
735 |
stderr_handler = logging.StreamHandler() |
|
736 |
stderr_handler.setFormatter(formatter) |
|
737 |
if options.debug: |
|
738 |
stderr_handler.setLevel(logging.NOTSET) |
|
739 |
elif options.verbose: |
|
740 |
stderr_handler.setLevel(logging.INFO) |
|
741 |
else: |
|
742 |
stderr_handler.setLevel(logging.ERROR) |
|
743 |
|
|
744 |
root_logger = logging.getLogger("") |
|
745 |
root_logger.setLevel(logging.NOTSET) |
|
746 |
root_logger.addHandler(stderr_handler) |
|
747 |
|
|
748 |
|
|
749 | 722 |
def ParseOptions(): |
750 | 723 |
"""Parses options passed to program. |
751 | 724 |
|
... | ... | |
845 | 818 |
""" |
846 | 819 |
(parser, options, args) = ParseOptions() |
847 | 820 |
|
848 |
SetupLogging(options)
|
|
821 |
utils.SetupToolLogging(options.debug, options.verbose, threadname=True)
|
|
849 | 822 |
|
850 | 823 |
(src_cluster_name, dest_cluster_name, instance_names) = \ |
851 | 824 |
CheckOptions(parser, options, args) |
b/tools/ovfconverter | ||
---|---|---|
31 | 31 |
from ganeti import constants |
32 | 32 |
from ganeti import errors |
33 | 33 |
from ganeti import ovf |
34 |
from ganeti import utils |
|
34 | 35 |
|
35 | 36 |
|
36 | 37 |
IMPORT_MODE = "import" |
... | ... | |
161 | 162 |
return (mode, input_path, options) |
162 | 163 |
|
163 | 164 |
|
164 |
def SetupLogging(options): |
|
165 |
"""Setting up logging infrastructure. |
|
166 |
|
|
167 |
@type options: optparse.Values |
|
168 |
@param options: parsed command line options |
|
169 |
|
|
170 |
""" |
|
171 |
formatter = logging.Formatter("%(asctime)s: %(levelname)s %(message)s") |
|
172 |
|
|
173 |
stderr_handler = logging.StreamHandler() |
|
174 |
stderr_handler.setFormatter(formatter) |
|
175 |
if options.debug: |
|
176 |
stderr_handler.setLevel(logging.NOTSET) |
|
177 |
elif options.verbose: |
|
178 |
stderr_handler.setLevel(logging.INFO) |
|
179 |
else: |
|
180 |
stderr_handler.setLevel(logging.WARNING) |
|
181 |
|
|
182 |
root_logger = logging.getLogger("") |
|
183 |
root_logger.setLevel(logging.NOTSET) |
|
184 |
root_logger.addHandler(stderr_handler) |
|
185 |
|
|
186 |
|
|
187 | 165 |
def main(): |
188 | 166 |
"""Main routine. |
189 | 167 |
|
190 | 168 |
""" |
191 | 169 |
(mode, input_path, options) = ParseOptions() |
192 |
SetupLogging(options) |
|
170 |
|
|
171 |
utils.SetupToolLogging(options.debug, options.verbose) |
|
172 |
|
|
193 | 173 |
logging.info("Chosen %s mode, reading the %s file", mode, input_path) |
194 | 174 |
assert mode in (IMPORT_MODE, EXPORT_MODE) |
195 | 175 |
converter = None |
Also available in: Unified diff