# HG changeset patch # User Goffi # Date 1515776614 -3600 # Node ID 1593e00078d239917300964b23b354d900c1f0ab # Parent c1c74d97a6911032b78240b9c293944ccf863ec1 server: reconnect SERVICE_PROFILE if it has been disconnected: if the profile is disconnected twice in a short time (currently 15 s), Libervia will not try to reconnect it and will log an error message instead. diff -r c1c74d97a691 -r 1593e00078d2 src/server/server.py --- a/src/server/server.py Fri Jan 12 15:42:58 2018 +0100 +++ b/src/server/server.py Fri Jan 12 18:03:34 2018 +0100 @@ -49,6 +49,7 @@ import uuid import urlparse import urllib +import time from httplib import HTTPS_PORT import libervia from libervia.server import websockets @@ -1148,6 +1149,7 @@ web_resource.Resource.__init__(self) self.register = None self.sat_host = sat_host + self._last_service_prof_disconnect = time.time() self.signalDeferred = {} # dict of deferred (key: profile, value: Deferred) # which manages the long polling HTTP request with signals self.queue = {} @@ -1245,8 +1247,26 @@ # self.sat_host._logged(profile, request) def disconnected(self, profile): + if profile == C.SERVICE_PROFILE: + # if service profile has been disconnected, we try to reconnect it + # if we can't we show error message + # and if we have 2 disconnection in a short time, we don't try to reconnect + # and display an error message + disconnect_delta = time.time() - self._last_service_prof_disconnect + if disconnect_delta < 15: + log.error(_(u'Service profile disconnected twice in a short time, please check connection')) + else: + log.info(_(u"Service profile has been disconnected, but we need it! Reconnecting it...")) + self.sat_host.bridge.connect(profile, + self.sat_host.options['passphrase'], + {}, + errback=lambda failure_: log.error(_(u"Can't reconnect service profile, please check connection: {reason}").format(reason=failure_)) + ) + self._last_service_prof_disconnect = time.time() + return + if not profile in self.sat_host.prof_connected: - log.error("'disconnected' signal received for a not connected profile") + log.info(_(u"'disconnected' signal received for a not connected profile ({profile})").format(profile=profile)) return self.sat_host.prof_connected.remove(profile) if profile in self.signalDeferred: