{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.SageMaker.Types.MonitoringScheduleConfig
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.SageMaker.Types.MonitoringScheduleConfig where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import qualified Amazonka.Prelude as Prelude
import Amazonka.SageMaker.Types.MonitoringJobDefinition
import Amazonka.SageMaker.Types.MonitoringType
import Amazonka.SageMaker.Types.ScheduleConfig

-- | Configures the monitoring schedule and defines the monitoring job.
--
-- /See:/ 'newMonitoringScheduleConfig' smart constructor.
data MonitoringScheduleConfig = MonitoringScheduleConfig'
  { -- | Defines the monitoring job.
    MonitoringScheduleConfig -> Maybe MonitoringJobDefinition
monitoringJobDefinition :: Prelude.Maybe MonitoringJobDefinition,
    -- | The name of the monitoring job definition to schedule.
    MonitoringScheduleConfig -> Maybe Text
monitoringJobDefinitionName :: Prelude.Maybe Prelude.Text,
    -- | The type of the monitoring job definition to schedule.
    MonitoringScheduleConfig -> Maybe MonitoringType
monitoringType :: Prelude.Maybe MonitoringType,
    -- | Configures the monitoring schedule.
    MonitoringScheduleConfig -> Maybe ScheduleConfig
scheduleConfig :: Prelude.Maybe ScheduleConfig
  }
  deriving (MonitoringScheduleConfig -> MonitoringScheduleConfig -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MonitoringScheduleConfig -> MonitoringScheduleConfig -> Bool
$c/= :: MonitoringScheduleConfig -> MonitoringScheduleConfig -> Bool
== :: MonitoringScheduleConfig -> MonitoringScheduleConfig -> Bool
$c== :: MonitoringScheduleConfig -> MonitoringScheduleConfig -> Bool
Prelude.Eq, ReadPrec [MonitoringScheduleConfig]
ReadPrec MonitoringScheduleConfig
Int -> ReadS MonitoringScheduleConfig
ReadS [MonitoringScheduleConfig]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [MonitoringScheduleConfig]
$creadListPrec :: ReadPrec [MonitoringScheduleConfig]
readPrec :: ReadPrec MonitoringScheduleConfig
$creadPrec :: ReadPrec MonitoringScheduleConfig
readList :: ReadS [MonitoringScheduleConfig]
$creadList :: ReadS [MonitoringScheduleConfig]
readsPrec :: Int -> ReadS MonitoringScheduleConfig
$creadsPrec :: Int -> ReadS MonitoringScheduleConfig
Prelude.Read, Int -> MonitoringScheduleConfig -> ShowS
[MonitoringScheduleConfig] -> ShowS
MonitoringScheduleConfig -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MonitoringScheduleConfig] -> ShowS
$cshowList :: [MonitoringScheduleConfig] -> ShowS
show :: MonitoringScheduleConfig -> String
$cshow :: MonitoringScheduleConfig -> String
showsPrec :: Int -> MonitoringScheduleConfig -> ShowS
$cshowsPrec :: Int -> MonitoringScheduleConfig -> ShowS
Prelude.Show, forall x.
Rep MonitoringScheduleConfig x -> MonitoringScheduleConfig
forall x.
MonitoringScheduleConfig -> Rep MonitoringScheduleConfig x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep MonitoringScheduleConfig x -> MonitoringScheduleConfig
$cfrom :: forall x.
MonitoringScheduleConfig -> Rep MonitoringScheduleConfig x
Prelude.Generic)

-- |
-- Create a value of 'MonitoringScheduleConfig' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'monitoringJobDefinition', 'monitoringScheduleConfig_monitoringJobDefinition' - Defines the monitoring job.
--
-- 'monitoringJobDefinitionName', 'monitoringScheduleConfig_monitoringJobDefinitionName' - The name of the monitoring job definition to schedule.
--
-- 'monitoringType', 'monitoringScheduleConfig_monitoringType' - The type of the monitoring job definition to schedule.
--
-- 'scheduleConfig', 'monitoringScheduleConfig_scheduleConfig' - Configures the monitoring schedule.
newMonitoringScheduleConfig ::
  MonitoringScheduleConfig
newMonitoringScheduleConfig :: MonitoringScheduleConfig
newMonitoringScheduleConfig =
  MonitoringScheduleConfig'
    { $sel:monitoringJobDefinition:MonitoringScheduleConfig' :: Maybe MonitoringJobDefinition
monitoringJobDefinition =
        forall a. Maybe a
Prelude.Nothing,
      $sel:monitoringJobDefinitionName:MonitoringScheduleConfig' :: Maybe Text
monitoringJobDefinitionName = forall a. Maybe a
Prelude.Nothing,
      $sel:monitoringType:MonitoringScheduleConfig' :: Maybe MonitoringType
monitoringType = forall a. Maybe a
Prelude.Nothing,
      $sel:scheduleConfig:MonitoringScheduleConfig' :: Maybe ScheduleConfig
scheduleConfig = forall a. Maybe a
Prelude.Nothing
    }

