def post(self): request = self._request_parser.parse() validation_errors = self._request_parser.validate(request) if len(validation_errors) != 0: return validation_errors, 422 new_id = self._patient_repo.create(request.copy()) response = {'id': new_id} response.update(request.copy()) return response, 201
def autoland_status(request_id): dbconn = get_dbconn() cursor = dbconn.cursor() query = """ select destination, request, landed, result from Transplant where id = %(request_id)s """ try: cursor.execute(query, ({'request_id': int(request_id)})) except ValueError: abort(404) row = cursor.fetchone() if row: destination, request, landed, result = row status = request.copy() del status['pingback_url'] status['destination'] = destination status['landed'] = landed status['result'] = result if landed else '' status['error_msg'] = result if not landed else '' return jsonify(status) abort(404)
def autoland_status(request_id): dbconn = get_dbconn() cursor = dbconn.cursor() query = """ select destination, request, landed, result from Transplant where id = %(request_id)s """ try: cursor.execute(query, ({"request_id": int(request_id)})) except ValueError: abort(404) row = cursor.fetchone() if row: destination, request, landed, result = row status = request.copy() del status["pingback_url"] status["destination"] = destination status["landed"] = landed status["result"] = result if landed else "" status["error_msg"] = result if not landed else "" return jsonify(status) abort(404)
def manage_immediate_request(scheduler, schedule, request, appname, algo_name, end_time): ''' NOTE : for immediate requests we will still need the end time because start time will be immediate. So make sure it's filled in the JSON and it's only a one time schedule. NOTE : Length of durations list should be 1. ''' start_time = datetime.now() # request["service_id"] = str(scheduler.id) if end_time is None: h, m, s = schedule["time"]["durations"][0].split(":") h, m, s = int(h), int(m), int(s) duration = timedelta(hours=h, minutes=m, seconds=s) end_time = start_time + duration schedule_req = { "start_time": start_time, "end_time": end_time, "repeating": False, "app_name": appname, "algo_name": algo_name, "value": request.copy() } print("Scheduling : ") print(f"Start time : {start_time}") print(f"End time : {end_time}") scheduler.add_request(schedule_req.copy())
def put(self, id): request = self._request_parser.parse() validation_errors = self._request_parser.validate(request) if len(validation_errors) != 0: return validation_errors, 422 self._patient_repo.update(id, request.copy()) return None, 204
def add_request(self, request): _id = self.id self.id += 1 request["value"]["service_id"] = _id thread = threading.Thread(target=self.add_request_to_database, args=(_id, request)) thread.start() # print(request) elem = (request["start_time"], _id, request.copy()) heapq.heappush(self.scheduling_queue, elem) print("request added to scheduling queue : ", _id, request["value"]["service_id"])
def manage_scheduled_request(scheduler, schedule, request, appname, algo_name): start_times = schedule["time"]["startTimes"] durations = schedule["time"]["durations"] days = change_weekdays_to_indices(schedule["days"]) for (start_time, dur) in zip(start_times, durations): h, m, s = start_time.split(":") h, m, s = int(h), int(m), int(s) today = datetime.today() start_time_obj = datetime(hour=h, minute=m, second=s, year=today.year, month=today.month, day=today.day) h, m, s = dur.split(":") h, m, s = int(h), int(m), int(s) duration = timedelta(hours=h, minutes=m, seconds=s) curr_weekday = datetime.today().weekday() for day in days: if day < curr_weekday: start_dtime_obj = start_time_obj + timedelta(days=7 + day - curr_weekday) elif day > curr_weekday: start_dtime_obj = start_time_obj + timedelta(days=day - curr_weekday) else: if datetime.now() < start_time_obj: start_dtime_obj = start_time_obj else: start_dtime_obj = start_time_obj + timedelta(days=7) end_time_obj = start_dtime_obj + duration # request["service_id"] = str(scheduler.id) schedule_req = { "start_time": start_dtime_obj, "end_time": end_time_obj, "repeating": True, "app_name": appname, "algo_name": algo_name, "value": request.copy() } print("Scheduling : ") print(f"Start time : {start_dtime_obj}") print(f"End time : {end_time_obj}") scheduler.add_request(schedule_req.copy())
def poll_scheduling_queue(self): curr_time = datetime.now() to_be_returned = list() while len(self.scheduling_queue) > 0: key, _id, request = self.scheduling_queue[0] if key <= curr_time: to_be_returned.append(request["value"]) heapq.heappop(self.scheduling_queue) if request["repeating"]: new_start_time = request["start_time"] + timedelta( days=7) #schedule it to next week new_end_time = request["end_time"] + timedelta( days=7) #schedule it to next week new_req = request.copy() new_req["start_time"] = new_start_time new_req["end_time"] = new_end_time self.add_request(new_req, old_id=_id) #add to running queue self.add_to_running_queue(request, start_id=_id) else: break return to_be_returned
def add_to_running_queue(self, request, start_id): request["value"]["service_id"] = start_id elem = (request["end_time"], start_id, request.copy()) heapq.heappush(self.running_queue, elem) print("request added to running queue : ", start_id, request["value"]["service_id"])