2025-01-19 14:04:21 +08:00
|
|
|
"""
|
|
|
|
Peer Job Logger
|
|
|
|
"""
|
2025-05-04 17:44:54 +08:00
|
|
|
import os, uuid
|
|
|
|
import sqlalchemy as db
|
2025-01-25 22:15:19 +08:00
|
|
|
from .Log import Log
|
2025-05-04 17:44:54 +08:00
|
|
|
from datetime import datetime
|
2025-01-19 14:04:21 +08:00
|
|
|
|
|
|
|
class PeerJobLogger:
|
2025-05-05 00:40:29 +08:00
|
|
|
def __init__(self, CONFIGURATION_PATH, AllPeerJobs, DashboardConfig):
|
|
|
|
self.engine = db.create_engine(DashboardConfig.getConnectionString("wgdashboard_log"))
|
2025-05-04 17:44:54 +08:00
|
|
|
self.loggerdb = self.engine.connect()
|
|
|
|
self.metadata = db.MetaData()
|
|
|
|
self.jobLogTable = db.Table('JobLog', self.metadata,
|
2025-05-05 00:40:29 +08:00
|
|
|
db.Column('LogID', db.String, nullable=False, primary_key=True),
|
|
|
|
db.Column('JobID', db.String, nullable=False),
|
|
|
|
db.Column('LogDate', (db.DATETIME if DashboardConfig.GetConfig("Database", "type")[1] == 'sqlite' else db.TIMESTAMP),
|
2025-05-04 17:44:54 +08:00
|
|
|
server_default=datetime.now().strftime("%Y-%m-%d %H:%M:%S")),
|
2025-05-05 00:40:29 +08:00
|
|
|
db.Column('Status', db.String, nullable=False),
|
|
|
|
db.Column('Message', db.String)
|
2025-05-04 17:44:54 +08:00
|
|
|
)
|
2025-01-19 14:04:21 +08:00
|
|
|
self.logs: list[Log] = []
|
2025-05-04 17:44:54 +08:00
|
|
|
self.metadata.create_all(self.engine)
|
2025-01-19 14:04:21 +08:00
|
|
|
self.AllPeerJobs = AllPeerJobs
|
|
|
|
def log(self, JobID: str, Status: bool = True, Message: str = "") -> bool:
|
|
|
|
try:
|
2025-05-04 17:44:54 +08:00
|
|
|
with self.engine.begin() as conn:
|
|
|
|
conn.execute(
|
|
|
|
self.jobLogTable.insert().values(
|
|
|
|
{
|
|
|
|
"LogID": str(uuid.uuid4()),
|
|
|
|
"JobID": JobID,
|
|
|
|
"Status": Status,
|
|
|
|
"Message": Message
|
|
|
|
}
|
|
|
|
)
|
|
|
|
)
|
2025-01-19 14:04:21 +08:00
|
|
|
except Exception as e:
|
|
|
|
print(f"[WGDashboard] Peer Job Log Error: {str(e)}")
|
|
|
|
return False
|
|
|
|
return True
|
|
|
|
|
|
|
|
def getLogs(self, all: bool = False, configName = None) -> list[Log]:
|
|
|
|
logs: list[Log] = []
|
|
|
|
try:
|
|
|
|
allJobs = self.AllPeerJobs.getAllJobs(configName)
|
2025-05-04 17:44:54 +08:00
|
|
|
allJobsID = [x.JobID for x in allJobs]
|
|
|
|
stmt = self.jobLogTable.select().where(self.jobLogTable.columns.JobID.in_(
|
|
|
|
allJobsID
|
|
|
|
))
|
|
|
|
table = self.loggerdb.execute(stmt).fetchall()
|
|
|
|
for l in table:
|
|
|
|
logs.append(
|
|
|
|
Log(l.LogID, l.JobID, l.LogDate.strftime("%Y-%m-%d %H:%M:%S"), l.Status, l.Message))
|
2025-01-19 14:04:21 +08:00
|
|
|
except Exception as e:
|
2025-05-04 17:44:54 +08:00
|
|
|
print(e)
|
2025-01-19 14:04:21 +08:00
|
|
|
return logs
|
2025-05-04 17:44:54 +08:00
|
|
|
return logs
|