def check(self): # check if job is overdue if self.last_seen + timedelta(minutes=self.interval) < datetime.utcnow(): self.status = 'offline' LogEntry.log_event(self.key(), 'Error', 'job is overdue') # perform all actions for action_key in self.timeout_actions: try: db.get(action_key).perform_action() except Exception as exp: logging.error('Error executing timeout action: ' + str(exp)) self.put()
def update(self, remote_ip, uptime): self.last_seen = datetime.utcnow() if self.last_ip != remote_ip: LogEntry.log_event(self.key(), 'Info', 'IP changed - new IP: ' + remote_ip) self.last_ip = remote_ip if uptime is not None: if self.update is not None and self.uptime > uptime: LogEntry.log_event(self.key(), 'Reboot', 'Reboot - Previous uptime: ' + str(timedelta(seconds=self.uptime))) for action_key in self.reboot_actions: try: db.get(action_key).perform_action() except Exception as exp: logging.error('Error executing reboot action: ' + str(exp)) self.uptime = uptime self.put() # job got back online if self.status == 'offline': self.status = 'online' LogEntry.log_event(self.key(), 'Info', 'Job back online - IP: ' + remote_ip) # perform all back_online actions for action_key in self.backonline_actions: try: db.get(action_key).perform_action() except Exception as exp: logging.error('Error executing backonline action: ' + str(exp)) # delete previous (waiting) task if self.task_name is not None: logging.debug('old task: ' + self.task_name) Queue.delete_tasks(Queue(), Task(name=self.task_name)) task_name = self.name + '_' + datetime.utcnow().strftime('%Y-%m-%d_%H-%M-%S-%f') # create task to be executed in updated no called in interval minutes taskqueue.add(name=task_name, url='/task', params={'key': self.key()}, countdown=(self.interval + 2) * 60) self.task_name = task_name self.put()