~ubuntu-branches/ubuntu/precise/landscape-client/precise

« back to all changes in this revision

Viewing changes to landscape/monitor/packagemonitor.py

  • Committer: Package Import Robot
  • Author(s): Andreas Hasenack
  • Date: 2012-03-19 09:33:34 UTC
  • mto: This revision was merged to the branch mainline in revision 41.
  • Revision ID: package-import@ubuntu.com-20120319093334-oxjttz163vvfgq8s
Tags: upstream-12.04
ImportĀ upstreamĀ versionĀ 12.04

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
 
23
23
    def register(self, registry):
24
24
        self.config = registry.config
 
25
        if self.config.clones and self.config.is_clone:
 
26
            # Run clones a bit more frequently in order to catch up
 
27
            self.run_interval = 60  # 300
25
28
        super(PackageMonitor, self).register(registry)
26
29
 
27
30
        if not self._package_store:
50
53
        if "packages" in message_types:
51
54
            self.spawn_reporter()
52
55
 
 
56
    def _run_fake_reporter(self, args):
 
57
        """Run a fake-reporter in-process."""
 
58
 
 
59
        class FakeFacade(object):
 
60
            """
 
61
            A fake facade to workaround the issue that the SmartFacade
 
62
            essentially allows only once instance per process.
 
63
            """
 
64
 
 
65
            def get_arch(self):
 
66
                arch = os.uname()[-1]
 
67
                result = {"pentium": "i386",
 
68
                          "i86pc": "i386",
 
69
                          "x86_64": "amd64"}.get(arch)
 
70
                if result:
 
71
                    arch = result
 
72
                elif (arch[0] == "i" and arch.endswith("86")):
 
73
                    arch = "i386"
 
74
                return arch
 
75
 
 
76
        if getattr(self, "_fake_reporter", None) is None:
 
77
 
 
78
            from landscape.package.reporter import (
 
79
                FakeReporter, PackageReporterConfiguration)
 
80
            from landscape.package.store import FakePackageStore
 
81
            package_facade = FakeFacade()
 
82
            package_config = PackageReporterConfiguration()
 
83
            package_config.load(args + ["-d", self.config.data_path,
 
84
                                        "-l", self.config.log_dir])
 
85
            package_store = FakePackageStore(package_config.store_filename)
 
86
            self._fake_reporter = FakeReporter(package_store, package_facade,
 
87
                                               self.registry.broker,
 
88
                                               package_config)
 
89
            self._fake_reporter.global_store_filename = os.path.join(
 
90
                self.config.master_data_path, "package", "database")
 
91
            self._fake_reporter_running = False
 
92
 
 
93
        if self._fake_reporter_running:
 
94
            from twisted.internet.defer import succeed
 
95
            return succeed(None)
 
96
 
 
97
        self._fake_reporter_running = True
 
98
        result = self._fake_reporter.run()
 
99
 
 
100
        def done(passthrough):
 
101
            self._fake_reporter_running = False
 
102
            return passthrough
 
103
 
 
104
        return result.addBoth(done)
 
105
 
53
106
    def spawn_reporter(self):
54
107
        args = ["--quiet"]
55
108
        if self.config.config:
56
109
            args.extend(["-c", self.config.config])
 
110
        env = os.environ.copy()
 
111
 
 
112
        if self.config.clones > 0:
 
113
            if self.config.is_clone:
 
114
                return self._run_fake_reporter(args)
 
115
            else:
 
116
                env["FAKE_GLOBAL_PACKAGE_STORE"] = "1"
57
117
 
58
118
        # path is set to None so that getProcessOutput does not
59
119
        # chdir to "." see bug #211373
60
120
        result = getProcessOutput(self._reporter_command,
61
 
                                  args=args, env=os.environ,
 
121
                                  args=args, env=env,
62
122
                                  errortoo=1,
63
123
                                  path=None)
64
124
        result.addCallback(self._got_reporter_output)