-- | Defines the monitoring job.
monitoringScheduleConfig_monitoringJobDefinition :: Lens.Lens' MonitoringScheduleConfig (Prelude.Maybe MonitoringJobDefinition)
monitoringScheduleConfig_monitoringJobDefinition :: Lens' MonitoringScheduleConfig (Maybe MonitoringJobDefinition)
monitoringScheduleConfig_monitoringJobDefinition = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MonitoringScheduleConfig' {Maybe MonitoringJobDefinition
monitoringJobDefinition :: Maybe MonitoringJobDefinition
$sel:monitoringJobDefinition:MonitoringScheduleConfig' :: MonitoringScheduleConfig -> Maybe MonitoringJobDefinition
monitoringJobDefinition} -> Maybe MonitoringJobDefinition
monitoringJobDefinition) (\s :: MonitoringScheduleConfig
s@MonitoringScheduleConfig' {} Maybe MonitoringJobDefinition
a -> MonitoringScheduleConfig
s {$sel:monitoringJobDefinition:MonitoringScheduleConfig' :: Maybe MonitoringJobDefinition
monitoringJobDefinition = Maybe MonitoringJobDefinition
a} :: MonitoringScheduleConfig)

-- | The name of the monitoring job definition to schedule.
monitoringScheduleConfig_monitoringJobDefinitionName :: Lens.Lens' MonitoringScheduleConfig (Prelude.Maybe Prelude.Text)
monitoringScheduleConfig_monitoringJobDefinitionName :: Lens' MonitoringScheduleConfig (Maybe Text)
monitoringScheduleConfig_monitoringJobDefinitionName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MonitoringScheduleConfig' {Maybe Text
monitoringJobDefinitionName :: Maybe Text
$sel:monitoringJobDefinitionName:MonitoringScheduleConfig' :: MonitoringScheduleConfig -> Maybe Text
monitoringJobDefinitionName} -> Maybe Text
monitoringJobDefinitionName) (\s :: MonitoringScheduleConfig
s@MonitoringScheduleConfig' {} Maybe Text
a -> MonitoringScheduleConfig
s {$sel:monitoringJobDefinitionName:MonitoringScheduleConfig' :: Maybe Text
monitoringJobDefinitionName = Maybe Text
a} :: MonitoringScheduleConfig)

-- | The type of the monitoring job definition to schedule.
monitoringScheduleConfig_monitoringType :: Lens.Lens' MonitoringScheduleConfig (Prelude.Maybe MonitoringType)
monitoringScheduleConfig_monitoringType :: Lens' MonitoringScheduleConfig (Maybe MonitoringType)
monitoringScheduleConfig_monitoringType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MonitoringScheduleConfig' {Maybe MonitoringType
monitoringType :: Maybe MonitoringType
$sel:monitoringType:MonitoringScheduleConfig' :: MonitoringScheduleConfig -> Maybe MonitoringType
monitoringType} -> Maybe MonitoringType
monitoringType) (\s :: MonitoringScheduleConfig
s@MonitoringScheduleConfig' {} Maybe MonitoringType
a -> MonitoringScheduleConfig
s {$sel:monitoringType:MonitoringScheduleConfig' :: Maybe MonitoringType
monitoringType = Maybe MonitoringType
a} :: MonitoringScheduleConfig)

-- | Configures the monitoring schedule.
monitoringScheduleConfig_scheduleConfig :: Lens.Lens' MonitoringScheduleConfig (Prelude.Maybe ScheduleConfig)
monitoringScheduleConfig_scheduleConfig :: Lens' MonitoringScheduleConfig (Maybe ScheduleConfig)
monitoringScheduleConfig_scheduleConfig = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MonitoringScheduleConfig' {Maybe ScheduleConfig
scheduleConfig :: Maybe ScheduleConfig
$sel:scheduleConfig:MonitoringScheduleConfig' :: MonitoringScheduleConfig -> Maybe ScheduleConfig
scheduleConfig} -> Maybe ScheduleConfig
scheduleConfig) (\s :: MonitoringScheduleConfig
s@MonitoringScheduleConfig' {} Maybe ScheduleConfig
a -> MonitoringScheduleConfig
s {$sel:scheduleConfig:MonitoringScheduleConfig' :: Maybe ScheduleConfig
scheduleConfig = Maybe ScheduleConfig
a} :: MonitoringScheduleConfig)

