~launchpad-pqm/launchpad/devel

10637.3.1 by Guilherme Salgado
Use the default python version instead of a hard-coded version
1
#!/usr/bin/python -S
8687.15.7 by Karl Fogel
Add the copyright header block to more files.
2
#
14027.3.2 by Jeroen Vermeulen
Merge devel, resolve conflicts.
3
# Copyright 2009-2011 Canonical Ltd.  This software is licensed under the
8687.15.7 by Karl Fogel
Add the copyright header block to more files.
4
# GNU Affero General Public License version 3 (see the file LICENSE).
5
4935.3.7 by Curtis Hovey
Added bad name suppression to cronscripts.
6
# pylint: disable-msg=C0103,W0403
2908.4.9 by Guilherme Salgado
Implementation of the mirror prober and a bunch other things
7
8
"""Script to probe distribution mirrors and check how up-to-date they are."""
9
14027.3.2 by Jeroen Vermeulen
Merge devel, resolve conflicts.
10
import os
11
2908.4.9 by Guilherme Salgado
Implementation of the mirror prober and a bunch other things
12
import _pythonpath
13
14605.1.1 by Curtis Hovey
Moved canonical.config to lp.services.
14
from lp.services.config import config
14027.3.2 by Jeroen Vermeulen
Merge devel, resolve conflicts.
15
from lp.registry.interfaces.distributionmirror import MirrorContent
16
from lp.registry.scripts.distributionmirror_prober import DistroMirrorProber
8356.1.1 by Leonard Richardson
Partial move.
17
from lp.services.scripts.base import (
12000.2.13 by Jonathan Lange
Move a bunch of the logic out of the cronscript and into the module
18
    LaunchpadCronScript,
19
    LaunchpadScriptFailure,
11882.2.2 by Jonathan Lange
Clear up a heck of a lot of imports from canonical.launchpad.interfaces.
20
    )
12000.2.13 by Jonathan Lange
Move a bunch of the logic out of the cronscript and into the module
21
22
23
class DistroMirrorProberScript(LaunchpadCronScript):
4285.2.5 by Mark Shuttleworth
Test fixes for renamed series
24
    usage = ('%prog --content-type=(archive|cdimage) [--force] '
4687.1.1 by Guilherme Salgado
Implement a limit to the number of mirrors we probe. (Fix https://bugs.launchpad.net/launchpad/+bug/123954)
25
             '[--no-owner-notification] [--max-mirrors=N]')
3691.348.13 by kiko
Convert a couple of cronscripts over to LaunchpadScript
26
27
    def add_my_options(self):
28
        self.parser.add_option('--content-type',
29
            dest='content_type', default=None, action='store',
30
            help='Probe only mirrors of the given type')
31
        self.parser.add_option('--force',
32
            dest='force', default=False, action='store_true',
7222.2.4 by Curtis Hovey
Happify lint.
33
            help='Force the probing of mirrors that were probed recently')
3691.214.22 by Guilherme Salgado
Add an option to the mirror-prober script to not send notification to mirror owners.
34
        self.parser.add_option('--no-owner-notification',
35
            dest='no_owner_notification', default=False, action='store_true',
36
            help='Do not send failure notification to mirror owners.')
3691.214.24 by Guilherme Salgado
Implement the new +countrymirrors-archive page, together with some fixes to its underlying bits, new/improved tests and a new argument to the prober script, which causes it to not connect to anything other than localhost
37
        self.parser.add_option('--no-remote-hosts',
38
            dest='no_remote_hosts', default=False, action='store_true',
39
            help='Do not try to connect to any host other than localhost.')
4687.1.1 by Guilherme Salgado
Implement a limit to the number of mirrors we probe. (Fix https://bugs.launchpad.net/launchpad/+bug/123954)
40
        self.parser.add_option('--max-mirrors',
41
            dest='max_mirrors', default=None, action='store', type="int",
42
            help='Only probe N mirrors.')
3691.348.13 by kiko
Convert a couple of cronscripts over to LaunchpadScript
43
12000.2.12 by Jonathan Lange
Try to separate out some of the script's logic.
44
    def main(self):
45
        if self.options.content_type == 'archive':
46
            content_type = MirrorContent.ARCHIVE
47
        elif self.options.content_type == 'cdimage':
48
            content_type = MirrorContent.RELEASE
49
        else:
50
            raise LaunchpadScriptFailure(
51
                'Wrong value for argument --content-type: %s'
52
                % self.options.content_type)
53
54
        if config.distributionmirrorprober.use_proxy:
55
            os.environ['http_proxy'] = config.launchpad.http_proxy
56
            self.logger.debug("Using %s as proxy." % os.environ['http_proxy'])
57
        else:
58
            self.logger.debug("Not using any proxy.")
59
12000.2.19 by Jonathan Lange
Docstring, better name
60
        DistroMirrorProber(self.txn, self.logger).probe(
12000.2.16 by Jonathan Lange
Correct test failure
61
            content_type, self.options.no_remote_hosts, self.options.force,
62
            self.options.max_mirrors, not self.options.no_owner_notification)
12000.2.12 by Jonathan Lange
Try to separate out some of the script's logic.
63
2908.4.9 by Guilherme Salgado
Implementation of the mirror prober and a bunch other things
64
65
if __name__ == '__main__':
12000.2.13 by Jonathan Lange
Move a bunch of the logic out of the cronscript and into the module
66
    script = DistroMirrorProberScript(
67
        'distributionmirror-prober',
68
        dbuser=config.distributionmirrorprober.dbuser)
14022.3.2 by William Grant
LaunchpadScript no longer uses initZopeless.
69
    script.lock_and_run(isolation='autocommit')