in Elastiflix/python-favorite-otel-auto/main.py [0:0]
def add_favorite_movie():
# add artificial delay if enabled
if delay_time > 0:
time.sleep(max(0, random.gauss(delay_time / 1000, delay_time / 1000 / 10)))
user_id = str(request.args.get("user_id"))
movie_id = request.json["id"]
logger.info(
"Adding or removing favorites for user " + user_id, extra={"event.dataset": "favorite.log", "user.id": user_id}
)
# add movie to the user's favorite list. If it already exists, remove it from the list
redisRespone = r.srem(user_id, int(movie_id))
if redisRespone == 0:
r.sadd(user_id, movie_id)
favorites = r.smembers(user_id)
# convert to list
favorites = list(favorites)
logger.info(
"User " + user_id + " has favorites: " + str(favorites),
extra={"event.dataset": "favorite.log", "user.id": user_id},
)
# if enabled, in 50% of the cases, sleep for 2 seconds
sleep_time = os.getenv("TOGGLE_CANARY_DELAY")
if sleep_time is None or sleep_time == "":
sleep_time = 0
sleep_time = int(sleep_time)
if sleep_time > 0 and random.random() < 0.5:
time.sleep(max(0, random.gauss(sleep_time / 1000, sleep_time / 1000 / 10)))
# add label to transaction
logger.info("Canary enabled")
if random.random() < float(os.getenv("TOGGLE_CANARY_FAILURE", 0)):
# throw an exception in 50% of the cases
logger.error("Something went wrong")
raise Exception("Something went wrong")
return {"favorites": favorites}