Don't let server mark client as offline until readings fail 3 times in a row
previously we were only letting this fail once, if that
This commit is contained in:
		
							parent
							
								
									ab38143039
								
							
						
					
					
						commit
						018a9dcb08
					
				
					 1 changed files with 20 additions and 4 deletions
				
			
		| 
						 | 
				
			
			@ -80,10 +80,26 @@ class TempmonServerDaemon(Daemon):
 | 
			
		|||
        online = True
 | 
			
		||||
        for probe in client.enabled_probes():
 | 
			
		||||
            online = online and bool(self.check_readings_for_probe(session, probe, cutoff))
 | 
			
		||||
        if not online and client.online:
 | 
			
		||||
            log.info("marking client as OFFLINE: {}".format(client))
 | 
			
		||||
            client.online = False
 | 
			
		||||
            send_email(self.config, 'tempmon_client_offline', {"client":client, "now":localtime(self.config,self.now,from_utc=True)})
 | 
			
		||||
 | 
			
		||||
        # if client was previously marked online, but we have no "new"
 | 
			
		||||
        # readings, then let's look closer to see if it's been long enough to
 | 
			
		||||
        # mark it offline
 | 
			
		||||
        if client.online and not online:
 | 
			
		||||
 | 
			
		||||
            # we consider client offline if it has failed to take readings for
 | 
			
		||||
            # 3 times in a row.  allow a one minute buffer for good measure.
 | 
			
		||||
            cutoff = self.now - datetime.timedelta(seconds=(delay * 3) + 60)
 | 
			
		||||
            reading = session.query(tempmon.Reading)\
 | 
			
		||||
                             .filter(tempmon.Reading.client == client)\
 | 
			
		||||
                             .filter(tempmon.Reading.taken >= cutoff)\
 | 
			
		||||
                             .first()
 | 
			
		||||
            if not reading:
 | 
			
		||||
                log.info("marking client as OFFLINE: {}".format(client))
 | 
			
		||||
                client.online = False
 | 
			
		||||
                send_email(self.config, 'tempmon_client_offline', {
 | 
			
		||||
                    'client': client,
 | 
			
		||||
                    'now': localtime(self.config, self.now, from_utc=True),
 | 
			
		||||
                })
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    def check_readings_for_probe(self, session, probe, cutoff):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue