syncing scripts
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
import logging
|
||||
import os
|
||||
from datetime import datetime
|
||||
from sqlalchemy import create_engine, Column, Integer, String, DateTime, Enum, Text
|
||||
from sqlalchemy.orm import declarative_base, sessionmaker
|
||||
import enum
|
||||
|
||||
# Setup Logging
|
||||
log_dir = "logs"
|
||||
os.makedirs(log_dir, exist_ok=True)
|
||||
log_file = os.path.join(log_dir, f"transcriber_{datetime.now().strftime('%Y%m%d')}.log")
|
||||
|
||||
logging.basicConfig(
|
||||
level=logging.INFO,
|
||||
format='%(asctime)s - %(levelname)s - %(message)s',
|
||||
handlers=[
|
||||
logging.FileHandler(log_file),
|
||||
logging.StreamHandler()
|
||||
]
|
||||
)
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
# Database Setup
|
||||
Base = declarative_base()
|
||||
DB_FILE = "job_history.db"
|
||||
|
||||
class JobStatus(enum.Enum):
|
||||
PENDING = "pending"
|
||||
PROCESSING = "processing"
|
||||
COMPLETED = "completed"
|
||||
FAILED = "failed"
|
||||
|
||||
class Job(Base):
|
||||
__tablename__ = 'jobs'
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
file_path = Column(String, unique=True, nullable=False)
|
||||
status = Column(Enum(JobStatus), default=JobStatus.PENDING)
|
||||
error_message = Column(Text, nullable=True)
|
||||
last_updated = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
|
||||
|
||||
# Track progress of individual steps
|
||||
step_extract = Column(String, default="pending") # pending, done, failed
|
||||
step_transcribe = Column(String, default="pending")
|
||||
step_translate = Column(String, default="pending")
|
||||
step_embed = Column(String, default="pending")
|
||||
|
||||
engine = create_engine(f'sqlite:///{DB_FILE}')
|
||||
Base.metadata.create_all(engine)
|
||||
Session = sessionmaker(bind=engine)
|
||||
|
||||
def get_job(file_path):
|
||||
session = Session()
|
||||
job = session.query(Job).filter_by(file_path=file_path).first()
|
||||
if not job:
|
||||
job = Job(file_path=file_path)
|
||||
session.add(job)
|
||||
session.commit()
|
||||
session.close()
|
||||
return job
|
||||
|
||||
def update_job_status(file_path, status, error=None):
|
||||
session = Session()
|
||||
job = session.query(Job).filter_by(file_path=file_path).first()
|
||||
if job:
|
||||
job.status = status
|
||||
if error:
|
||||
job.error_message = str(error)
|
||||
session.commit()
|
||||
session.close()
|
||||
|
||||
def update_step(file_path, step_name, status):
|
||||
session = Session()
|
||||
job = session.query(Job).filter_by(file_path=file_path).first()
|
||||
if job:
|
||||
setattr(job, step_name, status)
|
||||
session.commit()
|
||||
session.close()
|
||||
|
||||
def get_failed_jobs():
|
||||
session = Session()
|
||||
jobs = session.query(Job).filter_by(status=JobStatus.FAILED).all()
|
||||
session.close()
|
||||
return [j.file_path for j in jobs]
|
||||
Reference in New Issue
Block a user