agent: adds endpoint for disk ejection

This commit is contained in:
Aaron Greenspan
2021-01-11 09:06:55 -07:00
committed by Aiden McClelland
parent 89ff5de01b
commit 4e0ad21384
3 changed files with 18 additions and 0 deletions

View File

@@ -38,6 +38,7 @@
/v0/apps/#AppId/autoconfig/#AppId AutoconfigureR POST
/v0/disks ListDisksR GET
/v0/disks/#Text EjectDiskR DELETE
/v0/update UpdateAgentR POST
/v0/wifi WifiR GET POST

View File

@@ -98,6 +98,9 @@ postRestoreBackupR appId = disableEndpointOnFailedUpdate $ do
getListDisksR :: Handler (JSONResponse [AppMgr.DiskInfo])
getListDisksR = fmap JSONResponse . runM . handleS9ErrC $ listDisksLogic
deleteEjectDiskR :: Text -> Handler ()
deleteEjectDiskR t = runM . handleS9ErrC $ ejectDiskLogic t
-- Logic
@@ -203,6 +206,16 @@ restoreBackupLogic appId RestoreBackupReq {..} = do
listDisksLogic :: (Has (Error S9Error) sig m, MonadIO m) => m [AppMgr.DiskInfo]
listDisksLogic = runExceptT AppMgr.diskShow >>= liftEither
ejectDiskLogic :: (Has (Error S9Error) sig m, MonadIO m) => Text -> m ()
ejectDiskLogic t = runExceptT (diskEject t) >>= liftEither
diskEject :: MonadIO m => Text -> S9ErrT m ()
diskEject t = do
(ec, _) <- AppMgr.readProcessInheritStderr "eject" [toS t] ""
case ec of
ExitSuccess -> pure ()
ExitFailure n -> throwE $ EjectE n
insertBackupResult :: MonadIO m => AppId -> Version -> Bool -> SqlPersistT m (Entity BackupRecord)
insertBackupResult appId appVersion succeeded = do
uuid <- liftIO nextRandom

View File

@@ -31,6 +31,7 @@ data S9Error =
| AppMgrParseE Text Text String
| AppMgrInvalidConfigE Text
| AppMgrE Text Int
| EjectE Int
| AvahiE Text
| MetricE Text
| AppMgrVersionE Version VersionRange
@@ -86,6 +87,7 @@ toError = \case
AppMgrParseE cmd result e ->
ErrorResponse APPMGR_PARSE_ERROR [i|"appmgr #{cmd}" yielded an unparseable result:#{result}\nError: #{e}|]
AppMgrE cmd code -> ErrorResponse APPMGR_ERROR [i|"appmgr #{cmd}" exited with #{code}|]
EjectE code -> ErrorResponse EJECT_ERROR [i|"eject" command exited with #{code}|]
AppMgrVersionE av avs ->
ErrorResponse APPMGR_ERROR [i|"appmgr version #{av}" fails to satisfy requisite spec #{avs}|]
AvahiE e -> ErrorResponse AVAHI_ERROR [i|#{e}|]
@@ -151,6 +153,7 @@ data ErrorCode =
| APPMGR_CONFIG_ERROR
| APPMGR_PARSE_ERROR
| APPMGR_ERROR
| EJECT_ERROR
| AVAHI_ERROR
| REGISTRY_ERROR
| APP_NOT_INSTALLED
@@ -201,6 +204,7 @@ toStatus = \case
AppMgrParseE{} -> status500
AppMgrInvalidConfigE _ -> status400
AppMgrE _ _ -> status500
EjectE _ -> status500
AppMgrVersionE _ _ -> status500
AvahiE _ -> status500
MetricE _ -> status500