Skip to content

Commit

Permalink
fix: mv to vercel cron jobs since its serverless
Browse files Browse the repository at this point in the history
  • Loading branch information
vantage-ola committed Aug 27, 2024
1 parent 87b8be0 commit 2417b76
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 60 deletions.
45 changes: 1 addition & 44 deletions tracknow/backend/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,7 @@
from flask_swagger_ui import get_swaggerui_blueprint
from routes import routes
from flask_cors import CORS
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.triggers.cron import CronTrigger
import atexit
import json
from datetime import datetime, timezone
from motorsport.formula_1 import get_driver_standings, get_team_standings
from internet.youtube import youtube_results
from config import redis_instance


# swagger setup
SWAGGER_URL="/api/v1/docs"
Expand Down Expand Up @@ -49,44 +42,8 @@ def create_app(config_class='config.Config'):
app.register_blueprint(swagger_ui_blueprint, url_prefix=SWAGGER_URL)
app.register_blueprint(routes) # Register the routes blueprint

scheduler = BackgroundScheduler()

# Update Formula 1 standings every Sunday at 3:45 PM and every day at 12:00 AM
f1_trigger = CronTrigger(day_of_week='sun', hour=15, minute=45, timezone=timezone.utc)
trigger_daily = CronTrigger(hour=0, minute=0, timezone=timezone.utc)

scheduler.add_job(update_f1_standings, f1_trigger)
scheduler.add_job(update_f1_standings, trigger_daily)
scheduler.add_job(update_youtube_data, trigger_daily)

# Start the scheduler
scheduler.start()

# Shut down the scheduler when exiting the app
atexit.register(lambda: scheduler.shutdown())

return app

def update_f1_standings():
r = redis_instance()

current_year = datetime.now().year

team_data = get_team_standings()
r.set(f"f1_constructors_{current_year}", json.dumps(team_data))

driver_data = get_driver_standings()
r.set(f"f1_drivers_{current_year}", json.dumps(driver_data))
print(f"{current_year} standings updated !")

def update_youtube_data():
r = redis_instance()

today_date = datetime.now().date()
youtube_data = youtube_results()

r.set(f"youtube_data_{today_date}", json.dumps(youtube_data))
print(f"{today_date} youtube data updated !")

app = create_app()

Expand Down
67 changes: 53 additions & 14 deletions tracknow/backend/routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,61 @@
from models import db, User, Laptime
from motorsport.formula_1 import get_driver_standings, get_team_standings
from config import redis_instance
from internet.youtube import youtube_results

from functools import wraps
from decouple import config
from sqlalchemy import desc, func
import json
import datetime
from datetime import datetime


routes = Blueprint('routes', __name__)

# api key authentication
api_key = config("API_KEY")

# Get the current year and day of the week
now = datetime.datetime.now()
now = datetime.now()
current_year = now.year
current_day = now.weekday()

today_date = now.date()

# fucntion to update redis f1 standings
def update_f1_standings():
try:
r = redis_instance()

current_year = datetime.now().year

team_data = get_team_standings()
r.set(f"f1_constructors_{current_year}", json.dumps(team_data))

driver_data = get_driver_standings()
r.set(f"f1_drivers_{current_year}", json.dumps(driver_data))

print(f"{current_year} standings updated!")
return jsonify({"msg": "F1 standings updated successfully"}), 200
except Exception as e:
print(f"Error updating F1 standings: {str(e)}")
return jsonify({"error": "Failed to update F1 standings"}), 500

# fucntion to update redis youtube search results
def update_youtube_data():
try:
r = redis_instance()

today_date = datetime.now().date()
youtube_data = youtube_results()

r.set(f"youtube_data_{today_date}", json.dumps(youtube_data))

print(f"{today_date} youtube data updated!")
return jsonify({"msg": "YouTube data updated successfully"}), 200
except Exception as e:
print(f"Error updating YouTube data: {str(e)}")
return jsonify({"error": "Failed to update YouTube data"}), 500

# api_key function
def require_api_key(view_function):
@wraps(view_function)
def decorated_function(*args, **kwargs):
Expand Down Expand Up @@ -270,14 +308,11 @@ def get_other_userss_laptimes(user_id):
return jsonify([lt.to_dict() for lt in laptimes]), 200

## MOTORSPORT DATA ##
@routes.route("/api/v1/f1/teams")
@routes.route("/api/v1/f1/teams", methods=['GET'])
def get_constructors_standings():
# Connect Redis instance
r = redis_instance()

# Get the current year
current_year = datetime.datetime.now().year

# Check if the data is in Redis
cached_data = r.get(f"f1_constructors_{current_year}")

Expand All @@ -290,12 +325,10 @@ def get_constructors_standings():

return jsonify(data)

@routes.route("/api/v1/f1/drivers")
@routes.route("/api/v1/f1/drivers", methods=['GET'])
def get_drivers_standings():
r = redis_instance()

current_year = datetime.datetime.now().year

cached_data = r.get(f"f1_drivers_{current_year}")

if cached_data:
Expand All @@ -304,14 +337,16 @@ def get_drivers_standings():
return jsonify({"error": "Data not found"}), 404

return jsonify(data)
@routes.route('/api/v1/cron/update-f1-standings', methods=['POST'])
def cron_update_f1_standings():
return update_f1_standings()

## SOCIAL MEDIA DATA ##
@routes.route("/api/v1/internet/youtube")
@routes.route("/api/v1/internet/youtube", methods=['GET'])
def get_youtube_results():

#xxxxx/api/v1/internet/youtube?date=2024-08-23
current_day = datetime.datetime.now().date()
date = request.args.get('date', current_day, type=str)
date = request.args.get('date', today_date, type=str)

r = redis_instance()

Expand All @@ -323,3 +358,7 @@ def get_youtube_results():
return jsonify({"error": "Data not found"}), 404

return jsonify(data)

@routes.route('/api/v1/cron/update-youtube-data', methods=['POST'])
def cron_update_youtube_data():
return update_youtube_data()
17 changes: 15 additions & 2 deletions tracknow/backend/vercel.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,19 @@
"src": "/(.*)",
"dest": "app.py"
}
],
"crons": [
{
"path": "/api/v1/cron/update-f1-standings",
"schedule": "45 15 * * 0"
},
{
"path": "/api/v1/cron/update-f1-standings",
"schedule": "0 0 * * *"
},
{
"path": "/api/v1/cron/update-youtube-data",
"schedule": "0 0 * * *"
}
]
}

}

0 comments on commit 2417b76

Please sign in to comment.