ms-azure-api-0.4.0.0: src/MSAzureAPI/MachineLearning/Jobs.hs
module MSAzureAPI.MachineLearning.Jobs (
createJob
, listJobs
, JobBaseResource(..)
, JobBase(..)
, Status(..)
, SystemData(..)
) where
import Control.Applicative (Alternative(..))
import Control.Monad.IO.Class (MonadIO(..))
import Data.Foldable (asum)
import Data.Functor (void)
-- import Data.Maybe (listToMaybe)
import GHC.Generics (Generic(..))
-- aeson
import qualified Data.Aeson as A (ToJSON(..), genericToEncoding, FromJSON(..), genericParseJSON, defaultOptions, Options(..), withObject, withText, (.:), (.:?), object, (.=), Key, Value, camelTo2)
-- bytestring
import qualified Data.ByteString as BS (ByteString)
import qualified Data.ByteString.Char8 as BS8 (pack, unpack)
import qualified Data.ByteString.Lazy as LBS (ByteString)
-- hoauth2
-- import Network.OAuth.OAuth2 (OAuth2Token(..))
import Network.OAuth.OAuth2.Internal (AccessToken(..))
-- req
import Network.HTTP.Req (Req, Url, Option, Scheme(..), header, (=:))
-- text
import Data.Text (Text, pack, unpack)
import qualified Data.Text.Lazy as TL (Text, pack, unpack, toStrict)
-- time
import Data.Time (UTCTime, getCurrentTime)
-- import Data.Time.Format (FormatTime, formatTime, defaultTimeLocale)
-- import Data.Time.LocalTime (getZonedTime)
-- -- xeno
-- import qualified Xeno.DOM.Robust as X (Node, Content(..), name, contents, children)
-- -- xmlbf-xeno
-- import qualified Xmlbf.Xeno as XB (fromRawXml)
-- xmlbf
-- import qualified Xmlbf as XB (Parser, runParser, pElement, pText)
import qualified MSAzureAPI.Internal.Common as MSA (APIPlane(..), Collection, (==:), put, get, getBs, post, getLbs, aesonOptions)
-- | List jobs
--
-- @ GET https:\/\/management.azure.com\/subscriptions\/{subscriptionId}\/resourceGroups\/{resourceGroupName}\/providers\/Microsoft.MachineLearningServices\/workspaces\/{workspaceName}\/jobs?api-version=2023-04-01&$skip={$skip}&jobType={jobType}&tag={tag}&listViewType={listViewType}@
listJobs ::
Text -- ^ subscription id
-> Text -- ^ res group id
-> Text -- ^ ML workspace id
-> AccessToken -> Req (MSA.Collection JobBaseResource)
listJobs sid rgid wsid = MSA.get MSA.APManagement [
"subscriptions", sid,
"resourceGroups", rgid,
"providers", "Microsoft.MachineLearningServices",
"workspaces", wsid,
"jobs"
] ("api-version" MSA.==: "2023-04-01")
-- | Create a job
--
-- docs: <https://learn.microsoft.com/en-us/rest/api/azureml/2023-04-01/jobs/create-or-update?tabs=HTTP>
--
-- @PUT https:\/\/management.azure.com\/subscriptions\/{subscriptionId}\/resourceGroups\/{resourceGroupName}\/providers\/Microsoft.MachineLearningServices\/workspaces\/{workspaceName}\/jobs\/{id}?api-version=2023-04-01@
createJob ::
Text -- ^ subscription id
-> Text -- ^ res group id
-> Text -- ^ ML workspace id
-> Text -- ^ job id
-> JobBase
-> AccessToken -> Req JobBaseResource
createJob sid rgid wsid jid =
MSA.put MSA.APManagement [
"subscriptions", sid,
"resourceGroups", rgid,
"providers", "Microsoft.MachineLearningServices",
"workspaces", wsid,
"jobs", jid] ("api-version" MSA.==: "2023-04-01")
-- | https://learn.microsoft.com/en-us/rest/api/azureml/2023-04-01/jobs/create-or-update?tabs=HTTP#jobbaseresource
data JobBaseResource = JobBaseResource {
jbrId :: Text
, jbrName :: Text
, jbrSystemData :: SystemData
, jbrProperties :: JobBase
} deriving (Eq, Show, Generic)
instance A.FromJSON JobBaseResource where
parseJSON = A.genericParseJSON (MSA.aesonOptions "jbr")
data SystemData = SystemData {
sdCreatedAt :: UTCTime
, sdCreatedBy :: Text
, srLastModifiedAt :: UTCTime
, srLastModifiedBy :: Text
} deriving (Eq, Show, Generic)
instance A.FromJSON SystemData where
parseJSON = A.genericParseJSON (MSA.aesonOptions "sd")
-- | JobBase
--
-- https://learn.microsoft.com/en-us/rest/api/azureml/2023-04-01/jobs/create-or-update?tabs=HTTP
-- data JobBase = JBAutoMLJob {
-- jbStatus :: Status
-- , jbComponentId :: Text
-- , jb
-- } -- ^ https://learn.microsoft.com/en-us/rest/api/azureml/2023-04-01/jobs/list?tabs=HTTP#automljob
-- | JBCommandJob {
-- jbStatus :: Status
-- }
-- | JBPipelineJob {
-- jbStatus :: Status
-- }
-- | JBSweepJob {
-- jbStatus :: Status
-- }
data JobBase = JobBase {
jbStatus :: Status
, jbComponentId :: Text
, jbComputeId :: Text
, jbDescription :: Text
, jbDisplayName :: Text
-- , jbInputs :: A.Value -- AutoMLJob doesn't have inputs
, jbOutputs :: A.Value
, jbProperties :: A.Value
}
deriving (Eq, Show, Generic)
instance A.FromJSON JobBase where
parseJSON = A.genericParseJSON (MSA.aesonOptions "jb")
instance A.ToJSON JobBase where
toEncoding = A.genericToEncoding (MSA.aesonOptions "jb")
data Status = CancelRequested
| Canceled
| Completed
| Failed
| Finalizing
| NotResponding
| NotStarted
| Paused
| Preparing
| Provisioning
| Queued
| Running
| Starting
| Unknown
deriving (Eq, Show, Generic)
instance A.FromJSON Status
instance A.ToJSON Status