--- a/landscape/broker/client.py +++ b/landscape/broker/client.py @@ -1,4 +1,5 @@ from logging import info, exception +import random from twisted.internet.defer import maybeDeferred, succeed @@ -104,7 +105,10 @@ if self.run_immediately: self.run() if self.run_interval is not None: - self._loop = self.client.reactor.call_every(self.run_interval, + interval = self.run_interval + interval = interval + (random.random() * (interval * .1)) + interval = interval - (random.random() * (interval * .1)) + self._loop = self.client.reactor.call_every(interval, self.run) --- a/landscape/broker/exchange.py +++ b/landscape/broker/exchange.py @@ -344,6 +344,7 @@ """ import time import logging +import random from landscape.lib.hashlib import md5 from twisted.internet.defer import Deferred, succeed @@ -642,6 +643,9 @@ else: interval = self._config.exchange_interval + interval = interval + (random.random() * (interval * .1)) + interval = interval - (random.random() * (interval * .1)) + if self._notification_id is not None: self._reactor.cancel_call(self._notification_id) notification_interval = interval - 10 --- a/landscape/broker/ping.py +++ b/landscape/broker/ping.py @@ -34,6 +34,7 @@ """ import urllib +import random from logging import info from twisted.python.failure import Failure @@ -146,7 +147,10 @@ def _schedule(self): """Schedule a new ping using the current ping interval.""" - self._call_id = self._reactor.call_later(self._config.ping_interval, + interval = self._config.ping_interval + interval = interval + (random.random() * (interval * .1)) + interval = interval - (random.random() * (interval * .1)) + self._call_id = self._reactor.call_later(interval, self.ping) def _handle_set_intervals(self, message): --- a/landscape/plugin.py +++ b/landscape/plugin.py @@ -1,4 +1,5 @@ from logging import info +import random from landscape.log import format_object @@ -57,4 +58,7 @@ def register(self, registry): self.registry = registry if hasattr(self, "run") and self.run_interval is not None: - registry.reactor.call_every(self.run_interval, self.run) + interval = self.run_interval + interval = interval + (random.random() * (interval * .1)) + interval = interval - (random.random() * (interval * .1)) + registry.reactor.call_every(interval, self.run)