mirror of
https://github.com/jaypyles/Scraperr.git
synced 2025-11-15 21:56:22 +00:00
* chore: refactor wip * chore: refactor wip * chore: refactor wip * chore: refactor wip * chore: refactor wip * chore: refactor wip * chore: work in progress * chore: work in progress * chore: work in progress * chore: work in progress * chore: work in progress * chore: work in progress * chore: work in progress * chore: work in progress * chore: work in progress * chore: refactor wip * chore: work in progress * chore: refactor wip * chore: refactor wip * chore: refactor wip * fix: build * fix: cypress test * fix: cypress test * fix: cypress test * fix: cypress test * fix: cypress test * fix: cypress test * fix: cypress test * fix: cypress test * fix: cypress tests * fix: cypress tests * fix: cypress tests * fix: cypress tests * fix: cypress tests * fix: cypress tests * fix: cypress tests * fix: cypress tests * fix: cypress tests * fix: cypress tests * fix: cypress tests * fix: cypress tests * fix: cypress tests * fix: cypress tests * fix: cypress tests * fix: cypress tests * fix: cypress tests
107 lines
2.4 KiB
Python
107 lines
2.4 KiB
Python
# STL
|
|
import uuid
|
|
import logging
|
|
import datetime
|
|
from typing import Any
|
|
|
|
# PDM
|
|
from apscheduler.triggers.cron import CronTrigger
|
|
from apscheduler.schedulers.background import BackgroundScheduler
|
|
|
|
# LOCAL
|
|
from api.backend.job import insert as insert_job
|
|
from api.backend.schemas.cron import CronJob
|
|
from api.backend.database.common import query, insert
|
|
|
|
LOG = logging.getLogger("Cron")
|
|
|
|
|
|
def insert_cron_job(cron_job: CronJob):
|
|
query = """
|
|
INSERT INTO cron_jobs (id, user_email, job_id, cron_expression, time_created, time_updated)
|
|
VALUES (?, ?, ?, ?, ?, ?)
|
|
"""
|
|
|
|
values = (
|
|
cron_job.id,
|
|
cron_job.user_email,
|
|
cron_job.job_id,
|
|
cron_job.cron_expression,
|
|
cron_job.time_created,
|
|
cron_job.time_updated,
|
|
)
|
|
|
|
insert(query, values)
|
|
|
|
return True
|
|
|
|
|
|
def delete_cron_job(id: str, user_email: str):
|
|
query = """
|
|
DELETE FROM cron_jobs
|
|
WHERE id = ? AND user_email = ?
|
|
"""
|
|
|
|
values = (id, user_email)
|
|
insert(query, values)
|
|
|
|
return True
|
|
|
|
|
|
def get_cron_jobs(user_email: str):
|
|
cron_jobs = query("SELECT * FROM cron_jobs WHERE user_email = ?", (user_email,))
|
|
|
|
return cron_jobs
|
|
|
|
|
|
def get_all_cron_jobs():
|
|
cron_jobs = query("SELECT * FROM cron_jobs")
|
|
|
|
return cron_jobs
|
|
|
|
|
|
def insert_job_from_cron_job(job: dict[str, Any]):
|
|
insert_job(
|
|
{
|
|
**job,
|
|
"id": uuid.uuid4().hex,
|
|
"status": "Queued",
|
|
"result": "",
|
|
"chat": None,
|
|
"time_created": datetime.datetime.now(),
|
|
"time_updated": datetime.datetime.now(),
|
|
}
|
|
)
|
|
|
|
|
|
def get_cron_job_trigger(cron_expression: str):
|
|
expression_parts = cron_expression.split()
|
|
|
|
if len(expression_parts) != 5:
|
|
print(f"Invalid cron expression: {cron_expression}")
|
|
return None
|
|
|
|
minute, hour, day, month, day_of_week = expression_parts
|
|
|
|
return CronTrigger(
|
|
minute=minute, hour=hour, day=day, month=month, day_of_week=day_of_week
|
|
)
|
|
|
|
|
|
def start_cron_scheduler(scheduler: BackgroundScheduler):
|
|
cron_jobs = get_all_cron_jobs()
|
|
|
|
LOG.info(f"Cron jobs: {cron_jobs}")
|
|
|
|
for job in cron_jobs:
|
|
queried_job = query("SELECT * FROM jobs WHERE id = ?", (job["job_id"],))
|
|
|
|
LOG.info(f"Adding job: {queried_job}")
|
|
|
|
scheduler.add_job(
|
|
insert_job_from_cron_job,
|
|
get_cron_job_trigger(job["cron_expression"]),
|
|
id=job["id"],
|
|
args=[queried_job[0]],
|
|
)
|