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 TrafficDataSimulator(object): def __init__(self): self.mongodb_database_connection = MongodbDatabaseConnection(host=mongodb_host, port=mongodb_port) log(module_name='traffic_data_simulator', log_type='DEBUG', log_message='mongodb_database_connection: established') def clear_traffic_density(self): self.mongodb_database_connection.clear_traffic_density() def generate_traffic_data_between_two_bus_stops(self, starting_bus_stop=None, ending_bus_stop=None, starting_bus_stop_name=None, ending_bus_stop_name=None): """ Generate random traffic density values for the edges which connect two bus_stops. bus_stop_document: {'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}} 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 starting_bus_stop: bus_stop_document :param ending_bus_stop: bus_stop_document :param starting_bus_stop_name: string :param ending_bus_stop_name: string :return: None """ bus_stop_waypoints_document = self.mongodb_database_connection.find_bus_stop_waypoints_document( starting_bus_stop=starting_bus_stop, ending_bus_stop=ending_bus_stop, starting_bus_stop_name=starting_bus_stop_name, ending_bus_stop_name=ending_bus_stop_name ) edge_object_ids_included_in_bus_stop_waypoints_document = \ self.mongodb_database_connection.get_edge_object_ids_included_in_bus_stop_waypoints( bus_stop_waypoints=bus_stop_waypoints_document ) self.generate_traffic_data_for_edge_object_ids( edge_object_ids=edge_object_ids_included_in_bus_stop_waypoints_document ) def generate_traffic_data_between_multiple_bus_stops(self, bus_stops=None, bus_stop_names=None): """ Generate random traffic density values for the edges which connect multiple bus_stops. bus_stop_document: {'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}} :param bus_stops: [bus_stop_documents] :param bus_stop_names: [string] :return: None """ if bus_stops is not None: number_of_bus_stops = len(bus_stops) for i in range(0, number_of_bus_stops - 1): starting_bus_stop = bus_stops[i] ending_bus_stop = bus_stops[i + 1] self.generate_traffic_data_between_two_bus_stops( starting_bus_stop=starting_bus_stop, ending_bus_stop=ending_bus_stop ) elif bus_stop_names is not None: number_of_bus_stop_names = len(bus_stop_names) for i in range(0, number_of_bus_stop_names - 1): starting_bus_stop_name = bus_stop_names[i] ending_bus_stop_name = bus_stop_names[i + 1] self.generate_traffic_data_between_two_bus_stops( starting_bus_stop_name=starting_bus_stop_name, ending_bus_stop_name=ending_bus_stop_name ) else: pass def generate_traffic_data_for_bus_line(self, bus_line=None, line_id=None): """ Generate random traffic density values for the edge_documents which are included in a bus_line_document. bus_line_document: { '_id', 'line_id', 'bus_stops': [{'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}}] } :param bus_line: bus_line_document :param line_id: int :return: None """ edge_object_ids_included_in_bus_line_document = \ self.mongodb_database_connection.get_edge_object_ids_included_in_bus_line( bus_line=bus_line, line_id=line_id ) self.generate_traffic_data_for_edge_object_ids( edge_object_ids=edge_object_ids_included_in_bus_line_document ) def generate_traffic_data_for_bus_lines(self, bus_lines=None): """ Generate random traffic density values for the edge_documents which are included in a bus_line_documents. bus_line_document: { '_id', 'line_id', 'bus_stops': [{'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}}] } :param bus_lines: [bus_line_document] :return: None """ if bus_lines is None: bus_lines = self.mongodb_database_connection.find_bus_line_documents() for bus_line in bus_lines: self.generate_traffic_data_for_bus_line(bus_line=bus_line) def generate_traffic_data_for_edge_object_ids(self, edge_object_ids): """ Generate random traffic density values and update the corresponding 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 edge_object_ids: [ObjectId] :return: None """ number_of_edge_object_ids = len(edge_object_ids) number_of_produced_traffic_values = random.randint(0, number_of_edge_object_ids - 1) for i in range(0, number_of_produced_traffic_values): edge_object_ids_index = random.randint(0, number_of_edge_object_ids - 1) edge_object_id = edge_object_ids[edge_object_ids_index] new_traffic_density_value = random.uniform(0, 1) self.mongodb_database_connection.update_traffic_density( edge_object_id=edge_object_id, new_traffic_density_value=new_traffic_density_value )
class TrafficDataSimulator(object): def __init__(self): self.mongodb_database_connection = MongodbDatabaseConnection(host=mongodb_host, port=mongodb_port) self.lowest_traffic_density_value = 0 self.highest_traffic_density_value = 1 log(module_name='traffic_data_simulator', log_type='DEBUG', log_message='mongodb_database_connection: established') def clear_traffic_density(self): self.mongodb_database_connection.clear_traffic_density() def generate_traffic_data_between_two_bus_stops(self, starting_bus_stop=None, ending_bus_stop=None, starting_bus_stop_name=None, ending_bus_stop_name=None): """ Generate random traffic density values for the edges which connect two bus_stops. :param starting_bus_stop: bus_stop_document :param ending_bus_stop: bus_stop_document :param starting_bus_stop_name: string :param ending_bus_stop_name: string :return: None """ bus_stop_waypoints_document = self.mongodb_database_connection.find_bus_stop_waypoints_document( starting_bus_stop=starting_bus_stop, ending_bus_stop=ending_bus_stop, starting_bus_stop_name=starting_bus_stop_name, ending_bus_stop_name=ending_bus_stop_name ) edge_object_ids_included_in_bus_stop_waypoints_document = \ self.mongodb_database_connection.get_edge_object_ids_included_in_bus_stop_waypoints( bus_stop_waypoints=bus_stop_waypoints_document ) self.generate_traffic_data_for_edge_object_ids( edge_object_ids=edge_object_ids_included_in_bus_stop_waypoints_document ) def generate_traffic_data_between_multiple_bus_stops(self, bus_stops=None, bus_stop_names=None): """ Generate random traffic density values for the edges which connect multiple bus_stops. :param bus_stops: [bus_stop_documents] :param bus_stop_names: [string] :return: None """ if bus_stops is not None: number_of_bus_stops = len(bus_stops) for i in range(0, number_of_bus_stops - 1): starting_bus_stop = bus_stops[i] ending_bus_stop = bus_stops[i + 1] self.generate_traffic_data_between_two_bus_stops( starting_bus_stop=starting_bus_stop, ending_bus_stop=ending_bus_stop ) elif bus_stop_names is not None: number_of_bus_stop_names = len(bus_stop_names) for i in range(0, number_of_bus_stop_names - 1): starting_bus_stop_name = bus_stop_names[i] ending_bus_stop_name = bus_stop_names[i + 1] self.generate_traffic_data_between_two_bus_stops( starting_bus_stop_name=starting_bus_stop_name, ending_bus_stop_name=ending_bus_stop_name ) else: pass def generate_traffic_data_for_bus_line(self, bus_line=None, bus_line_id=None): """ Generate random traffic density values for the edge_documents which are included in a bus_line_document. :param bus_line: bus_line_document :param bus_line_id: int :return: None """ edge_object_ids_included_in_bus_line_document = \ self.mongodb_database_connection.get_edge_object_ids_included_in_bus_line( bus_line=bus_line, bus_line_id=bus_line_id ) self.generate_traffic_data_for_edge_object_ids( edge_object_ids=edge_object_ids_included_in_bus_line_document ) def generate_traffic_data_for_bus_lines(self, bus_lines=None): """ Generate random traffic density values for the edge_documents which are included in a bus_line_documents. :param bus_lines: [bus_line_document] :return: None """ if bus_lines is None: bus_lines = self.mongodb_database_connection.find_bus_line_documents() for bus_line in bus_lines: self.generate_traffic_data_for_bus_line(bus_line=bus_line) def generate_traffic_data_for_edge_object_ids(self, edge_object_ids): """ Generate random traffic density values and update the corresponding edge_documents. :param edge_object_ids: [ObjectId] :return: None """ number_of_edge_object_ids = len(edge_object_ids) number_of_produced_traffic_values = random.randint(0, number_of_edge_object_ids - 1) for i in range(0, number_of_produced_traffic_values): # edge_object_ids_index = random.randint(0, number_of_edge_object_ids - 1) edge_object_ids_index = i edge_object_id = edge_object_ids[edge_object_ids_index] new_traffic_density_value = random.uniform( self.lowest_traffic_density_value, self.highest_traffic_density_value ) self.mongodb_database_connection.update_traffic_density( edge_object_id=edge_object_id, new_traffic_density_value=new_traffic_density_value ) def set_traffic_density_limits(self, lowest_traffic_density_value, highest_traffic_density_value): """ Set the lowest and highest traffic density values. :param lowest_traffic_density_value: float: [0, 1] :param highest_traffic_density_value: float: [0, 1] :return: None """ self.lowest_traffic_density_value = lowest_traffic_density_value self.highest_traffic_density_value = highest_traffic_density_value