class TravelRequestsSimulator(object): def __init__(self): self.mongodb_database_connection = MongodbDatabaseConnection(host=mongodb_host, port=mongodb_port) log(module_name='travel_requests_simulator', log_type='DEBUG', log_message='mongodb_database_connection: established') def clear_travel_requests_collection(self): """ Clear all the documents of the TravelRequests collection. :return: None """ self.mongodb_database_connection.clear_travel_request_documents_collection() log(module_name='travel_requests_simulator', log_type='DEBUG', log_message='clear_travel_request_documents_collection: ok') def delete_travel_request_documents(self, object_ids=None, client_ids=None, bus_line_ids=None, min_departure_datetime=None, max_departure_datetime=None): """ Delete multiple travel_request_documents. :param object_ids: [ObjectId] :param client_ids: [int] :param bus_line_ids: [int] :param min_departure_datetime: datetime :param max_departure_datetime :return: None """ self.mongodb_database_connection.delete_travel_request_documents( object_ids=object_ids, client_ids=client_ids, bus_line_ids=bus_line_ids, min_departure_datetime=min_departure_datetime, max_departure_datetime=max_departure_datetime ) log(module_name='travel_requests_simulator', log_type='DEBUG', log_message='delete_travel_request_documents: ok') def generate_random_travel_request_documents(self, initial_datetime, min_number_of_travel_request_documents, max_number_of_travel_request_documents): """ Generate random number of travel_request_documents for each bus_line, for a 24hour period starting from a selected datetime, and store them at the corresponding collection of the System Database. :param initial_datetime: datetime :param min_number_of_travel_request_documents: int :param max_number_of_travel_request_documents: int :return: None """ bus_lines = self.mongodb_database_connection.find_bus_line_documents() for bus_line in bus_lines: number_of_travel_request_documents = random.randint( min_number_of_travel_request_documents, max_number_of_travel_request_documents ) self.generate_travel_request_documents( initial_datetime=initial_datetime, number_of_travel_request_documents=number_of_travel_request_documents, bus_line=bus_line ) def generate_travel_request_documents(self, initial_datetime, number_of_travel_request_documents, bus_line=None, bus_line_id=None): """ Generate a specific number of travel_request_documents, for the selected bus_line, for a 24hour period starting from a selected datetime, and store them at the corresponding collection of the System Database. :param initial_datetime: datetime :param number_of_travel_request_documents: int :param bus_line: bus_line_document :param bus_line_id: int :return: None """ # 1: The inputs: initial_datetime, number_of_travel_request_documents, and (bus_line or bus_line_id) # are provided to the Travel Requests Simulator, so as a specific number of travel_request_documents # to be generated, for the selected bus_line, for a 24hour period starting from # the selected datetime. # # 2: If the provided bus_line is None, then the Travel Requests Simulator retrieves from the System Database # the bus_line which corresponds to the provided bus_line_id. # if bus_line is None and bus_line_id is None: return None elif bus_line is None: bus_line = self.mongodb_database_connection.find_bus_line_document(bus_line_id=bus_line_id) else: pass bus_stops = bus_line.get('bus_stops') number_of_bus_stops = len(bus_stops) # 3: The Travel Requests Simulator generates the travel_request_documents, taking into consideration # the variation of transportation demand during the hours of the day. # # distribution_weighted_datetimes = [ # (initial_datetime + timedelta(hours=0), 1), # (initial_datetime + timedelta(hours=1), 1), # (initial_datetime + timedelta(hours=2), 1), # (initial_datetime + timedelta(hours=3), 1), # (initial_datetime + timedelta(hours=4), 1), # (initial_datetime + timedelta(hours=5), 1), # (initial_datetime + timedelta(hours=6), 1), # (initial_datetime + timedelta(hours=7), 1), # (initial_datetime + timedelta(hours=8), 1), # (initial_datetime + timedelta(hours=9), 1), # (initial_datetime + timedelta(hours=10), 1), # (initial_datetime + timedelta(hours=11), 1), # (initial_datetime + timedelta(hours=12), 1), # (initial_datetime + timedelta(hours=13), 1), # (initial_datetime + timedelta(hours=14), 1), # (initial_datetime + timedelta(hours=15), 1), # (initial_datetime + timedelta(hours=16), 1), # (initial_datetime + timedelta(hours=17), 1), # (initial_datetime + timedelta(hours=18), 1), # (initial_datetime + timedelta(hours=19), 1), # (initial_datetime + timedelta(hours=20), 1), # (initial_datetime + timedelta(hours=21), 1), # (initial_datetime + timedelta(hours=22), 1), # (initial_datetime + timedelta(hours=23), 1) # ] distribution_weighted_datetimes = [ (initial_datetime + timedelta(hours=i), travel_requests_simulator_datetime_distribution_weights[i]) for i in range(0, 24) ] datetime_population = [val for val, cnt in distribution_weighted_datetimes for i in range(cnt)] travel_request_documents = [] maximum_client_id = self.mongodb_database_connection.get_maximum_or_minimum(collection='travel_request') for i in range(0, number_of_travel_request_documents): client_id = maximum_client_id + 1 maximum_client_id = client_id starting_bus_stop_index = random.randint(0, number_of_bus_stops - 2) starting_bus_stop = bus_stops[starting_bus_stop_index] ending_bus_stop_index = random.randint(starting_bus_stop_index + 1, number_of_bus_stops - 1) ending_bus_stop = bus_stops[ending_bus_stop_index] additional_departure_time_interval = random.randint(0, 59) departure_datetime = (random.choice(datetime_population) + timedelta(minutes=additional_departure_time_interval)) travel_request_document = { 'client_id': client_id, 'bus_line_id': bus_line_id, 'starting_bus_stop': starting_bus_stop, 'ending_bus_stop': ending_bus_stop, 'departure_datetime': departure_datetime, 'arrival_datetime': None, 'starting_timetable_entry_index': None, 'ending_timetable_entry_index': None } travel_request_documents.append(travel_request_document) # 4: The generated travel_request_documents are stored at the # TravelRequests collection of the System Database. # self.mongodb_database_connection.insert_travel_request_documents( travel_request_documents=travel_request_documents )
class TravelRequestsSimulator(object): def __init__(self): self.mongodb_database_connection = MongodbDatabaseConnection(host=mongodb_host, port=mongodb_port) log( module_name="travel_requests_simulator", log_type="DEBUG", log_message="mongodb_database_connection: established", ) def clear_travel_requests_collection(self): """ Clear all the documents of the TravelRequests collection. :return: None """ self.mongodb_database_connection.clear_travel_request_documents_collection() log( module_name="travel_requests_simulator", log_type="DEBUG", log_message="clear_travel_request_documents_collection: ok", ) def delete_travel_request_documents( self, object_ids=None, client_ids=None, line_ids=None, min_departure_datetime=None, max_departure_datetime=None ): """ Delete multiple travel_request_documents. travel_request_document: { '_id', 'client_id', 'line_id', 'starting_bus_stop': {'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}}, 'ending_bus_stop': {'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}}, 'departure_datetime', 'arrival_datetime', 'starting_timetable_entry_index', 'ending_timetable_entry_index' } :param object_ids: [ObjectId] :param client_ids: [int] :param line_ids: [int] :param min_departure_datetime: datetime :param max_departure_datetime :return: None """ self.mongodb_database_connection.delete_travel_request_documents( object_ids=object_ids, client_ids=client_ids, line_ids=line_ids, min_departure_datetime=min_departure_datetime, max_departure_datetime=max_departure_datetime, ) log( module_name="travel_requests_simulator", log_type="DEBUG", log_message="delete_travel_request_documents: ok" ) def generate_random_travel_request_documents( self, initial_datetime, min_number_of_travel_request_documents, max_number_of_travel_request_documents ): """ Generate random number of travel_request_documents for each bus_line, for a 24hour period starting from a selected datetime, and store them at the corresponding collection of the System Database. bus_line_document: { '_id', 'line_id', 'bus_stops': [{'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}}] } :param initial_datetime: datetime :param min_number_of_travel_request_documents: int :param max_number_of_travel_request_documents: int :return: None """ bus_lines = self.mongodb_database_connection.find_bus_line_documents() for bus_line in bus_lines: number_of_travel_request_documents = random.randint( min_number_of_travel_request_documents, max_number_of_travel_request_documents ) self.generate_travel_request_documents( initial_datetime=initial_datetime, number_of_travel_request_documents=number_of_travel_request_documents, bus_line=bus_line, ) def generate_travel_request_documents( self, initial_datetime, number_of_travel_request_documents, bus_line=None, line_id=None ): """ Generate a specific number of travel_request_documents, for the selected bus_line, for a 24hour period starting from a selected datetime, and store them at the corresponding collection of the System Database. bus_line_document: { '_id', 'line_id', 'bus_stops': [{'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}}] } :param initial_datetime: datetime :param number_of_travel_request_documents: int :param bus_line: bus_line_document :param line_id: int :return: None """ # 1: The inputs: initial_datetime, number_of_travel_request_documents, and (bus_line or line_id) # are provided to the Travel Requests Simulator, so as a specific number of travel_request_documents # to be generated, for the selected bus_line, for a 24hour period starting from # the selected datetime. # # 2: If the provided bus_line is None, then the Travel Requests Simulator retrieves from the System Database # the bus_line which corresponds to the provided line_id. # if bus_line is None and line_id is None: return None elif bus_line is None: bus_line = self.mongodb_database_connection.find_bus_line_document(line_id=line_id) else: pass bus_stops = bus_line.get("bus_stops") number_of_bus_stops = len(bus_stops) # 3: The Travel Requests Simulator generates the travel_request_documents, taking into consideration # the variation of transportation demand during the hours of the day. # weighted_datetimes = [ (initial_datetime + timedelta(hours=0), 1), (initial_datetime + timedelta(hours=1), 1), (initial_datetime + timedelta(hours=2), 1), (initial_datetime + timedelta(hours=3), 1), (initial_datetime + timedelta(hours=4), 1), (initial_datetime + timedelta(hours=5), 1), (initial_datetime + timedelta(hours=6), 1), (initial_datetime + timedelta(hours=7), 1), (initial_datetime + timedelta(hours=8), 1), (initial_datetime + timedelta(hours=9), 1), (initial_datetime + timedelta(hours=10), 1), (initial_datetime + timedelta(hours=11), 1), (initial_datetime + timedelta(hours=12), 1), (initial_datetime + timedelta(hours=13), 1), (initial_datetime + timedelta(hours=14), 1), (initial_datetime + timedelta(hours=15), 1), (initial_datetime + timedelta(hours=16), 1), (initial_datetime + timedelta(hours=17), 1), (initial_datetime + timedelta(hours=18), 1), (initial_datetime + timedelta(hours=19), 1), (initial_datetime + timedelta(hours=20), 1), (initial_datetime + timedelta(hours=21), 1), (initial_datetime + timedelta(hours=22), 1), (initial_datetime + timedelta(hours=23), 1), ] datetime_population = [val for val, cnt in weighted_datetimes for i in range(cnt)] travel_request_documents = [] for i in range(0, number_of_travel_request_documents): client_id = i starting_bus_stop_index = random.randint(0, number_of_bus_stops - 2) starting_bus_stop = bus_stops[starting_bus_stop_index] ending_bus_stop_index = random.randint(starting_bus_stop_index + 1, number_of_bus_stops - 1) ending_bus_stop = bus_stops[ending_bus_stop_index] additional_departure_time_interval = random.randint(0, 59) departure_datetime = random.choice(datetime_population) + timedelta( minutes=additional_departure_time_interval ) travel_request_document = { "client_id": client_id, "line_id": line_id, "starting_bus_stop": starting_bus_stop, "ending_bus_stop": ending_bus_stop, "departure_datetime": departure_datetime, "arrival_datetime": None, "starting_timetable_entry_index": None, "ending_timetable_entry_index": None, } travel_request_documents.append(travel_request_document) # 4: The generated travel_request_documents are stored at the # TravelRequests collection of the System Database. # self.mongodb_database_connection.insert_travel_request_documents( travel_request_documents=travel_request_documents )
class MongodbDatabaseConnectionTester(object): def __init__(self): log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='initialize_mongodb_database_connection: starting') self.start_time = time.time() self.mongodb_database_connection = MongodbDatabaseConnection( host=mongodb_host, port=mongodb_port) self.elapsed_time = time.time() - self.start_time log(module_name='mongodb_database_connection_test', log_type='INFO', log_message= 'initialize_mongodb_database_connection: finished - elapsed_time = ' + str(self.elapsed_time) + ' sec') def clear_all_collections(self): log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='clear_all_collections: starting') self.start_time = time.time() self.mongodb_database_connection.clear_all_collections() self.elapsed_time = time.time() - self.start_time log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='clear_all_collections: finished - elapsed_time = ' + str(self.elapsed_time) + ' sec') def clear_address_documents_collection(self): log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='clear_address_documents_collection: starting') self.start_time = time.time() self.mongodb_database_connection.clear_address_documents_collection() self.elapsed_time = time.time() - self.start_time log(module_name='mongodb_database_connection_test', log_type='INFO', log_message= 'clear_address_documents_collection: finished - elapsed_time = ' + str(self.elapsed_time) + ' sec') def clear_bus_line_documents_collection(self): log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='clear_bus_line_documents_collection: starting') self.start_time = time.time() self.mongodb_database_connection.clear_bus_line_documents_collection() self.elapsed_time = time.time() - self.start_time log(module_name='mongodb_database_connection_test', log_type='INFO', log_message= 'clear_bus_line_documents_collection: finished - elapsed_time = ' + str(self.elapsed_time) + ' sec') def clear_bus_stop_documents_collection(self): log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='clear_bus_stop_documents_collection: starting') self.start_time = time.time() self.mongodb_database_connection.clear_bus_stop_documents_collection() self.elapsed_time = time.time() - self.start_time log(module_name='mongodb_database_connection_test', log_type='INFO', log_message= 'clear_bus_stop_documents_collection: finished - elapsed_time = ' + str(self.elapsed_time) + ' sec') def clear_bus_stop_waypoints_documents_collection(self): log(module_name='mongodb_database_connection_test', log_type='INFO', log_message= 'clear_bus_stop_waypoints_documents_collection: starting') self.start_time = time.time() self.mongodb_database_connection.clear_bus_stop_waypoints_documents_collection( ) self.elapsed_time = time.time() - self.start_time log(module_name='mongodb_database_connection_test', log_type='INFO', log_message= 'clear_bus_stop_waypoints_documents_collection: finished - elapsed_time = ' + str(self.elapsed_time) + ' sec') def clear_edge_documents_collection(self): log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='clear_edge_documents_collection: starting') self.start_time = time.time() self.mongodb_database_connection.clear_edge_documents_collection() self.elapsed_time = time.time() - self.start_time log(module_name='mongodb_database_connection_test', log_type='INFO', log_message= 'clear_edge_documents_collection: finished - elapsed_time = ' + str(self.elapsed_time) + ' sec') def clear_node_documents_collection(self): log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='clear_node_documents_collection: starting') self.start_time = time.time() self.mongodb_database_connection.clear_node_documents_collection() self.elapsed_time = time.time() - self.start_time log(module_name='mongodb_database_connection_test', log_type='INFO', log_message= 'clear_node_documents_collection: finished - elapsed_time = ' + str(self.elapsed_time) + ' sec') def clear_point_documents_collection(self): log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='clear_point_documents_collection: starting') self.start_time = time.time() self.mongodb_database_connection.clear_point_documents_collection() self.elapsed_time = time.time() - self.start_time log(module_name='mongodb_database_connection_test', log_type='INFO', log_message= 'clear_point_documents_collection: finished - elapsed_time = ' + str(self.elapsed_time) + ' sec') def clear_timetable_documents_collection(self): log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='clear_timetable_documents_collection: starting') self.start_time = time.time() self.mongodb_database_connection.clear_timetable_documents_collection() self.elapsed_time = time.time() - self.start_time log(module_name='mongodb_database_connection_test', log_type='INFO', log_message= 'clear_timetable_documents_collection: finished - elapsed_time = ' + str(self.elapsed_time) + ' sec') def clear_traffic_density(self): log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='clear_traffic_density: starting') self.start_time = time.time() self.mongodb_database_connection.clear_traffic_density() self.elapsed_time = time.time() - self.start_time log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='clear_traffic_density: finished - elapsed_time = ' + str(self.elapsed_time) + ' sec') def clear_traffic_event_documents_collection(self): log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='clear_traffic_event_documents_collection: starting') self.start_time = time.time() self.mongodb_database_connection.clear_traffic_event_documents_collection( ) self.elapsed_time = time.time() - self.start_time log(module_name='mongodb_database_connection_test', log_type='INFO', log_message= 'clear_traffic_event_documents_collection: finished - elapsed_time = ' + str(self.elapsed_time) + ' sec') def clear_travel_request_documents_collection(self): log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='clear_travel_request_documents_collection: starting') self.start_time = time.time() self.mongodb_database_connection.clear_travel_request_documents_collection( ) self.elapsed_time = time.time() - self.start_time log(module_name='mongodb_database_connection_test', log_type='INFO', log_message= 'clear_travel_request_documents_collection: finished - elapsed_time = ' + str(self.elapsed_time) + ' sec') def clear_way_documents_collection(self): log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='clear_way_documents_collection: starting') self.start_time = time.time() self.mongodb_database_connection.clear_way_documents_collection() self.elapsed_time = time.time() - self.start_time log(module_name='mongodb_database_connection_test', log_type='INFO', log_message= 'clear_way_documents_collection: finished - elapsed_time = ' + str(self.elapsed_time) + ' sec') def print_address_documents(self, object_ids=None, names=None, node_ids=None, counter=None): """ Print multiple address_documents. :param object_ids: [ObjectId] :param names: [string] :param node_ids: [int] :param counter: int :return: None """ log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='print_address_documents') self.mongodb_database_connection.print_address_documents( object_ids=object_ids, names=names, node_ids=node_ids, counter=counter) def print_bus_line_documents(self, object_ids=None, bus_line_ids=None, counter=None): """ Print multiple bus_line_documents. :param object_ids: [ObjectId] :param bus_line_ids: [int] :param counter: int :return: None """ log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='print_bus_line_documents') self.mongodb_database_connection.print_bus_line_documents( object_ids=object_ids, bus_line_ids=bus_line_ids, counter=counter) def print_bus_stop_documents(self, object_ids=None, osm_ids=None, names=None, counter=None): """ Print multiple bus_stop_documents. :param object_ids: [ObjectId] :param osm_ids: [int] :param names: [string] :param counter: int :return: None """ log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='print_bus_stop_documents') self.mongodb_database_connection.print_bus_stop_documents( object_ids=object_ids, osm_ids=osm_ids, names=names, counter=counter) def print_bus_stop_waypoints_documents(self, object_ids=None, bus_stops=None, bus_stop_names=None, bus_line_id=None): """ Print multiple bus_stop_waypoints_documents. :param object_ids: [ObjectId] :param bus_stops: [{'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}}] :param bus_stop_names: [string] :param bus_line_id: int :return: None """ log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='print_bus_stop_waypoints_documents') self.mongodb_database_connection.print_bus_stop_waypoints_documents( object_ids=object_ids, bus_stops=bus_stops, bus_stop_names=bus_stop_names, bus_line_id=bus_line_id) def print_detailed_bus_stop_waypoints_documents(self, object_ids=None, bus_stops=None, bus_stop_names=None, bus_line_id=None): """ Print multiple detailed_bus_stop_waypoints_documents. :param object_ids: [ObjectId] :param bus_stops: [{'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}}] :param bus_stop_names: [string] :param bus_line_id: int :return: None """ log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='print_detailed_bus_stop_waypoints_documents') self.mongodb_database_connection.print_detailed_bus_stop_waypoints_documents( object_ids=object_ids, bus_stops=bus_stops, bus_stop_names=bus_stop_names, bus_line_id=bus_line_id) def print_edge_documents(self, object_ids=None, starting_node_osm_id=None, ending_node_osm_id=None, counter=None): """ Print multiple edge_documents. :param object_ids: [ObjectId] :param starting_node_osm_id: int :param ending_node_osm_id: int :param counter: int :return: None """ log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='print_edge_documents') self.mongodb_database_connection.print_edge_documents( object_ids=object_ids, starting_node_osm_id=starting_node_osm_id, ending_node_osm_id=ending_node_osm_id, counter=counter) def print_node_documents(self, object_ids=None, osm_ids=None, counter=None): """ Print multiple node_documents. :param object_ids: [ObjectId] :param osm_ids: [int] :param counter: int :return: None """ log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='print_node_documents') self.mongodb_database_connection.print_node_documents( object_ids=object_ids, osm_ids=osm_ids, counter=counter) def print_point_documents(self, object_ids=None, osm_ids=None, counter=None): """ Print multiple point_documents. :param object_ids: [ObjectId] :param osm_ids: [int] :param counter: int :return: None """ log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='print_point_documents') self.mongodb_database_connection.print_point_documents( object_ids=object_ids, osm_ids=osm_ids, counter=counter) def print_timetable_documents(self, object_ids=None, bus_line_ids=None, counter=None, timetables_control=True, timetable_entries_control=False, travel_requests_control=False): """ Print multiple timetable_documents. :param object_ids: [ObjectId] :param bus_line_ids: [int] :param counter: int :param timetables_control: bool :param timetable_entries_control: bool :param travel_requests_control: bool :return: timetable_documents: [timetable_document] """ log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='print_timetable_documents') self.mongodb_database_connection.print_timetable_documents( object_ids=object_ids, bus_line_ids=bus_line_ids, counter=counter, timetables_control=timetables_control, timetable_entries_control=timetable_entries_control, travel_requests_control=travel_requests_control) def print_traffic_density_documents(self, bus_stops=None, bus_stop_names=None): """ Print multiple traffic_density_documents. :param bus_stops: [bus_stop_document] :param bus_stop_names: [string] :return: None """ log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='print_traffic_density_documents') self.mongodb_database_connection.print_traffic_density_documents( bus_stops=bus_stops, bus_stop_names=bus_stop_names) def print_travel_request_documents(self, object_ids=None, client_ids=None, bus_line_ids=None, min_departure_datetime=None, max_departure_datetime=None, counter=None): """ Print multiple travel_request_documents. :param object_ids: [ObjectId] :param client_ids: [int] :param bus_line_ids: [int] :param min_departure_datetime: datetime :param max_departure_datetime: datetime :param counter: int :return: None """ log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='print_travel_request_documents') self.mongodb_database_connection.print_travel_request_documents( object_ids=object_ids, client_ids=client_ids, bus_line_ids=bus_line_ids, min_departure_datetime=min_departure_datetime, max_departure_datetime=max_departure_datetime, counter=counter) def print_way_documents(self, object_ids=None, osm_ids=None, counter=None): """ Print multiple way_documents. :param object_ids: [ObjectId] :param osm_ids: [int] :param counter: int :return: None """ log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='print_way_documents') self.mongodb_database_connection.print_way_documents( object_ids=object_ids, osm_ids=osm_ids, counter=counter)
class TravelRequestsSimulator(object): def __init__(self): self.mongodb_database_connection = MongodbDatabaseConnection( host=mongodb_host, port=mongodb_port) log(module_name='travel_requests_simulator', log_type='DEBUG', log_message='mongodb_database_connection: established') def clear_travel_requests_collection(self): """ Clear all the documents of the TravelRequests collection. :return: None """ self.mongodb_database_connection.clear_travel_request_documents_collection( ) log(module_name='travel_requests_simulator', log_type='DEBUG', log_message='clear_travel_request_documents_collection: ok') def delete_travel_request_documents(self, object_ids=None, client_ids=None, bus_line_ids=None, min_departure_datetime=None, max_departure_datetime=None): """ Delete multiple travel_request_documents. :param object_ids: [ObjectId] :param client_ids: [int] :param bus_line_ids: [int] :param min_departure_datetime: datetime :param max_departure_datetime :return: None """ self.mongodb_database_connection.delete_travel_request_documents( object_ids=object_ids, client_ids=client_ids, bus_line_ids=bus_line_ids, min_departure_datetime=min_departure_datetime, max_departure_datetime=max_departure_datetime) log(module_name='travel_requests_simulator', log_type='DEBUG', log_message='delete_travel_request_documents: ok') def generate_random_travel_request_documents( self, initial_datetime, min_number_of_travel_request_documents, max_number_of_travel_request_documents): """ Generate random number of travel_request_documents for each bus_line, for a 24hour period starting from a selected datetime, and store them at the corresponding collection of the System Database. :param initial_datetime: datetime :param min_number_of_travel_request_documents: int :param max_number_of_travel_request_documents: int :return: None """ bus_lines = self.mongodb_database_connection.find_bus_line_documents() for bus_line in bus_lines: number_of_travel_request_documents = random.randint( min_number_of_travel_request_documents, max_number_of_travel_request_documents) self.generate_travel_request_documents( initial_datetime=initial_datetime, number_of_travel_request_documents= number_of_travel_request_documents, bus_line=bus_line) def generate_travel_request_documents(self, initial_datetime, number_of_travel_request_documents, bus_line=None, bus_line_id=None): """ Generate a specific number of travel_request_documents, for the selected bus_line, for a 24hour period starting from a selected datetime, and store them at the corresponding collection of the System Database. :param initial_datetime: datetime :param number_of_travel_request_documents: int :param bus_line: bus_line_document :param bus_line_id: int :return: None """ # 1: The inputs: initial_datetime, number_of_travel_request_documents, and (bus_line or bus_line_id) # are provided to the Travel Requests Simulator, so as a specific number of travel_request_documents # to be generated, for the selected bus_line, for a 24hour period starting from # the selected datetime. # # 2: If the provided bus_line is None, then the Travel Requests Simulator retrieves from the System Database # the bus_line which corresponds to the provided bus_line_id. # if bus_line is None and bus_line_id is None: return None elif bus_line is None: bus_line = self.mongodb_database_connection.find_bus_line_document( bus_line_id=bus_line_id) else: pass bus_stops = bus_line.get('bus_stops') number_of_bus_stops = len(bus_stops) # 3: The Travel Requests Simulator generates the travel_request_documents, taking into consideration # the variation of transportation demand during the hours of the day. # # distribution_weighted_datetimes = [ # (initial_datetime + timedelta(hours=0), 1), # (initial_datetime + timedelta(hours=1), 1), # (initial_datetime + timedelta(hours=2), 1), # (initial_datetime + timedelta(hours=3), 1), # (initial_datetime + timedelta(hours=4), 1), # (initial_datetime + timedelta(hours=5), 1), # (initial_datetime + timedelta(hours=6), 1), # (initial_datetime + timedelta(hours=7), 1), # (initial_datetime + timedelta(hours=8), 1), # (initial_datetime + timedelta(hours=9), 1), # (initial_datetime + timedelta(hours=10), 1), # (initial_datetime + timedelta(hours=11), 1), # (initial_datetime + timedelta(hours=12), 1), # (initial_datetime + timedelta(hours=13), 1), # (initial_datetime + timedelta(hours=14), 1), # (initial_datetime + timedelta(hours=15), 1), # (initial_datetime + timedelta(hours=16), 1), # (initial_datetime + timedelta(hours=17), 1), # (initial_datetime + timedelta(hours=18), 1), # (initial_datetime + timedelta(hours=19), 1), # (initial_datetime + timedelta(hours=20), 1), # (initial_datetime + timedelta(hours=21), 1), # (initial_datetime + timedelta(hours=22), 1), # (initial_datetime + timedelta(hours=23), 1) # ] distribution_weighted_datetimes = [ (initial_datetime + timedelta(hours=i), travel_requests_simulator_datetime_distribution_weights[i]) for i in range(0, 24) ] datetime_population = [ val for val, cnt in distribution_weighted_datetimes for i in range(cnt) ] travel_request_documents = [] maximum_client_id = self.mongodb_database_connection.get_maximum_or_minimum( collection='travel_request') for i in range(0, number_of_travel_request_documents): client_id = maximum_client_id + 1 maximum_client_id = client_id starting_bus_stop_index = random.randint(0, number_of_bus_stops - 2) starting_bus_stop = bus_stops[starting_bus_stop_index] ending_bus_stop_index = random.randint(starting_bus_stop_index + 1, number_of_bus_stops - 1) ending_bus_stop = bus_stops[ending_bus_stop_index] additional_departure_time_interval = random.randint(0, 59) departure_datetime = ( random.choice(datetime_population) + timedelta(minutes=additional_departure_time_interval)) travel_request_document = { 'client_id': client_id, 'bus_line_id': bus_line_id, 'starting_bus_stop': starting_bus_stop, 'ending_bus_stop': ending_bus_stop, 'departure_datetime': departure_datetime, 'arrival_datetime': None, 'starting_timetable_entry_index': None, 'ending_timetable_entry_index': None } travel_request_documents.append(travel_request_document) # 4: The generated travel_request_documents are stored at the # TravelRequests collection of the System Database. # self.mongodb_database_connection.insert_travel_request_documents( travel_request_documents=travel_request_documents)
class MongodbDatabaseConnectionTester(object): def __init__(self): log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='initialize_mongodb_database_connection: starting') self.start_time = time.time() self.mongodb_database_connection = MongodbDatabaseConnection(host=mongodb_host, port=mongodb_port) self.elapsed_time = time.time() - self.start_time log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='initialize_mongodb_database_connection: finished - elapsed_time = ' + str(self.elapsed_time) + ' sec') def clear_all_collections(self): log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='clear_all_collections: starting') self.start_time = time.time() self.mongodb_database_connection.clear_all_collections() self.elapsed_time = time.time() - self.start_time log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='clear_all_collections: finished - elapsed_time = ' + str(self.elapsed_time) + ' sec') def clear_address_documents_collection(self): log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='clear_address_documents_collection: starting') self.start_time = time.time() self.mongodb_database_connection.clear_address_documents_collection() self.elapsed_time = time.time() - self.start_time log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='clear_address_documents_collection: finished - elapsed_time = ' + str(self.elapsed_time) + ' sec') def clear_bus_line_documents_collection(self): log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='clear_bus_line_documents_collection: starting') self.start_time = time.time() self.mongodb_database_connection.clear_bus_line_documents_collection() self.elapsed_time = time.time() - self.start_time log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='clear_bus_line_documents_collection: finished - elapsed_time = ' + str(self.elapsed_time) + ' sec') def clear_bus_stop_documents_collection(self): log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='clear_bus_stop_documents_collection: starting') self.start_time = time.time() self.mongodb_database_connection.clear_bus_stop_documents_collection() self.elapsed_time = time.time() - self.start_time log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='clear_bus_stop_documents_collection: finished - elapsed_time = ' + str(self.elapsed_time) + ' sec') def clear_bus_stop_waypoints_documents_collection(self): log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='clear_bus_stop_waypoints_documents_collection: starting') self.start_time = time.time() self.mongodb_database_connection.clear_bus_stop_waypoints_documents_collection() self.elapsed_time = time.time() - self.start_time log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='clear_bus_stop_waypoints_documents_collection: finished - elapsed_time = ' + str(self.elapsed_time) + ' sec') def clear_edge_documents_collection(self): log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='clear_edge_documents_collection: starting') self.start_time = time.time() self.mongodb_database_connection.clear_edge_documents_collection() self.elapsed_time = time.time() - self.start_time log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='clear_edge_documents_collection: finished - elapsed_time = ' + str(self.elapsed_time) + ' sec') def clear_node_documents_collection(self): log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='clear_node_documents_collection: starting') self.start_time = time.time() self.mongodb_database_connection.clear_node_documents_collection() self.elapsed_time = time.time() - self.start_time log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='clear_node_documents_collection: finished - elapsed_time = ' + str(self.elapsed_time) + ' sec') def clear_point_documents_collection(self): log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='clear_point_documents_collection: starting') self.start_time = time.time() self.mongodb_database_connection.clear_point_documents_collection() self.elapsed_time = time.time() - self.start_time log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='clear_point_documents_collection: finished - elapsed_time = ' + str(self.elapsed_time) + ' sec') def clear_timetable_documents_collection(self): log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='clear_timetable_documents_collection: starting') self.start_time = time.time() self.mongodb_database_connection.clear_timetable_documents_collection() self.elapsed_time = time.time() - self.start_time log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='clear_timetable_documents_collection: finished - elapsed_time = ' + str(self.elapsed_time) + ' sec') def clear_traffic_event_documents_collection(self): log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='clear_traffic_event_documents_collection: starting') self.start_time = time.time() self.mongodb_database_connection.clear_traffic_event_documents_collection() self.elapsed_time = time.time() - self.start_time log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='clear_traffic_event_documents_collection: finished - elapsed_time = ' + str(self.elapsed_time) + ' sec') def clear_travel_request_documents_collection(self): log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='clear_travel_request_documents_collection: starting') self.start_time = time.time() self.mongodb_database_connection.clear_travel_request_documents_collection() self.elapsed_time = time.time() - self.start_time log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='clear_travel_request_documents_collection: finished - elapsed_time = ' + str(self.elapsed_time) + ' sec') def clear_way_documents_collection(self): log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='clear_way_documents_collection: starting') self.start_time = time.time() self.mongodb_database_connection.clear_way_documents_collection() self.elapsed_time = time.time() - self.start_time log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='clear_way_documents_collection: finished - elapsed_time = ' + str(self.elapsed_time) + ' sec') def print_address_documents(self, object_ids=None, names=None, node_ids=None, counter=None): """ Print multiple address_documents. address_document: {'_id', 'name', 'node_id', 'point': {'longitude', 'latitude'}} :param object_ids: [ObjectId] :param names: [string] :param node_ids: [int] :param counter: int :return: None """ log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='print_address_documents') self.mongodb_database_connection.print_address_documents( object_ids=object_ids, names=names, node_ids=node_ids, counter=counter ) def print_bus_line_documents(self, object_ids=None, line_ids=None, counter=None): """ Print multiple bus_line_documents. bus_line_document: { '_id', 'line_id', 'bus_stops': [{'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}}] } :param object_ids: [ObjectId] :param line_ids: [int] :param counter: int :return: None """ log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='print_bus_line_documents') self.mongodb_database_connection.print_bus_line_documents( object_ids=object_ids, line_ids=line_ids, counter=counter ) def print_bus_stop_documents(self, object_ids=None, osm_ids=None, names=None, counter=None): """ Print multiple bus_stop_documents. bus_stop_document: {'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}} :param object_ids: [ObjectId] :param osm_ids: [int] :param names: [string] :param counter: int :return: None """ log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='print_bus_stop_documents') self.mongodb_database_connection.print_bus_stop_documents( object_ids=object_ids, osm_ids=osm_ids, names=names, counter=counter ) def print_bus_stop_waypoints_documents(self, object_ids=None, bus_stops=None, bus_stop_names=None, line_id=None): """ Print multiple bus_stop_waypoints_documents. bus_stop_waypoints_document: { '_id', 'starting_bus_stop': {'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}}, 'ending_bus_stop': {'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}}, 'waypoints': [[edge_object_id]] } :param object_ids: [ObjectId] :param bus_stops: [{'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}}] :param bus_stop_names: [string] :param line_id: int :return: None """ log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='print_bus_stop_waypoints_documents') self.mongodb_database_connection.print_bus_stop_waypoints_documents( object_ids=object_ids, bus_stops=bus_stops, bus_stop_names=bus_stop_names, line_id=line_id ) def print_detailed_bus_stop_waypoints_documents(self, object_ids=None, bus_stops=None, bus_stop_names=None, line_id=None): """ Print multiple detailed_bus_stop_waypoints_documents. edge_document: { '_id', 'starting_node': {'osm_id', 'point': {'longitude', 'latitude'}}, 'ending_node': {'osm_id', 'point': {'longitude', 'latitude'}}, 'max_speed', 'road_type', 'way_id', 'traffic_density' } bus_stop_waypoints_document: { '_id', 'starting_bus_stop': {'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}}, 'ending_bus_stop': {'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}}, 'waypoints': [[edge_object_id]] } detailed_bus_stop_waypoints_document: { '_id', 'starting_bus_stop': {'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}}, 'ending_bus_stop': {'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}}, 'waypoints': [[edge_document]] } :param object_ids: [ObjectId] :param bus_stops: [{'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}}] :param bus_stop_names: [string] :param line_id: int :return: None """ log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='print_detailed_bus_stop_waypoints_documents') self.mongodb_database_connection.print_detailed_bus_stop_waypoints_documents( object_ids=object_ids, bus_stops=bus_stops, bus_stop_names=bus_stop_names, line_id=line_id ) def print_edge_documents(self, object_ids=None, starting_node_osm_id=None, ending_node_osm_id=None, counter=None): """ Print multiple edge_documents. edge_document: { '_id', 'starting_node': {'osm_id', 'point': {'longitude', 'latitude'}}, 'ending_node': {'osm_id', 'point': {'longitude', 'latitude'}}, 'max_speed', 'road_type', 'way_id', 'traffic_density' } :param object_ids: [ObjectId] :param starting_node_osm_id: int :param ending_node_osm_id: int :param counter: int :return: None """ log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='print_edge_documents') self.mongodb_database_connection.print_edge_documents( object_ids=object_ids, starting_node_osm_id=starting_node_osm_id, ending_node_osm_id=ending_node_osm_id, counter=counter ) def print_node_documents(self, object_ids=None, osm_ids=None, counter=None): """ Print multiple node_documents. node_document: {'_id', 'osm_id', 'tags', 'point': {'longitude', 'latitude'}} :param object_ids: [ObjectId] :param osm_ids: [int] :param counter: int :return: None """ log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='print_node_documents') self.mongodb_database_connection.print_node_documents( object_ids=object_ids, osm_ids=osm_ids, counter=counter ) def print_point_documents(self, object_ids=None, osm_ids=None, counter=None): """ Print multiple point_documents. point_document: {'_id', 'osm_id', 'point': {'longitude', 'latitude'}} :param object_ids: [ObjectId] :param osm_ids: [int] :param counter: int :return: None """ log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='print_point_documents') self.mongodb_database_connection.print_point_documents( object_ids=object_ids, osm_ids=osm_ids, counter=counter ) def print_timetable_documents(self, object_ids=None, line_ids=None, counter=None, timetables_control=True, timetable_entries_control=False, travel_requests_control=False): """ Print multiple timetable_documents. timetable_document: { '_id', 'line_id', 'timetable_entries': [{ 'starting_bus_stop': {'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}}, 'ending_bus_stop': {'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}}, 'departure_datetime', 'arrival_datetime', 'total_time', 'number_of_onboarding_passengers', 'number_of_deboarding_passengers', 'number_of_current_passengers'}], 'travel_requests': [{ '_id', 'client_id', 'line_id', 'starting_bus_stop': {'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}}, 'ending_bus_stop': {'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}}, 'departure_datetime', 'arrival_datetime', 'starting_timetable_entry_index', 'ending_timetable_entry_index'}] } :param object_ids: [ObjectId] :param line_ids: [int] :param counter: int :param timetables_control: bool :param timetable_entries_control: bool :param travel_requests_control: bool :return: timetable_documents: [timetable_document] """ log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='print_timetable_documents') self.mongodb_database_connection.print_timetable_documents( object_ids=object_ids, line_ids=line_ids, counter=counter, timetables_control=timetables_control, timetable_entries_control=timetable_entries_control, travel_requests_control=travel_requests_control ) def print_traffic_density_documents(self, bus_stops=None, bus_stop_names=None): """ Print multiple traffic_density_documents. traffic_density_document: { 'starting_bus_stop': {'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}}, 'ending_bus_stop': {'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}}, 'traffic_density_values': [[{'edge_object_id', 'traffic_density'}]] } :param bus_stops: [{'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}}] :param bus_stop_names: [string] :return: None """ log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='print_traffic_density_documents') self.mongodb_database_connection.print_traffic_density_documents( bus_stops=bus_stops, bus_stop_names=bus_stop_names ) def print_travel_request_documents(self, object_ids=None, client_ids=None, line_ids=None, min_departure_datetime=None, max_departure_datetime=None, counter=None): """ Print multiple travel_request_documents. travel_request_document: { '_id', 'client_id', 'line_id', 'starting_bus_stop': {'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}}, 'ending_bus_stop': {'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}}, 'departure_datetime', 'arrival_datetime', 'starting_timetable_entry_index', 'ending_timetable_entry_index' } :param object_ids: [ObjectId] :param client_ids: [int] :param line_ids: [int] :param min_departure_datetime: datetime :param max_departure_datetime: datetime :param counter: int :return: None """ log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='print_travel_request_documents') self.mongodb_database_connection.print_travel_request_documents( object_ids=object_ids, client_ids=client_ids, line_ids=line_ids, min_departure_datetime=min_departure_datetime, max_departure_datetime=max_departure_datetime, counter=counter ) def print_way_documents(self, object_ids=None, osm_ids=None, counter=None): """ Print multiple way_documents. way_document: {'_id', 'osm_id', 'tags', 'references'} :param object_ids: [ObjectId] :param osm_ids: [int] :param counter: int :return: None """ log(module_name='mongodb_database_connection_test', log_type='INFO', log_message='print_way_documents') self.mongodb_database_connection.print_way_documents( object_ids=object_ids, osm_ids=osm_ids, counter=counter )