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)
27
30
if not self._package_store:
50
53
if "packages" in message_types:
51
54
self.spawn_reporter()
56
def _run_fake_reporter(self, args):
57
"""Run a fake-reporter in-process."""
59
class FakeFacade(object):
61
A fake facade to workaround the issue that the SmartFacade
62
essentially allows only once instance per process.
67
result = {"pentium": "i386",
69
"x86_64": "amd64"}.get(arch)
72
elif (arch[0] == "i" and arch.endswith("86")):
76
if getattr(self, "_fake_reporter", None) is None:
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,
89
self._fake_reporter.global_store_filename = os.path.join(
90
self.config.master_data_path, "package", "database")
91
self._fake_reporter_running = False
93
if self._fake_reporter_running:
94
from twisted.internet.defer import succeed
97
self._fake_reporter_running = True
98
result = self._fake_reporter.run()
100
def done(passthrough):
101
self._fake_reporter_running = False
104
return result.addBoth(done)
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()
112
if self.config.clones > 0:
113
if self.config.is_clone:
114
return self._run_fake_reporter(args)
116
env["FAKE_GLOBAL_PACKAGE_STORE"] = "1"
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,
64
124
result.addCallback(self._got_reporter_output)