instance Data.FromJSON MonitoringScheduleConfig where
  parseJSON :: Value -> Parser MonitoringScheduleConfig
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"MonitoringScheduleConfig"
      ( \Object
x ->
          Maybe MonitoringJobDefinition
-> Maybe Text
-> Maybe MonitoringType
-> Maybe ScheduleConfig
-> MonitoringScheduleConfig
MonitoringScheduleConfig'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"MonitoringJobDefinition")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"MonitoringJobDefinitionName")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"MonitoringType")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"ScheduleConfig")
      )

instance Prelude.Hashable MonitoringScheduleConfig where
  hashWithSalt :: Int -> MonitoringScheduleConfig -> Int
hashWithSalt Int
_salt MonitoringScheduleConfig' {Maybe Text
Maybe MonitoringType
Maybe ScheduleConfig
Maybe MonitoringJobDefinition
scheduleConfig :: Maybe ScheduleConfig
monitoringType :: Maybe MonitoringType
monitoringJobDefinitionName :: Maybe Text
monitoringJobDefinition :: Maybe MonitoringJobDefinition
$sel:scheduleConfig:MonitoringScheduleConfig' :: MonitoringScheduleConfig -> Maybe ScheduleConfig
$sel:monitoringType:MonitoringScheduleConfig' :: MonitoringScheduleConfig -> Maybe MonitoringType
$sel:monitoringJobDefinitionName:MonitoringScheduleConfig' :: MonitoringScheduleConfig -> Maybe Text
$sel:monitoringJobDefinition:MonitoringScheduleConfig' :: MonitoringScheduleConfig -> Maybe MonitoringJobDefinition
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe MonitoringJobDefinition
monitoringJobDefinition
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
monitoringJobDefinitionName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe MonitoringType
monitoringType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ScheduleConfig
scheduleConfig

instance Prelude.NFData MonitoringScheduleConfig where
  rnf :: MonitoringScheduleConfig -> ()
rnf MonitoringScheduleConfig' {Maybe Text
Maybe MonitoringType
Maybe ScheduleConfig
Maybe MonitoringJobDefinition
scheduleConfig :: Maybe ScheduleConfig
monitoringType :: Maybe MonitoringType
monitoringJobDefinitionName :: Maybe Text
monitoringJobDefinition :: Maybe MonitoringJobDefinition
$sel:scheduleConfig:MonitoringScheduleConfig' :: MonitoringScheduleConfig -> Maybe ScheduleConfig
$sel:monitoringType:MonitoringScheduleConfig' :: MonitoringScheduleConfig -> Maybe MonitoringType
$sel:monitoringJobDefinitionName:MonitoringScheduleConfig' :: MonitoringScheduleConfig -> Maybe Text
$sel:monitoringJobDefinition:MonitoringScheduleConfig' :: MonitoringScheduleConfig -> Maybe MonitoringJobDefinition
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe MonitoringJobDefinition
monitoringJobDefinition
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
monitoringJobDefinitionName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe MonitoringType
monitoringType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ScheduleConfig
scheduleConfig

instance Data.ToJSON MonitoringScheduleConfig where
  toJSON :: MonitoringScheduleConfig -> Value
toJSON MonitoringScheduleConfig' {Maybe Text
Maybe MonitoringType
Maybe ScheduleConfig
Maybe MonitoringJobDefinition
scheduleConfig :: Maybe ScheduleConfig
monitoringType :: Maybe MonitoringType
monitoringJobDefinitionName :: Maybe Text
monitoringJobDefinition :: Maybe MonitoringJobDefinition
$sel:scheduleConfig:MonitoringScheduleConfig' :: MonitoringScheduleConfig -> Maybe ScheduleConfig
$sel:monitoringType:MonitoringScheduleConfig' :: MonitoringScheduleConfig -> Maybe MonitoringType
$sel:monitoringJobDefinitionName:MonitoringScheduleConfig' :: MonitoringScheduleConfig -> Maybe Text
$sel:monitoringJobDefinition:MonitoringScheduleConfig' :: MonitoringScheduleConfig -> Maybe MonitoringJobDefinition
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"MonitoringJobDefinition" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe MonitoringJobDefinition
monitoringJobDefinition,
            (Key
"MonitoringJobDefinitionName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
monitoringJobDefinitionName,
            (Key
"MonitoringType" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe MonitoringType
monitoringType,
            (Key
"ScheduleConfig" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe ScheduleConfig
scheduleConfig
          ]
      )