Example #1
0
    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())
Example #5
0
    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())
Example #8
0
 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"])