Internet outage detection
This commit is contained in:
parent
ff681adfe9
commit
bdd658dddb
1 changed files with 14 additions and 2 deletions
|
@ -24,6 +24,7 @@ class FileServer(ConnectionServer):
|
||||||
else:
|
else:
|
||||||
self.port_opened = None # Is file server opened on router
|
self.port_opened = None # Is file server opened on router
|
||||||
self.sites = {}
|
self.sites = {}
|
||||||
|
self.last_request = time.time()
|
||||||
|
|
||||||
# Handle request to fileserver
|
# Handle request to fileserver
|
||||||
def handleRequest(self, connection, message):
|
def handleRequest(self, connection, message):
|
||||||
|
@ -35,6 +36,17 @@ class FileServer(ConnectionServer):
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
self.log.debug("FileRequest: %s %s" % (str(connection), message["cmd"]))
|
self.log.debug("FileRequest: %s %s" % (str(connection), message["cmd"]))
|
||||||
|
|
||||||
|
# Internet connection outage detection
|
||||||
|
if len(self.connections) > 5:
|
||||||
|
if time.time() - self.last_request > 60*5/max(1,len(self.connections)/20):
|
||||||
|
self.log.info("Internet outage detected, no requests received for %.0fs" % (time.time() - self.last_request))
|
||||||
|
self.port_opened = None # Check if we still has the open port on router
|
||||||
|
self.last_request = time.time()
|
||||||
|
gevent.spawn(self.checkSites, check_files=False)
|
||||||
|
else:
|
||||||
|
self.last_request = time.time()
|
||||||
|
|
||||||
req = FileRequest(self, connection)
|
req = FileRequest(self, connection)
|
||||||
req.route(message["cmd"], message.get("req_id"), message.get("params"))
|
req.route(message["cmd"], message.get("req_id"), message.get("params"))
|
||||||
|
|
||||||
|
@ -168,6 +180,7 @@ class FileServer(ConnectionServer):
|
||||||
# Check sites integrity
|
# Check sites integrity
|
||||||
@util.Noparallel()
|
@util.Noparallel()
|
||||||
def checkSites(self, check_files=True):
|
def checkSites(self, check_files=True):
|
||||||
|
self.log.debug("Checking sites...")
|
||||||
sites_checking = False
|
sites_checking = False
|
||||||
if self.port_opened is None: # Test and open port if not tested yet
|
if self.port_opened is None: # Test and open port if not tested yet
|
||||||
if len(self.sites) <= 2: # Don't wait port opening on first startup
|
if len(self.sites) <= 2: # Don't wait port opening on first startup
|
||||||
|
@ -179,7 +192,6 @@ class FileServer(ConnectionServer):
|
||||||
self.tor_manager.startOnions()
|
self.tor_manager.startOnions()
|
||||||
|
|
||||||
if not sites_checking:
|
if not sites_checking:
|
||||||
self.log.debug("Checking sites integrity..")
|
|
||||||
for address, site in self.sites.items(): # Check sites integrity
|
for address, site in self.sites.items(): # Check sites integrity
|
||||||
gevent.spawn(self.checkSite, site, check_files) # Check in new thread
|
gevent.spawn(self.checkSite, site, check_files) # Check in new thread
|
||||||
time.sleep(2) # Prevent too quick request
|
time.sleep(2) # Prevent too quick request
|
||||||
|
@ -235,7 +247,7 @@ class FileServer(ConnectionServer):
|
||||||
last_time = time.time()
|
last_time = time.time()
|
||||||
while 1:
|
while 1:
|
||||||
time.sleep(30)
|
time.sleep(30)
|
||||||
if time.time() - last_time > 60: # If taken more than 60 second then the computer was in sleep mode
|
if time.time() - max(self.last_request, last_time) > 60*3: # If taken more than 3 minute then the computer was in sleep mode
|
||||||
self.log.info(
|
self.log.info(
|
||||||
"Wakeup detected: time wrap from %s to %s (%s sleep seconds), acting like startup..." %
|
"Wakeup detected: time wrap from %s to %s (%s sleep seconds), acting like startup..." %
|
||||||
(last_time, time.time(), time.time() - last_time)
|
(last_time, time.time(), time.time() - last_time)
|
||||||
|
|
Loading…
Reference in a new issue