def get_launch_by_id(self, launch_id): """ Given a Launch id, return details of the Launch :param launch_id: launch id :return: Launch object """ m_launch = self.launches.find_one({'launch_id': launch_id}) if m_launch: return Launch.from_dict(m_launch) raise ValueError('No Launch exists with launch_id: {}'.format(launch_id))
def recover_offline(self, launch_id, ignore_errors=False): # get the launch directory m_launch = self.get_launch_by_id(launch_id) try: self.m_logger.debug("RECOVERING fw_id: {}".format(m_launch.fw_id)) # look for ping file - update the FireWork if this is the case ping_loc = os.path.join(m_launch.launch_dir, "FW_ping.json") if os.path.exists(ping_loc): with open(ping_loc) as f: ping_time = datetime.datetime.strptime(json.loads(f.read())['ping_time'], "%Y-%m-%dT%H:%M:%S.%f") self.ping_launch(launch_id, ping_time) # look for action in FW_offline.json offline_loc = os.path.join(m_launch.launch_dir, "FW_offline.json") with open(offline_loc) as f: offline_data = json.loads(f.read()) if 'started_on' in offline_data: m_launch.state = 'RUNNING' for s in m_launch.state_history: if s['state'] == 'RUNNING': s['created_on'] = datetime.datetime.strptime(offline_data['started_on'], "%Y-%m-%dT%H:%M:%S.%f") self.launches.find_and_modify({'launch_id': m_launch.launch_id}, m_launch.to_db_dict(), upsert=True) if 'fwaction' in offline_data: fwaction = FWAction.from_dict(offline_data['fwaction']) state = offline_data['state'] m_launch = Launch.from_dict( self.complete_launch(launch_id, fwaction, state)) for s in m_launch.state_history: if s['state'] == offline_data['state']: s['created_on'] = datetime.datetime.strptime(offline_data['completed_on'], "%Y-%m-%dT%H:%M:%S.%f") self.launches.find_and_modify({'launch_id': m_launch.launch_id}, m_launch.to_db_dict(), upsert=True) self.offline_runs.update({"launch_id": launch_id}, {"$set": {"completed":True}}) # update the updated_on self.offline_runs.update({"launch_id": launch_id}, {"$set": {"updated_on": datetime.datetime.utcnow().isoformat()}}) return None except: if not ignore_errors: traceback.print_exc() return m_launch.fw_id