diff mbox

[Branch,~linaro-validation/lava-scheduler/trunk] Rev 98: Expose lava scheduler as django management command

Message ID 20111121231612.2865.2011.launchpad@ackee.canonical.com
State Accepted
Headers show

Commit Message

Zygmunt Krynicki Nov. 21, 2011, 11:16 p.m. UTC
------------------------------------------------------------
revno: 98
committer: Zygmunt Krynicki <zygmunt.krynicki@linaro.org>
branch nick: lava-scheduler
timestamp: Mon 2011-11-21 23:11:47 +0100
message:
  Expose lava scheduler as django management command
added:
  lava_scheduler_app/management/
  lava_scheduler_app/management/__init__.py
  lava_scheduler_app/management/commands/
  lava_scheduler_app/management/commands/__init__.py
  lava_scheduler_app/management/commands/scheduler.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
diff mbox

Patch

=== added directory 'lava_scheduler_app/management'
=== added file 'lava_scheduler_app/management/__init__.py'
=== added directory 'lava_scheduler_app/management/commands'
=== added file 'lava_scheduler_app/management/commands/__init__.py'
=== added file 'lava_scheduler_app/management/commands/scheduler.py'
--- lava_scheduler_app/management/commands/scheduler.py	1970-01-01 00:00:00 +0000
+++ lava_scheduler_app/management/commands/scheduler.py	2011-11-21 22:11:47 +0000
@@ -0,0 +1,84 @@ 
+# Copyright (C) 2011 Linaro Limited
+#
+# Author: Zygmunt Krynicki <zygmunt.krynicki@linaro.org>
+#
+# This file is part of LAVA Scheduler.
+#
+# LAVA Scheduler is free software: you can redistribute it and/or modify it
+# under the terms of the GNU Affero General Public License version 3 as
+# published by the Free Software Foundation
+#
+# LAVA Scheduler is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+# more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with LAVA Scheduler.  If not, see <http://www.gnu.org/licenses/>.
+
+
+from django.core.management.base import BaseCommand, CommandError
+from optparse import make_option
+
+
+class Command(BaseCommand):
+
+    help = "Run the LAVA test job scheduler"
+    option_list = BaseCommand.option_list + (
+        make_option('--use-fake',
+                    action='store_true',
+                    dest='use_fake',
+                    default=False,
+                    help="Use fake dispatcher (for testing)"),
+        make_option('--dispatcher',
+                    action="store",
+                    dest="dispatcher",
+                    default="lava-dispatch",
+                    help="Dispatcher command to invoke"),
+        make_option('-l', '--loglevel',
+                    action='store',
+                    default='WARNING',
+                    help="Log level, default is WARNING"),
+        make_option('-f', '--logfile',
+                    action='store',
+                    default=None,
+                    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
+
+        from twisted.internet import defer, reactor
+
+        from lava_scheduler_daemon.service import BoardSet
+        from lava_scheduler_daemon.config import get_config
+
+        from lava_scheduler_daemon.dbjobsource import DatabaseJobSource
+
+        self._configure_logging(options['loglevel'], options['logfile'])
+
+        source = DatabaseJobSource()
+
+        if options['use_fake']:
+            dispatcher = os.path.join(
+                os.path.dirname(os.path.dirname(os.path.abspath(__file__))),
+                'fake-dispatcher')
+        else:
+            dispatcher = options['dispatcher']
+        service = BoardSet(source, dispatcher, reactor)
+        reactor.callWhenRunning(service.startService)
+        reactor.run()