chore(lms): re-add dedicated lms audit log table

removed in commit 71cde92, but freuquent lms errors make a dedicated log table for all unprocessed input necessary
This commit is contained in:
Steffen Jost 2023-11-03 15:38:41 +01:00
parent d7a94b9619
commit 7373bc9147
2 changed files with 29 additions and 8 deletions

View File

@ -174,3 +174,12 @@ LmsReport
deriving Generic
-- LmsAudit removed by commit 71cde92a
-- due to frequent transmit errors, a separate lms tranmission log is necessary again
LmsReportLog
qualification QualificationId OnDeleteCascade OnUpdateCascade
ident LmsIdent
date UTCTime Maybe -- BEWARE: timezone is local as submitted by LMS
result LmsState -- (0|1|2) 0=LmsFailed[too many tries], 1=LmsOpen, 2=LmsPassed[success]
lock Bool -- (0|1)
timestamp UTCTime default=now()
deriving Generic

View File

@ -257,6 +257,7 @@ dispatchJobLmsDequeue qid = JobHandlerAtomic act
deleteWhere [LmsUserlistQualification ==. qid, LmsUserlistIdent <-. delusers]
deleteWhere [LmsResultQualification ==. qid, LmsResultIdent <-. delusers]
-- deleteWhere [LmsAuditQualification ==. qid, LmsAuditIdent <-. delusers]
deleteWhere [LmsReportLogQualification ==. qid, LmsReportLogTimestamp <. auditCutoff ]
dispatchJobLmsReports :: QualificationId -> JobHandler UniWorX
@ -379,14 +380,25 @@ dispatchJobLmsReports qid = JobHandlerAtomic act
>>= \nr -> $logInfoS "LMS" $ "Report processing marked " <> tshow nr <> " rows as unlocked and received for qualification " <> tshow qid -- debug, remove later
updateReceivedLocked True
>>= \nr -> $logInfoS "LMS" $ "Report processing marked " <> tshow nr <> " rows as locked and received for qualification " <> tshow qid -- debug, remove later
-- G) Truncate LmsReport for qid and log
-- CONTINUE HERE
-- E.insertSelect $ do
-- lreport <- E.from $ E.table @LmsReport
-- E.where_ $ lreport E.^. LmsReportQualification E.==. E.val qid
-- E.&&.
-- G) Truncate LmsReport for qid, after updating log
E.insertSelect $ do
lreport <- E.from $ E.table @LmsReport
let samelog = E.subSelect $ do
lrl <- E.from $ E.table @LmsReportLog
E.where_ $ lrl E.^. LmsReportLogQualification E.==. E.val qid
E.&&. lrl E.^. LmsReportLogIdent E.==. lreport E.^. LmsReportIdent
E.orderBy [E.desc $ lrl E.^. LmsReportLogTimestamp]
return $ lreport E.^. LmsReportResult E.==. lrl E.^. LmsReportLogResult
E.&&. lreport E.^. LmsReportLock E.==. lrl E.^. LmsReportLogLock
E.where_ $ lreport E.^. LmsReportQualification E.==. E.val qid
E.&&. E.not_ (E.isTrue samelog)
return (LmsReportLog
E.<# (lreport E.^. LmsReportQualification)
E.<&> (lreport E.^. LmsReportIdent )
E.<&> (lreport E.^. LmsReportDate )
E.<&> (lreport E.^. LmsReportResult )
E.<&> (lreport E.^. LmsReportLock )
E.<&> (lreport E.^. LmsReportTimestamp ))
repProc <- deleteWhereCount [LmsReportQualification ==. qid]
$logInfoS "LMS" [st|Processed #{tshow repProc} e-learning status reports for qualification #{tshow qid}.|]