Skip to content

Commit acbaeb2

Browse files
committed
Add error logging to Sync uploads
1 parent 4450f7d commit acbaeb2

File tree

3 files changed

+48
-1
lines changed

3 files changed

+48
-1
lines changed

src/Share/Utils/Logging.hs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,3 +244,26 @@ ioLogger handle formatter msg = liftIO do
244244

245245
instance Loggable Sync.EntityValidationError where
246246
toLog = withSeverity Error . showLog
247+
248+
instance Loggable Sync.HashMismatchForEntity where
249+
toLog = withSeverity Error . showLog
250+
251+
instance Loggable Sync.UploadEntitiesError where
252+
toLog = \case
253+
Sync.UploadEntitiesError'EntityValidationFailure err -> toLog err
254+
Sync.UploadEntitiesError'HashMismatchForEntity mismatch -> toLog mismatch
255+
Sync.UploadEntitiesError'InvalidRepoInfo msg repoInfo ->
256+
textLog ("Invalid repo info: " <> msg <> " RepoInfo: " <> tShow repoInfo)
257+
& withSeverity Error
258+
Sync.UploadEntitiesError'NeedDependencies nd ->
259+
textLog ("Need dependencies: " <> tShow nd)
260+
& withSeverity Error
261+
Sync.UploadEntitiesError'NoWritePermission repoInfo ->
262+
textLog ("No write permission for repo: " <> tShow repoInfo)
263+
& withSeverity UserFault
264+
Sync.UploadEntitiesError'ProjectNotFound projectShorthand ->
265+
textLog ("Project not found: " <> projectShorthand)
266+
& withSeverity UserFault
267+
Sync.UploadEntitiesError'UserNotFound userHandle ->
268+
textLog ("User not found: " <> userHandle)
269+
& withSeverity UserFault

src/Share/Web/Errors.hs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -404,9 +404,25 @@ throwSomeServerError = throwError . SomeServerError . withCallstack
404404

405405
-- Instances from unison types.
406406

407+
407408
instance ToServerError Sync.EntityValidationError where
408409
toServerError = \case
409410
Sync.EntityHashMismatch {} -> ("entity-hash-mismatch", err500)
410411
Sync.UnsupportedEntityType {} -> ("unsupported-entity-type", err500)
411412
Sync.InvalidByteEncoding {} -> ("invalid-byte-encoding", err500)
412413
Sync.HashResolutionFailure {} -> ("hash-resolution-failure", err500)
414+
415+
instance ToServerError Sync.HashMismatchForEntity where
416+
toServerError _ = ("hash-mismatch-for-entity", err400 {errBody = "Hash Mismatch for Entity"})
417+
418+
instance ToServerError Sync.UploadEntitiesError where
419+
toServerError = \case
420+
Sync.UploadEntitiesError'EntityValidationFailure err -> toServerError err
421+
Sync.UploadEntitiesError'HashMismatchForEntity mismatch -> toServerError mismatch
422+
Sync.UploadEntitiesError'InvalidRepoInfo _ _ -> ("invalid-repo-info", err400 {errBody = "Invalid Repo Info"})
423+
Sync.UploadEntitiesError'NeedDependencies _ -> ("need-dependencies", err400 {errBody = "Need Dependencies"})
424+
Sync.UploadEntitiesError'NoWritePermission _ -> ("no-write-permission", err403 {errBody = "No Write Permission"})
425+
Sync.UploadEntitiesError'ProjectNotFound _ -> ("project-not-found", err404 {errBody = "Project Not Found"})
426+
Sync.UploadEntitiesError'UserNotFound _ -> ("user-not-found", err404 {errBody = "User Not Found"})
427+
428+

src/Share/Web/UCM/Sync/Impl.hs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ downloadEntitiesEndpoint mayUserId DownloadEntitiesRequest {repoInfo, hashes = h
189189

190190
uploadEntitiesEndpoint :: UserId -> UploadEntitiesRequest -> WebApp UploadEntitiesResponse
191191
uploadEntitiesEndpoint callingUserId (UploadEntitiesRequest {repoInfo, entities}) = do
192-
either id id <$> runExceptT do
192+
finalizeResponse =<< runExceptT do
193193
addRequestTag "repo-info" (unRepoInfo repoInfo)
194194
codebase <-
195195
case repoInfoKind repoInfo of
@@ -224,6 +224,14 @@ uploadEntitiesEndpoint callingUserId (UploadEntitiesRequest {repoInfo, entities}
224224
Right Nothing -> UploadEntitiesSuccess
225225
-- There were missing dependencies, so we need to ask the client for them.
226226
Right (Just missingDeps) -> UploadEntitiesFailure $ Share.UploadEntitiesError'NeedDependencies (NeedDependencies missingDeps)
227+
where
228+
finalizeResponse :: Either UploadEntitiesResponse UploadEntitiesResponse -> WebApp UploadEntitiesResponse
229+
finalizeResponse result = case either id id result of
230+
success@(UploadEntitiesSuccess) -> pure success
231+
failure@(UploadEntitiesFailure err) -> do
232+
-- Report the error, but return it to the client as well.
233+
reportError err
234+
pure failure
227235

228236
-- | Insert entities to the user's codebase (either temp storage or main), returning the hashes of any missing dependencies
229237
-- we still need from the client.

0 commit comments

Comments
 (0)