53 lines
1.4 KiB
Python
53 lines
1.4 KiB
Python
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
from enum import Enum
|
|
from typing import Optional
|
|
|
|
from sqlmodel import SQLModel, Field
|
|
|
|
|
|
class JobStatus(str, Enum):
|
|
QUEUED = "QUEUED"
|
|
RUNNING = "RUNNING"
|
|
COMPLETED = "COMPLETED"
|
|
FAILED = "FAILED"
|
|
|
|
|
|
class Job(SQLModel, table=True):
|
|
id: Optional[int] = Field(default=None, primary_key=True)
|
|
profile_name: str
|
|
client_host: str
|
|
folders: str
|
|
ssh_username: str
|
|
run_id: str
|
|
status: JobStatus = Field(sa_column_kwargs={"default": JobStatus.QUEUED})
|
|
progress: int = 0
|
|
summary: Optional[str] = None
|
|
log_path: Optional[str] = None
|
|
created_at: datetime = Field(default_factory=datetime.utcnow)
|
|
updated_at: datetime = Field(default_factory=datetime.utcnow)
|
|
|
|
|
|
class Profile(SQLModel, table=True):
|
|
id: Optional[int] = Field(default=None, primary_key=True)
|
|
name: str
|
|
folders: str
|
|
schedule_enabled: bool = Field(default=False)
|
|
description: Optional[str] = None
|
|
created_at: datetime = Field(default_factory=datetime.utcnow)
|
|
updated_at: datetime = Field(default_factory=datetime.utcnow)
|
|
|
|
|
|
class Token(SQLModel, table=True):
|
|
token: str = Field(primary_key=True)
|
|
user: str
|
|
expires_at: datetime
|
|
|
|
|
|
class RunHistory(SQLModel, table=True):
|
|
id: Optional[int] = Field(default=None, primary_key=True)
|
|
profile_name: str
|
|
run_id: str
|
|
created_at: datetime = Field(default_factory=datetime.utcnow)
|