chore(avs): proper problem display on admin page
This commit is contained in:
parent
5c8a571c76
commit
4c39670866
@ -111,7 +111,6 @@ ProblemsDriversHaveAvsIds: Alle Inhaber einer Fahrberechtigung konnten einer AVS
|
|||||||
ProblemsUsersAreReachable: Für alle Benutzer ist eine E-Mail oder postalische Adresse bekannt
|
ProblemsUsersAreReachable: Für alle Benutzer ist eine E-Mail oder postalische Adresse bekannt
|
||||||
ProblemsNoStalePrintJobs n@Integer: Alle Briefversandaufträge der vergangenen #{show n} Tage wurden von der Druckerei bestätigt
|
ProblemsNoStalePrintJobs n@Integer: Alle Briefversandaufträge der vergangenen #{show n} Tage wurden von der Druckerei bestätigt
|
||||||
ProblemsNoBadAPCIds: Alle kürzlich empfangenen Druckauftragsbestätigungen waren gültig
|
ProblemsNoBadAPCIds: Alle kürzlich empfangenen Druckauftragsbestätigungen waren gültig
|
||||||
ProblemsNoAvsSynchProblems: Synchronisation mit Ausweisverwaltungssystem (AVS) meldete keine Probleme
|
|
||||||
ProblemsUnreachableHeading: Unerreichbare Benutzer
|
ProblemsUnreachableHeading: Unerreichbare Benutzer
|
||||||
ProblemsUnreachableBody: Benutzer ohne E-Mail oder Postadresse, welche z.B. bei ablaufenden Berechtigungen nicht benachrichtigt werden können:
|
ProblemsUnreachableBody: Benutzer ohne E-Mail oder Postadresse, welche z.B. bei ablaufenden Berechtigungen nicht benachrichtigt werden können:
|
||||||
ProblemsRWithoutFHeading: Fahrer mit R ohne F
|
ProblemsRWithoutFHeading: Fahrer mit R ohne F
|
||||||
@ -120,3 +119,4 @@ ProblemsNoAvsIdHeading: Fahrer ohne AVS-Id
|
|||||||
ProblemsNoAvsIdBody: Fahrer mit gültiger Fahrberechtigung in FRADrive, welche trotzdem nicht fahren dürfen, da die Fahrberechtigung aufgrund einer unbekannten AVS Id nicht an die Ausweisstelle übermittelt werden konnte:
|
ProblemsNoAvsIdBody: Fahrer mit gültiger Fahrberechtigung in FRADrive, welche trotzdem nicht fahren dürfen, da die Fahrberechtigung aufgrund einer unbekannten AVS Id nicht an die Ausweisstelle übermittelt werden konnte:
|
||||||
ProblemsAvsSynchHeading: Synchronisation AVS Fahrberechtigungen
|
ProblemsAvsSynchHeading: Synchronisation AVS Fahrberechtigungen
|
||||||
ProblemsAvsErrorHeading: Fehlermeldungen
|
ProblemsAvsErrorHeading: Fehlermeldungen
|
||||||
|
ProblemsInterfaceSince: Berücksichtigt werden nur Erfolge und Fehler seit
|
||||||
@ -111,7 +111,6 @@ ProblemsDriversHaveAvsIds: All driving licence holder could be matched with thei
|
|||||||
ProblemsUsersAreReachable: Either Email or postal address is known for all users
|
ProblemsUsersAreReachable: Either Email or postal address is known for all users
|
||||||
ProblemsNoStalePrintJobs n: All requests for letter mailing within the last #{show n} days were acknowledged as printed by the airport printing center
|
ProblemsNoStalePrintJobs n: All requests for letter mailing within the last #{show n} days were acknowledged as printed by the airport printing center
|
||||||
ProblemsNoBadAPCIds: All recently received print job ids from Airport Print Center were legit
|
ProblemsNoBadAPCIds: All recently received print job ids from Airport Print Center were legit
|
||||||
ProblemsNoAvsSynchProblems: AVS synchronisation had not problems
|
|
||||||
ProblemsUnreachableHeading: Unreachable Users
|
ProblemsUnreachableHeading: Unreachable Users
|
||||||
ProblemsUnreachableBody: Users without Email nor postal address, who thus cannot be notified about expiring qualifications:
|
ProblemsUnreachableBody: Users without Email nor postal address, who thus cannot be notified about expiring qualifications:
|
||||||
ProblemsRWithoutFHeading: Drivers having 'R' but not 'F'
|
ProblemsRWithoutFHeading: Drivers having 'R' but not 'F'
|
||||||
@ -120,3 +119,4 @@ ProblemsNoAvsIdHeading: Drivers without AVS id
|
|||||||
ProblemsNoAvsIdBody: Drivers having a valid apron driving licence within FRADrive only, but who may not drive since a missing AVS id prevents communication of the driving licence to AVS:
|
ProblemsNoAvsIdBody: Drivers having a valid apron driving licence within FRADrive only, but who may not drive since a missing AVS id prevents communication of the driving licence to AVS:
|
||||||
ProblemsAvsSynchHeading: Synchronisation AVS Driving Licences
|
ProblemsAvsSynchHeading: Synchronisation AVS Driving Licences
|
||||||
ProblemsAvsErrorHeading: Error Log
|
ProblemsAvsErrorHeading: Error Log
|
||||||
|
ProblemsInterfaceSince: Only considering successes and errors since
|
||||||
@ -54,13 +54,12 @@ getAdminProblemsR = do
|
|||||||
flagNonZero n | n <= 0 = flagError True
|
flagNonZero n | n <= 0 = flagError True
|
||||||
| otherwise = messageTooltip =<< handlerToWidget (messageI Error (MsgProblemsDriverSynch n))
|
| otherwise = messageTooltip =<< handlerToWidget (messageI Error (MsgProblemsDriverSynch n))
|
||||||
|
|
||||||
(usersAreReachable, driversHaveAvsIds, rDriversHaveFs, noStalePrintJobs, noBadAPCids, noAvsSynchProblems, interfaceTable) <- runDB $ (,,,,,,)
|
(usersAreReachable, driversHaveAvsIds, rDriversHaveFs, noStalePrintJobs, noBadAPCids, interfaceTable) <- runDB $ (,,,,,)
|
||||||
<$> areAllUsersReachable
|
<$> areAllUsersReachable
|
||||||
<*> allDriversHaveAvsId now
|
<*> allDriversHaveAvsId now
|
||||||
<*> allRDriversHaveFs now
|
<*> allRDriversHaveFs now
|
||||||
<*> (not <$> exists [PrintJobAcknowledged ==. Nothing, PrintJobCreated <. cutOffOldTime])
|
<*> (not <$> exists [PrintJobAcknowledged ==. Nothing, PrintJobCreated <. cutOffOldTime])
|
||||||
<*> (not <$> exists [PrintAcknowledgeProcessed ==. False])
|
<*> (not <$> exists [PrintAcknowledgeProcessed ==. False])
|
||||||
<*> (not <$> exists [UserAvsLastSynchError !=. Nothing])
|
|
||||||
<*> fmap (view _2) (mkInterfaceLogTable flagError cutOffOldTime)
|
<*> fmap (view _2) (mkInterfaceLogTable flagError cutOffOldTime)
|
||||||
diffLics <- try retrieveDifferingLicences >>= \case
|
diffLics <- try retrieveDifferingLicences >>= \case
|
||||||
-- (Left (UnsupportedContentType "text/html" resp)) -> Left $ text2widget "Html received"
|
-- (Left (UnsupportedContentType "text/html" resp)) -> Left $ text2widget "Html received"
|
||||||
@ -248,11 +247,14 @@ mkInterfaceLogTable flagError cutOffOldTime = do
|
|||||||
E.where_ $ uavs E.^. UserAvsLastSynch E.>. E.val cutOffOldTime
|
E.where_ $ uavs E.^. UserAvsLastSynch E.>. E.val cutOffOldTime
|
||||||
let isOk = E.isNothing (uavs E.^. UserAvsLastSynchError)
|
let isOk = E.isNothing (uavs E.^. UserAvsLastSynchError)
|
||||||
E.groupBy isOk
|
E.groupBy isOk
|
||||||
-- E.orderBy [E.descNullsLast isOk]
|
E.orderBy [E.descNullsLast isOk]
|
||||||
return (isOk, E.countRows, E.max_ $ uavs E.^. UserAvsLastSynch)
|
return (isOk, E.countRows, E.max_ $ uavs E.^. UserAvsLastSynch)
|
||||||
let
|
let
|
||||||
mkBadInfo badRows (fromMaybe cutOffOldTime -> badTime) =
|
mkBadInfo badRows (fromMaybe cutOffOldTime -> badTime) | badRows > 0 = do
|
||||||
if badRows > 0 then tshow badRows <> " errors, last " <> tshow (utctDay badTime) else mempty
|
fmtCut <- formatTime SelFormatDate cutOffOldTime
|
||||||
|
fmtBad <- formatTime SelFormatDateTime badTime
|
||||||
|
return $ tshow badRows <> " Fehler seit " <> fmtCut <> ", zuletzt um " <> fmtBad
|
||||||
|
mkBadInfo _ _ = return mempty
|
||||||
writeAvsSynchStats okRows (fromMaybe cutOffOldTime -> okTime) badInfo =
|
writeAvsSynchStats okRows (fromMaybe cutOffOldTime -> okTime) badInfo =
|
||||||
void $ upsertBy (UniqueInterfaceSubtypeWrite "AVS" "Synch" True)
|
void $ upsertBy (UniqueInterfaceSubtypeWrite "AVS" "Synch" True)
|
||||||
(InterfaceLog "AVS" "Synch" True okTime okRows badInfo)
|
(InterfaceLog "AVS" "Synch" True okTime okRows badInfo)
|
||||||
@ -260,11 +262,12 @@ mkInterfaceLogTable flagError cutOffOldTime = do
|
|||||||
--case $(unValueN 3) <$> avsSynchStats of
|
--case $(unValueN 3) <$> avsSynchStats of
|
||||||
case avsSynchStats of
|
case avsSynchStats of
|
||||||
((E.Value True , E.Value okRows, E.Value okTime):(E.Value False, E.Value badRows, E.Value badTime):_) ->
|
((E.Value True , E.Value okRows, E.Value okTime):(E.Value False, E.Value badRows, E.Value badTime):_) ->
|
||||||
writeAvsSynchStats (Just okRows) okTime $ mkBadInfo badRows badTime
|
writeAvsSynchStats (Just okRows) okTime =<< mkBadInfo badRows badTime
|
||||||
((E.Value True , E.Value okRows, E.Value okTime):_) ->
|
((E.Value True , E.Value okRows, E.Value okTime):_) ->
|
||||||
writeAvsSynchStats (Just okRows) okTime mempty
|
writeAvsSynchStats (Just okRows) okTime mempty
|
||||||
((E.Value False, E.Value badRows, E.Value badTime):_) ->
|
((E.Value False, E.Value badRows, E.Value badTime):_) -> do
|
||||||
writeAvsSynchStats Nothing Nothing $ mkBadInfo badRows badTime
|
lastOk <- userAvsLastSynch . entityVal <<$>> selectFirst [UserAvsLastSynchError ==. Nothing] [Desc UserAvsLastSynch]
|
||||||
|
writeAvsSynchStats Nothing lastOk =<< mkBadInfo badRows badTime
|
||||||
_ -> return ()
|
_ -> return ()
|
||||||
|
|
||||||
let
|
let
|
||||||
@ -277,20 +280,22 @@ mkInterfaceLogTable flagError cutOffOldTime = do
|
|||||||
dbtRowKey = (E.^. InterfaceLogId)
|
dbtRowKey = (E.^. InterfaceLogId)
|
||||||
dbtProj = dbtProjId
|
dbtProj = dbtProjId
|
||||||
dbtColonnade = dbColonnade $ mconcat
|
dbtColonnade = dbColonnade $ mconcat
|
||||||
[ sortable Nothing mempty $ wgtCell . flagOld . view (resultILog . _interfaceLogTime)
|
[ sortable Nothing (textCell "Status" ) $ wgtCell . flagOld . view (resultILog . _interfaceLogTime)
|
||||||
, sortable (Just "interface") (textCell "Interface") $ \(view (resultILog . _interfaceLogInterface) -> n) -> textCell n
|
, sortable (Just "interface") (textCell "Interface") $ \(view (resultILog . _interfaceLogInterface) -> n) -> textCell n
|
||||||
, sortable (Just "subtype") (textCell "Art" ) $ textCell . view (resultILog . _interfaceLogSubtype)
|
, sortable (Just "subtype") (textCell "Art" ) $ textCell . view (resultILog . _interfaceLogSubtype)
|
||||||
, sortable (Just "write") (textCell "Write" ) $ (`ifIconCell` IconEdit) . view (resultILog . _interfaceLogWrite)
|
, sortable (Just "write") (textCell "Write" ) $ (`ifIconCell` IconEdit) . view (resultILog . _interfaceLogWrite)
|
||||||
, sortable (Just "rows") (textCell "Zeilen" ) $ cellMaybe numCell . view (resultILog . _interfaceLogRows)
|
|
||||||
, sortable Nothing (textCell "Info" ) $ textCell . view (resultILog . _interfaceLogInfo)
|
|
||||||
, sortable (Just "time") (i18nCell MsgSystemMessageTimestamp) $ dateTimeCell . view (resultILog . _interfaceLogTime)
|
, sortable (Just "time") (i18nCell MsgSystemMessageTimestamp) $ dateTimeCell . view (resultILog . _interfaceLogTime)
|
||||||
|
, sortable (Just "rows") (textCell "Zeilen" ) $ cellMaybe numCell . view (resultILog . _interfaceLogRows)
|
||||||
|
, sortable Nothing (textCell "Info" ) $ \(view resultILog -> ilt) -> case ilt of
|
||||||
|
InterfaceLog "AVS" "Synch" True _ _ i -> anchorCell ProblemAvsErrorR $ toWgt i
|
||||||
|
InterfaceLog _ _ _ _ _ i -> textCell i
|
||||||
]
|
]
|
||||||
dbtSorting = mconcat
|
dbtSorting = mconcat
|
||||||
[ singletonMap "interface" $ SortColumn (E.^. InterfaceLogInterface)
|
[ singletonMap "interface" $ SortColumn (E.^. InterfaceLogInterface)
|
||||||
, singletonMap "subtype" $ SortColumn (E.^. InterfaceLogSubtype)
|
, singletonMap "subtype" $ SortColumn (E.^. InterfaceLogSubtype)
|
||||||
, singletonMap "write" $ SortColumn (E.^. InterfaceLogWrite)
|
, singletonMap "write" $ SortColumn (E.^. InterfaceLogWrite)
|
||||||
, singletonMap "rows" $ SortColumn (E.^. InterfaceLogRows)
|
|
||||||
, singletonMap "time" $ SortColumn (E.^. InterfaceLogTime)
|
, singletonMap "time" $ SortColumn (E.^. InterfaceLogTime)
|
||||||
|
, singletonMap "rows" $ SortColumn (E.^. InterfaceLogRows)
|
||||||
]
|
]
|
||||||
dbtFilter = mempty
|
dbtFilter = mempty
|
||||||
dbtFilterUI = mempty
|
dbtFilterUI = mempty
|
||||||
|
|||||||
@ -55,13 +55,9 @@ $# SPDX-License-Identifier: AGPL-3.0-or-later
|
|||||||
<section>
|
<section>
|
||||||
<h2>
|
<h2>
|
||||||
_{MsgMenuInterfaces}
|
_{MsgMenuInterfaces}
|
||||||
|
|
||||||
<div>
|
|
||||||
<dl .deflist>
|
|
||||||
<dt .deflist__dt>^{flagError noAvsSynchProblems}
|
|
||||||
<dd .deflist__dd>^{simpleLinkI MsgProblemsNoAvsSynchProblems ProblemAvsErrorR}
|
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
|
<p>
|
||||||
|
_{MsgProblemsInterfaceSince} ^{formatTimeW SelFormatDate cutOffOldTime}
|
||||||
^{interfaceTable}
|
^{interfaceTable}
|
||||||
|
|
||||||
<!-- section h2 {MsgProblemsHeadingMisc} -->
|
<!-- section h2 {MsgProblemsHeadingMisc} -->
|
||||||
|
|||||||
Reference in New Issue
Block a user