Esempio n. 1
0
File: app.py Progetto: khushu12/ck
def main(matched_flag):
    dispatch = MTList()
    cooking = MTList()
    matched_id = MTList()
    average_order_time = []
    average_courier_time = []
    _id = None
    global _index
    _index = 0
    analysis_filename = config.fifo_analysis_file
    log_file = config.fifo_analysis_log_file

    if matched_flag:
        analysis_filename = config.matched_analysis_file
        log_file = config.matched_analysis_log_file

    logging.basicConfig(filename=log_file,
                        filemode='w',
                        format='%(levelname)s - %(message)s',
                        level=logging.INFO)

    try:
        reception_thread = Reception(cooking, matched_id)
        cooking = reception_thread.get_cooking_queue()
        if matched_flag:
            matched_id = reception_thread.get_matched_id_queue()
        time.sleep(1)

        cooking_thread_1 = cook(dispatch, cooking)
        # cooking_thread_2 = cook(dispatch , cooking)

        #Start Accepting orders
        reception_thread.start()
        time.sleep(1)

        # Start Cooking orders ( 2 cooking threads mean 2 cooks in 1 resto)
        cooking_thread_1.start()
        # cooking_thread_2.start()
        time.sleep(1)
        list_of_threads = []
        dispatch = cooking_thread_1.get_delivery_queue()
        csv_writer = Analysis()

        def main_app(order):
            global _index
            if order != None:
                logging.info("order is {}".format(order))

                #start dispatching courier for every new order
                logging.info("courier order {}".format(order))
                courier_thread = courier(order)
                courier_thread.start()
                list_of_threads.append(courier_thread)
                order_wait_time, courier_wait_time = courier_thread.get_order_details(
                    order)

                #for 0 courier wait time we might  return float(below to check)
                if not isinstance(courier_wait_time, float):
                    courier_wait_time = float(
                        courier_wait_time.total_seconds() * 1000)
                average_courier_time.append(courier_wait_time)
                mean_courier = mean(average_courier_time)
                logging.info(
                    "current_courier_wait_time: {}ms \t average_courier_wait_time {}ms"
                    .format(courier_wait_time, mean_courier))

                # for 0 order wait time we might  return float(below to check)
                if not isinstance(order_wait_time, float):
                    order_wait_time = float(order_wait_time.total_seconds() *
                                            1000)
                average_order_time.append(order_wait_time)
                mean_order = mean(average_order_time)
                logging.info(
                    "current_order_wait_time: {}ms \t average_order_wait_time {}ms"
                    .format(order_wait_time, mean_order))
                logging.info("*" * 100)

                #Below to wriite to a csv file(later used for plotting)
                csv_writer._write(analysis_filename,
                                  [_index, mean_order, mean_courier])
                _index += 1

        while 1:
            # add id as optional arg for below dispatch ( Matched ) else FIFO
            if matched_id != []:
                _id = matched_id.get()
            if _id:
                order = dispatch.get(_id)
            else:
                order = dispatch.get()
            main_app(order)

        reception_thread.join()
        cooking_thread_1.join()
        # cooking_thread_2.join()
        for thread in list_of_threads:
            thread.join()

    except Exception as e:
        logging.exception(str(e))
Esempio n. 2
0
 def test_get(self):
     mtlist = MTList()
     acha_naam = 'a'
     mtlist.put(acha_naam)
     self.assertEqual(acha_naam, mtlist.get())
     self.assertNotIn(acha_naam, mtlist.value)