示例#1
0
文件: loadmovr.py 项目: nstewart/movr
    def add_vehicle_location_histories_helper(sess, chunk, n):
        rides = sess.query(Ride).filter_by(city=city).all()

        histories = []
        for i in range(chunk, min(chunk + chunk_size, num_histories)):
            latlong = MovRGenerator.generate_random_latlong()
            histories.append(
                VehicleLocationHistory(city=city,
                                       ride_id=random.choice(rides).id,
                                       lat=latlong["lat"],
                                       long=latlong["long"]))

        sess.bulk_save_objects(histories)
示例#2
0
文件: loadmovr.py 项目: nstewart/movr
def simulate_movr_load(conn_string,
                       cities,
                       movr_objects,
                       active_rides,
                       read_percentage,
                       follower_reads,
                       connection_duration_in_seconds,
                       echo_sql=False):

    datagen = Faker()
    while True:
        logging.debug(
            "creating a new connection to %s, which will reset in %d seconds",
            conn_string, connection_duration_in_seconds)
        try:
            with MovR(conn_string, echo=echo_sql) as movr:
                timeout = time.time(
                ) + connection_duration_in_seconds  #refresh connections so load can balance among cluster nodes even if the cluster size changes
                while True:

                    if TERMINATE_GRACEFULLY:
                        logging.debug("Terminating thread.")
                        return

                    if time.time() > timeout:
                        break

                    active_city = random.choice(cities)

                    if random.random() < read_percentage:
                        # simulate user loading screen
                        start = time.time()
                        movr.get_vehicles(active_city, follower_reads, 25)
                        stats.add_latency_measurement("get vehicles",
                                                      time.time() - start)

                    else:

                        # every write tick, simulate the various vehicles updating their locations if they are being used for rides
                        for ride in active_rides[0:10]:

                            latlong = MovRGenerator.generate_random_latlong()
                            start = time.time()
                            movr.update_ride_location(ride['city'],
                                                      ride_id=ride['id'],
                                                      lat=latlong['lat'],
                                                      long=latlong['long'])
                            stats.add_latency_measurement(
                                ACTION_UPDATE_RIDE_LOC,
                                time.time() - start)

                        #do write operations randomly
                        if random.random() < .03:
                            # simulate a movr marketer creating a new promo code
                            start = time.time()
                            promo_code = movr.create_promo_code(
                                code="_".join(datagen.words(nb=3)) + "_" +
                                str(time.time()),
                                description=datagen.paragraph(),
                                expiration_time=datetime.datetime.now() +
                                datetime.timedelta(days=random.randint(0, 30)),
                                rules={
                                    "type": "percent_discount",
                                    "value": "10%"
                                })
                            stats.add_latency_measurement(
                                ACTION_NEW_CODE,
                                time.time() - start)
                            movr_objects["global"].get("promo_codes",
                                                       []).append(promo_code)

                        elif random.random() < .1:
                            # simulate a user applying a promo code to her account
                            start = time.time()
                            movr.apply_promo_code(
                                active_city,
                                random.choice(movr_objects["local"]
                                              [active_city]["users"])['id'],
                                random.choice(
                                    movr_objects["global"]["promo_codes"]))
                            stats.add_latency_measurement(
                                ACTION_APPLY_CODE,
                                time.time() - start)
                        elif random.random() < .3:
                            # simulate new signup
                            start = time.time()
                            new_user = movr.add_user(
                                active_city, datagen.name(), datagen.address(),
                                datagen.credit_card_number())
                            stats.add_latency_measurement(
                                ACTION_NEW_USER,
                                time.time() - start)
                            movr_objects["local"][active_city]["users"].append(
                                new_user)

                        elif random.random() < .1:
                            # simulate a user adding a new vehicle to the population
                            start = time.time()
                            new_vehicle = movr.add_vehicle(
                                active_city,
                                owner_id=random.choice(
                                    movr_objects["local"][active_city]
                                    ["users"])['id'],
                                type=MovRGenerator.generate_random_vehicle(),
                                vehicle_metadata=MovRGenerator.
                                generate_vehicle_metadata(type),
                                status=MovRGenerator.get_vehicle_availability(
                                ),
                                current_location=datagen.address())
                            stats.add_latency_measurement(
                                ACTION_ADD_VEHICLE,
                                time.time() - start)
                            movr_objects["local"][active_city][
                                "vehicles"].append(new_vehicle)

                        elif random.random() < .5:
                            # simulate a user starting a ride
                            start = time.time()
                            ride = movr.start_ride(
                                active_city,
                                random.choice(movr_objects["local"]
                                              [active_city]["users"])['id'],
                                random.choice(movr_objects["local"]
                                              [active_city]["vehicles"])['id'])
                            stats.add_latency_measurement(
                                ACTION_START_RIDE,
                                time.time() - start)
                            active_rides.append(ride)

                        else:
                            if len(active_rides):
                                #simulate a ride ending
                                ride = active_rides.pop()
                                start = time.time()
                                movr.end_ride(ride['city'], ride['id'])
                                stats.add_latency_measurement(
                                    ACTION_END_RIDE,
                                    time.time() - start)
        except DBAPIError:
            logging.error("lost connection to the db. sleeping for 10 seconds")
            time.sleep(10)