From patchwork Thu Feb 16 21:09:14 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael-Doyle Hudson X-Patchwork-Id: 6823 Return-Path: X-Original-To: patchwork@peony.canonical.com Delivered-To: patchwork@peony.canonical.com Received: from fiordland.canonical.com (fiordland.canonical.com [91.189.94.145]) by peony.canonical.com (Postfix) with ESMTP id 0DF2A23EB0 for ; Thu, 16 Feb 2012 21:09:18 +0000 (UTC) Received: from mail-gx0-f180.google.com (mail-gx0-f180.google.com [209.85.161.180]) by fiordland.canonical.com (Postfix) with ESMTP id B05B8A18B52 for ; Thu, 16 Feb 2012 21:09:17 +0000 (UTC) Received: by ggnr1 with SMTP id r1so1915076ggn.11 for ; Thu, 16 Feb 2012 13:09:17 -0800 (PST) Received: by 10.50.87.136 with SMTP id ay8mr5216390igb.25.1329426557127; Thu, 16 Feb 2012 13:09:17 -0800 (PST) X-Forwarded-To: linaro-patchwork@canonical.com X-Forwarded-For: patch@linaro.org linaro-patchwork@canonical.com Delivered-To: patches@linaro.org Received: by 10.231.80.19 with SMTP id r19csp31717ibk; Thu, 16 Feb 2012 13:09:16 -0800 (PST) Received: by 10.204.151.207 with SMTP id d15mr2833098bkw.27.1329426555124; Thu, 16 Feb 2012 13:09:15 -0800 (PST) Received: from indium.canonical.com (indium.canonical.com. [91.189.90.7]) by mx.google.com with ESMTPS id s79si6826420weq.84.2012.02.16.13.09.14 (version=TLSv1/SSLv3 cipher=OTHER); Thu, 16 Feb 2012 13:09:15 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of bounces@canonical.com designates 91.189.90.7 as permitted sender) client-ip=91.189.90.7; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of bounces@canonical.com designates 91.189.90.7 as permitted sender) smtp.mail=bounces@canonical.com Received: from ackee.canonical.com ([91.189.89.26]) by indium.canonical.com with esmtp (Exim 4.71 #1 (Debian)) id 1Ry8Zm-0006Q1-GR for ; Thu, 16 Feb 2012 21:09:14 +0000 Received: from ackee.canonical.com (localhost [127.0.0.1]) by ackee.canonical.com (Postfix) with ESMTP id 70AC6E15AD for ; Thu, 16 Feb 2012 21:09:14 +0000 (UTC) MIME-Version: 1.0 X-Launchpad-Project: lava-scheduler X-Launchpad-Branch: ~linaro-validation/lava-scheduler/trunk X-Launchpad-Message-Rationale: Subscriber X-Launchpad-Branch-Revision-Number: 133 X-Launchpad-Notification-Type: branch-revision To: Linaro Patch Tracker From: noreply@launchpad.net Subject: [Branch ~linaro-validation/lava-scheduler/trunk] Rev 133: make the way the scheduler monitor finds out where to log to more reliable Message-Id: <20120216210914.28151.66338.launchpad@ackee.canonical.com> Date: Thu, 16 Feb 2012 21:09:14 -0000 Reply-To: noreply@launchpad.net Sender: bounces@canonical.com Errors-To: bounces@canonical.com Precedence: bulk X-Generated-By: Launchpad (canonical.com); Revision="14814"; Instance="launchpad-lazr.conf" X-Launchpad-Hash: bdde3be2808d851c532670c24f24649a01000b0c X-Gm-Message-State: ALoCoQl64h+odqN0ZcDUmRmA/YKxpras21A4/1Nc8iPWdIWvY7olpzPRsdMRF9t93XkQbG9xldFT Merge authors: Michael Hudson-Doyle (mwhudson) Related merge proposals: https://code.launchpad.net/~mwhudson/lava-scheduler/fix-monitor-logging/+merge/93326 proposed by: Michael Hudson-Doyle (mwhudson) review: Approve - Zygmunt Krynicki (zkrynicki) ------------------------------------------------------------ revno: 133 [merge] committer: Michael Hudson-Doyle branch nick: trunk timestamp: Fri 2012-02-17 10:07:23 +1300 message: make the way the scheduler monitor finds out where to log to more reliable modified: lava_scheduler_app/management/commands/__init__.py lava_scheduler_app/management/commands/scheduler.py lava_scheduler_app/management/commands/schedulermonitor.py lava_scheduler_daemon/board.py lava_scheduler_daemon/service.py lava_scheduler_daemon/tests/test_board.py --- lp:lava-scheduler https://code.launchpad.net/~linaro-validation/lava-scheduler/trunk You are subscribed to branch lp:lava-scheduler. To unsubscribe from this branch go to https://code.launchpad.net/~linaro-validation/lava-scheduler/trunk/+edit-subscription === modified file 'lava_scheduler_app/management/commands/__init__.py' --- lava_scheduler_app/management/commands/__init__.py 2011-11-21 22:11:47 +0000 +++ lava_scheduler_app/management/commands/__init__.py 2012-02-16 01:46:46 +0000 @@ -0,0 +1,23 @@ +import logging +import sys + +from django.core.management.base import BaseCommand + + +class SchedulerCommand(BaseCommand): + + log_prefix = '' + + def _configure_logging(self, loglevel, logfile=None): + logger = logging.getLogger('') + if logfile is None: + handler = logging.StreamHandler(sys.stderr) + else: + handler = logging.FileHandler(logfile) + fmt = "%(asctime)s [%(levelname)s] [%(name)s] %(message)s" + if self.log_prefix: + fmt = self.log_prefix + ' ' + fmt + handler.setFormatter(logging.Formatter(fmt)) + logger.addHandler(handler) + logger.setLevel(getattr(logging, loglevel.upper())) + === modified file 'lava_scheduler_app/management/commands/scheduler.py' --- lava_scheduler_app/management/commands/scheduler.py 2011-12-01 02:33:35 +0000 +++ lava_scheduler_app/management/commands/scheduler.py 2012-02-16 01:39:54 +0000 @@ -17,14 +17,14 @@ # along with LAVA Scheduler. If not, see . -from django.core.management.base import BaseCommand from optparse import make_option +from lava_scheduler_app.management.commands import SchedulerCommand -class Command(BaseCommand): +class Command(SchedulerCommand): help = "Run the LAVA test job scheduler" - option_list = BaseCommand.option_list + ( + option_list = SchedulerCommand.option_list + ( make_option('--use-fake', action='store_true', dest='use_fake', @@ -45,20 +45,6 @@ help="Path to log file"), ) - - def _configure_logging(self, loglevel, logfile=None): - import logging - import sys - logger = logging.getLogger('') - if logfile is None: - handler = logging.StreamHandler(sys.stderr) - else: - handler = logging.FileHandler(logfile) - handler.setFormatter( - logging.Formatter("[%(levelname)s] [%(name)s] %(message)s")) - logger.addHandler(handler) - logger.setLevel(getattr(logging, loglevel.upper())) - def handle(self, *args, **options): import os @@ -78,6 +64,8 @@ 'fake-dispatcher') else: dispatcher = options['dispatcher'] - service = BoardSet(source, dispatcher, reactor) + service = BoardSet( + source, dispatcher, reactor, log_file=options['logfile'], + log_level=options['loglevel']) reactor.callWhenRunning(service.startService) reactor.run() === modified file 'lava_scheduler_app/management/commands/schedulermonitor.py' --- lava_scheduler_app/management/commands/schedulermonitor.py 2011-12-01 03:32:52 +0000 +++ lava_scheduler_app/management/commands/schedulermonitor.py 2012-02-16 01:39:54 +0000 @@ -19,15 +19,15 @@ from optparse import make_option import simplejson -from django.core.management.base import BaseCommand +from lava_scheduler_app.management.commands import SchedulerCommand from lava_scheduler_daemon.dbjobsource import DatabaseJobSource -class Command(BaseCommand): +class Command(SchedulerCommand): help = "Run the LAVA test job scheduler" - option_list = BaseCommand.option_list + ( + option_list = SchedulerCommand.option_list + ( make_option('--use-fake', action='store_true', dest='use_fake', @@ -48,19 +48,7 @@ help="Path to log file"), ) - - def _configure_logging(self, loglevel, logfile=None): - import logging - import sys - logger = logging.getLogger('') - if logfile is None: - handler = logging.StreamHandler(sys.stderr) - else: - handler = logging.FileHandler(logfile) - handler.setFormatter( - logging.Formatter("M [%(levelname)s] [%(name)s] %(message)s")) - logger.addHandler(handler) - logger.setLevel(getattr(logging, loglevel.upper())) + log_prefix = 'M' def handle(self, *args, **options): from twisted.internet import reactor @@ -69,7 +57,8 @@ dispatcher, board_name, json_file = args job = Job( simplejson.load(open(json_file)), dispatcher, - source, board_name, reactor) + source, board_name, reactor, log_file=options['logfile'], + log_level=options['loglevel']) def run(): job.run().addCallback(lambda result: reactor.stop()) reactor.callWhenRunning(run) === modified file 'lava_scheduler_daemon/board.py' --- lava_scheduler_daemon/board.py 2011-12-01 03:58:08 +0000 +++ lava_scheduler_daemon/board.py 2012-02-16 01:35:16 +0000 @@ -64,7 +64,8 @@ logger = logging.getLogger(__name__ + '.Job') - def __init__(self, job_data, dispatcher, source, board_name, reactor): + def __init__(self, job_data, dispatcher, source, board_name, reactor, + log_file, log_level): self.job_data = job_data self.dispatcher = dispatcher self.source = source @@ -126,12 +127,15 @@ logger = logging.getLogger(__name__ + '.MonitorJob') - def __init__(self, job_data, dispatcher, source, board_name, reactor): + def __init__(self, job_data, dispatcher, source, board_name, reactor, + log_file, log_level): self.job_data = job_data self.dispatcher = dispatcher self.source = source self.board_name = board_name self.reactor = reactor + self.log_file = log_file + self.log_level = log_level self._json_file = None def run(self): @@ -140,15 +144,12 @@ fd, self._json_file = tempfile.mkstemp() with os.fdopen(fd, 'wb') as f: json.dump(json_data, f) - root_logger = logging.getLogger('') - root_level_name = logging._levelNames[root_logger.level] - root_handler = root_logger.handlers[0] args = [ 'setsid', 'lava-server', 'manage', 'schedulermonitor', self.dispatcher, str(self.board_name), self._json_file, - '-l', root_level_name] - if isinstance(root_handler, logging.FileHandler): - args.extend(['-f', root_handler.baseFilename]) + '-l', self.log_level] + if self.log_file: + args.extend(['-f', self.log_file]) self.logger.info('executing "%s"', ' '.join(args)) self.reactor.spawnProcess( SimplePP(d), 'setsid', childFDs={0:0, 1:1, 2:2}, @@ -212,11 +213,14 @@ job_cls = MonitorJob - def __init__(self, source, board_name, dispatcher, reactor, job_cls=None): + def __init__(self, source, board_name, dispatcher, reactor, log_file, + log_level, job_cls=None): self.source = source self.board_name = board_name self.dispatcher = dispatcher self.reactor = reactor + self.log_file = log_file + self.log_level = log_level if job_cls is not None: self.job_cls = job_cls self.running_job = None @@ -297,7 +301,7 @@ self.logger.info("starting job %r", job_data) self.running_job = self.job_cls( job_data, self.dispatcher, self.source, self.board_name, - self.reactor) + self.reactor, self.log_file, self.log_level) d = self.running_job.run() d.addCallbacks(self._cbJobFinished, self._ebJobFinished) === modified file 'lava_scheduler_daemon/service.py' --- lava_scheduler_daemon/service.py 2011-08-18 02:25:09 +0000 +++ lava_scheduler_daemon/service.py 2012-02-16 01:35:16 +0000 @@ -11,11 +11,13 @@ logger = logging.getLogger(__name__ + '.BoardSet') - def __init__(self, source, dispatcher, reactor): + def __init__(self, source, dispatcher, reactor, log_file, log_level): self.source = source self.boards = {} self.dispatcher = dispatcher self.reactor = reactor + self.log_file = log_file + self.log_level = log_level self._update_boards_call = LoopingCall(self._updateBoards) self._update_boards_call.clock = reactor @@ -34,7 +36,8 @@ new_boards[board_name] = self.boards.pop(board_name) else: new_boards[board_name] = Board( - self.source, board_name, self.dispatcher, self.reactor) + self.source, board_name, self.dispatcher, self.reactor, + self.log_file, self.log_level) new_boards[board_name].start() for board in self.boards.values(): board.stop() === modified file 'lava_scheduler_daemon/tests/test_board.py' --- lava_scheduler_daemon/tests/test_board.py 2011-08-18 04:29:11 +0000 +++ lava_scheduler_daemon/tests/test_board.py 2012-02-16 01:35:16 +0000 @@ -75,7 +75,8 @@ self.fail("Logged warnings: %s" % warnings) def make_board(self, board_name): - board = Board(self.source, board_name, 'script', self.clock, TestJob) + board = Board( + self.source, board_name, 'script', self.clock, job_cls=TestJob) board.logger.addHandler(self._handler) board.logger.setLevel(logging.DEBUG) return board