add cron job for credits
This commit is contained in:
parent
04f6805353
commit
2faa0924f5
@ -1,3 +1,4 @@
|
|||||||
|
import sys
|
||||||
import pytz
|
import pytz
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from urllib.request import urlopen
|
from urllib.request import urlopen
|
||||||
@ -115,18 +116,25 @@ async def downgrade_user():
|
|||||||
user_data = pb.collection('users').get_full_list()
|
user_data = pb.collection('users').get_full_list()
|
||||||
for item in tqdm(user_data):
|
for item in tqdm(user_data):
|
||||||
if item.tier not in ['Pro', 'Plus']:
|
if item.tier not in ['Pro', 'Plus']:
|
||||||
stock_screener_data = pb.collection("stockscreener").get_full_list(query_params = {"filter": f"user = '{item.id}'"})
|
try:
|
||||||
for screener in stock_screener_data:
|
pb.collection("users").update(item.id, {
|
||||||
pb.collection('stockscreener').delete(screener.id)
|
"credits": 10,
|
||||||
|
})
|
||||||
|
|
||||||
options_watchlist_data = pb.collection("optionsWatchlist").get_full_list(query_params = {"filter": f"user = '{item.id}'"})
|
stock_screener_data = pb.collection("stockscreener").get_full_list(query_params = {"filter": f"user = '{item.id}'"})
|
||||||
for watchlist in options_watchlist_data:
|
for screener in stock_screener_data:
|
||||||
pb.collection('optionsWatchlist').delete(watchlist.id)
|
pb.collection('stockscreener').delete(screener.id)
|
||||||
|
|
||||||
|
options_watchlist_data = pb.collection("optionsWatchlist").get_full_list(query_params = {"filter": f"user = '{item.id}'"})
|
||||||
|
for watchlist in options_watchlist_data:
|
||||||
|
pb.collection('optionsWatchlist').delete(watchlist.id)
|
||||||
|
|
||||||
|
|
||||||
payment_data = pb.collection("payments").get_full_list(query_params = {"filter": f"user = '{item.id}'"})
|
payment_data = pb.collection("payments").get_full_list(query_params = {"filter": f"user = '{item.id}'"})
|
||||||
for item in payment_data:
|
for item in payment_data:
|
||||||
pb.collection('payments').delete(item.id)
|
pb.collection('payments').delete(item.id)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
async def delete_old_notifications():
|
async def delete_old_notifications():
|
||||||
@ -145,13 +153,38 @@ async def delete_old_notifications():
|
|||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
async def refresh_bulk_credits():
|
||||||
|
user_data = pb.collection('users').get_full_list()
|
||||||
|
for item in tqdm(user_data):
|
||||||
|
try:
|
||||||
|
if item.tier == 'Plus':
|
||||||
|
pb.collection("users").update(item.id, {
|
||||||
|
"credits": 500,
|
||||||
|
})
|
||||||
|
elif item.tier == 'Pro':
|
||||||
|
pb.collection("users").update(item.id, {
|
||||||
|
"credits": 1000,
|
||||||
|
})
|
||||||
|
|
||||||
|
else:
|
||||||
|
pb.collection("users").update(item.id, {
|
||||||
|
"credits": 10,
|
||||||
|
})
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
async def run():
|
async def run_all_except_refresh():
|
||||||
|
|
||||||
await update_free_trial()
|
await update_free_trial()
|
||||||
await downgrade_user()
|
await downgrade_user()
|
||||||
await delete_old_notifications()
|
await delete_old_notifications()
|
||||||
|
|
||||||
asyncio.run(run())
|
def main():
|
||||||
|
if '--refresh' in sys.argv:
|
||||||
|
asyncio.run(refresh_bulk_credits())
|
||||||
|
else:
|
||||||
|
asyncio.run(run_all_except_refresh())
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
@ -1,20 +1,9 @@
|
|||||||
import pytz
|
|
||||||
from datetime import datetime, timedelta
|
|
||||||
from urllib.request import urlopen
|
|
||||||
import certifi
|
|
||||||
import json
|
|
||||||
import ujson
|
|
||||||
import schedule
|
import schedule
|
||||||
import time
|
import time
|
||||||
import subprocess
|
import subprocess
|
||||||
import asyncio
|
import threading
|
||||||
import aiohttp
|
from datetime import datetime
|
||||||
import pytz
|
import pytz
|
||||||
import sqlite3
|
|
||||||
import pandas as pd
|
|
||||||
import numpy as np
|
|
||||||
import threading # Import threading module for parallel execution
|
|
||||||
|
|
||||||
|
|
||||||
berlin_tz = pytz.timezone('Europe/Berlin')
|
berlin_tz = pytz.timezone('Europe/Berlin')
|
||||||
|
|
||||||
@ -23,43 +12,51 @@ subprocess.run(["timedatectl", "set-timezone", "Europe/Berlin"])
|
|||||||
|
|
||||||
|
|
||||||
def run_pocketbase():
|
def run_pocketbase():
|
||||||
# Run the asynchronous function inside an asyncio loop
|
|
||||||
subprocess.run(["python3", "cron_pocketbase.py"])
|
subprocess.run(["python3", "cron_pocketbase.py"])
|
||||||
subprocess.run(["python3", "cron_notification_channel.py"])
|
subprocess.run(["python3", "cron_notification_channel.py"])
|
||||||
|
|
||||||
def run_restart_cache():
|
def run_restart_cache():
|
||||||
#update db daily
|
# Update db daily
|
||||||
week = datetime.today().weekday()
|
week = datetime.today().weekday()
|
||||||
if week <= 5:
|
if week <= 5:
|
||||||
subprocess.run(["pm2", "restart","fastapi"])
|
subprocess.run(["pm2", "restart", "fastapi"])
|
||||||
subprocess.run(["pm2", "restart","fastify"])
|
subprocess.run(["pm2", "restart", "fastify"])
|
||||||
subprocess.run(["pm2", "restart","websocket"])
|
subprocess.run(["pm2", "restart", "websocket"])
|
||||||
|
|
||||||
|
|
||||||
def run_json_job():
|
def run_json_job():
|
||||||
# Run the asynchronous function inside an asyncio loop
|
|
||||||
subprocess.run(["python3", "restart_json.py"])
|
subprocess.run(["python3", "restart_json.py"])
|
||||||
subprocess.run(["pm2", "restart","fastapi"])
|
subprocess.run(["pm2", "restart", "fastapi"])
|
||||||
subprocess.run(["pm2", "restart","fastify"])
|
subprocess.run(["pm2", "restart", "fastify"])
|
||||||
subprocess.run(["pm2", "restart","websocket"])
|
subprocess.run(["pm2", "restart", "websocket"])
|
||||||
|
|
||||||
def run_cron_price_alert():
|
def run_cron_price_alert():
|
||||||
week = datetime.today().weekday()
|
week = datetime.today().weekday()
|
||||||
if week <= 4:
|
if week <= 4:
|
||||||
subprocess.run(["python3", "cron_price_alert.py"])
|
subprocess.run(["python3", "cron_price_alert.py"])
|
||||||
|
|
||||||
# Create functions to run each schedule in a separate thread
|
def run_refresh_pocketbase():
|
||||||
|
"""Runs cron_pocketbase.py with --refresh at the start of each month."""
|
||||||
|
today = datetime.now(berlin_tz)
|
||||||
|
if today.day == 1: # Check if today is the 1st day of the month
|
||||||
|
subprocess.run(["python3", "cron_pocketbase.py", "--refresh"])
|
||||||
|
|
||||||
|
|
||||||
|
# Run each job in a separate thread
|
||||||
def run_threaded(job_func):
|
def run_threaded(job_func):
|
||||||
job_thread = threading.Thread(target=job_func)
|
job_thread = threading.Thread(target=job_func)
|
||||||
job_thread.start()
|
job_thread.start()
|
||||||
|
|
||||||
|
|
||||||
|
# Existing scheduled tasks
|
||||||
schedule.every().day.at("06:30").do(run_threaded, run_pocketbase).tag('pocketbase_job')
|
schedule.every().day.at("06:30").do(run_threaded, run_pocketbase).tag('pocketbase_job')
|
||||||
schedule.every().day.at("15:31").do(run_threaded, run_restart_cache)
|
schedule.every().day.at("15:31").do(run_threaded, run_restart_cache)
|
||||||
schedule.every().day.at("23:00").do(run_threaded, run_restart_cache)
|
schedule.every().day.at("23:00").do(run_threaded, run_restart_cache)
|
||||||
schedule.every(2).hours.do(run_threaded, run_json_job).tag('json_job')
|
schedule.every(2).hours.do(run_threaded, run_json_job).tag('json_job')
|
||||||
schedule.every(1).minutes.do(run_threaded, run_cron_price_alert).tag('price_alert_job')
|
schedule.every(1).minutes.do(run_threaded, run_cron_price_alert).tag('price_alert_job')
|
||||||
|
|
||||||
|
schedule.every().day.at("00:00").do(run_threaded, run_refresh_pocketbase)
|
||||||
|
|
||||||
|
# Keep the scheduler running
|
||||||
while True:
|
while True:
|
||||||
schedule.run_pending()
|
schedule.run_pending()
|
||||||
time.sleep(3)
|
time.sleep(3)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user