{-# 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.LakeFormation.Types.ExecutionStatistics
-- 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.LakeFormation.Types.ExecutionStatistics 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

-- | Statistics related to the processing of a query statement.
--
-- /See:/ 'newExecutionStatistics' smart constructor.
data ExecutionStatistics = ExecutionStatistics'
  { -- | The average time the request took to be executed.
    ExecutionStatistics -> Maybe Integer
averageExecutionTimeMillis :: Prelude.Maybe Prelude.Integer,
    -- | The amount of data that was scanned in bytes.
    ExecutionStatistics -> Maybe Integer
dataScannedBytes :: Prelude.Maybe Prelude.Integer,
    -- | The number of work units executed.
    ExecutionStatistics -> Maybe Integer
workUnitsExecutedCount :: Prelude.Maybe Prelude.Integer
  }
  deriving (ExecutionStatistics -> ExecutionStatistics -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ExecutionStatistics -> ExecutionStatistics -> Bool
$c/= :: ExecutionStatistics -> ExecutionStatistics -> Bool
== :: ExecutionStatistics -> ExecutionStatistics -> Bool
$c== :: ExecutionStatistics -> ExecutionStatistics -> Bool
Prelude.Eq, ReadPrec [ExecutionStatistics]
ReadPrec ExecutionStatistics
Int -> ReadS ExecutionStatistics
ReadS [ExecutionStatistics]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ExecutionStatistics]
$creadListPrec :: ReadPrec [ExecutionStatistics]
readPrec :: ReadPrec ExecutionStatistics
$creadPrec :: ReadPrec ExecutionStatistics
readList :: ReadS [ExecutionStatistics]
$creadList :: ReadS [ExecutionStatistics]
readsPrec :: Int -> ReadS ExecutionStatistics
$creadsPrec :: Int -> ReadS ExecutionStatistics
Prelude.Read, Int -> ExecutionStatistics -> ShowS
[ExecutionStatistics] -> ShowS
ExecutionStatistics -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ExecutionStatistics] -> ShowS
$cshowList :: [ExecutionStatistics] -> ShowS
show :: ExecutionStatistics -> String
$cshow :: ExecutionStatistics -> String
showsPrec :: Int -> ExecutionStatistics -> ShowS
$cshowsPrec :: Int -> ExecutionStatistics -> ShowS
Prelude.Show, forall x. Rep ExecutionStatistics x -> ExecutionStatistics
forall x. ExecutionStatistics -> Rep ExecutionStatistics x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ExecutionStatistics x -> ExecutionStatistics
$cfrom :: forall x. ExecutionStatistics -> Rep ExecutionStatistics x
Prelude.Generic)

-- |
-- Create a value of 'ExecutionStatistics' 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:
--
-- 'averageExecutionTimeMillis', 'executionStatistics_averageExecutionTimeMillis' - The average time the request took to be executed.
--
-- 'dataScannedBytes', 'executionStatistics_dataScannedBytes' - The amount of data that was scanned in bytes.
--
-- 'workUnitsExecutedCount', 'executionStatistics_workUnitsExecutedCount' - The number of work units executed.
newExecutionStatistics ::
  ExecutionStatistics
newExecutionStatistics :: ExecutionStatistics
newExecutionStatistics =
  ExecutionStatistics'
    { $sel:averageExecutionTimeMillis:ExecutionStatistics' :: Maybe Integer
averageExecutionTimeMillis =
        forall a. Maybe a
Prelude.Nothing,
      $sel:dataScannedBytes:ExecutionStatistics' :: Maybe Integer
dataScannedBytes = forall a. Maybe a
Prelude.Nothing,
      $sel:workUnitsExecutedCount:ExecutionStatistics' :: Maybe Integer
workUnitsExecutedCount = forall a. Maybe a
Prelude.Nothing
    }

-- | The average time the request took to be executed.
executionStatistics_averageExecutionTimeMillis :: Lens.Lens' ExecutionStatistics (Prelude.Maybe Prelude.Integer)
executionStatistics_averageExecutionTimeMillis :: Lens' ExecutionStatistics (Maybe Integer)
executionStatistics_averageExecutionTimeMillis = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ExecutionStatistics' {Maybe Integer
averageExecutionTimeMillis :: Maybe Integer
$sel:averageExecutionTimeMillis:ExecutionStatistics' :: ExecutionStatistics -> Maybe Integer
averageExecutionTimeMillis} -> Maybe Integer
averageExecutionTimeMillis) (\s :: ExecutionStatistics
s@ExecutionStatistics' {} Maybe Integer
a -> ExecutionStatistics
s {$sel:averageExecutionTimeMillis:ExecutionStatistics' :: Maybe Integer
averageExecutionTimeMillis = Maybe Integer
a} :: ExecutionStatistics)

-- | The amount of data that was scanned in bytes.
executionStatistics_dataScannedBytes :: Lens.Lens' ExecutionStatistics (Prelude.Maybe Prelude.Integer)
executionStatistics_dataScannedBytes :: Lens' ExecutionStatistics (Maybe Integer)
executionStatistics_dataScannedBytes = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ExecutionStatistics' {Maybe Integer
dataScannedBytes :: Maybe Integer
$sel:dataScannedBytes:ExecutionStatistics' :: ExecutionStatistics -> Maybe Integer
dataScannedBytes} -> Maybe Integer
dataScannedBytes) (\s :: ExecutionStatistics
s@ExecutionStatistics' {} Maybe Integer
a -> ExecutionStatistics
s {$sel:dataScannedBytes:ExecutionStatistics' :: Maybe Integer
dataScannedBytes = Maybe Integer
a} :: ExecutionStatistics)

-- | The number of work units executed.
executionStatistics_workUnitsExecutedCount :: Lens.Lens' ExecutionStatistics (Prelude.Maybe Prelude.Integer)
executionStatistics_workUnitsExecutedCount :: Lens' ExecutionStatistics (Maybe Integer)
executionStatistics_workUnitsExecutedCount = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ExecutionStatistics' {Maybe Integer
workUnitsExecutedCount :: Maybe Integer
$sel:workUnitsExecutedCount:ExecutionStatistics' :: ExecutionStatistics -> Maybe Integer
workUnitsExecutedCount} -> Maybe Integer
workUnitsExecutedCount) (\s :: ExecutionStatistics
s@ExecutionStatistics' {} Maybe Integer
a -> ExecutionStatistics
s {$sel:workUnitsExecutedCount:ExecutionStatistics' :: Maybe Integer
workUnitsExecutedCount = Maybe Integer
a} :: ExecutionStatistics)

instance Data.FromJSON ExecutionStatistics where
  parseJSON :: Value -> Parser ExecutionStatistics
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"ExecutionStatistics"
      ( \Object
x ->
          Maybe Integer
-> Maybe Integer -> Maybe Integer -> ExecutionStatistics
ExecutionStatistics'
            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
"AverageExecutionTimeMillis")
            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
"DataScannedBytes")
            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
"WorkUnitsExecutedCount")
      )

instance Prelude.Hashable ExecutionStatistics where
  hashWithSalt :: Int -> ExecutionStatistics -> Int
hashWithSalt Int
_salt ExecutionStatistics' {Maybe Integer
workUnitsExecutedCount :: Maybe Integer
dataScannedBytes :: Maybe Integer
averageExecutionTimeMillis :: Maybe Integer
$sel:workUnitsExecutedCount:ExecutionStatistics' :: ExecutionStatistics -> Maybe Integer
$sel:dataScannedBytes:ExecutionStatistics' :: ExecutionStatistics -> Maybe Integer
$sel:averageExecutionTimeMillis:ExecutionStatistics' :: ExecutionStatistics -> Maybe Integer
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Integer
averageExecutionTimeMillis
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Integer
dataScannedBytes
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Integer
workUnitsExecutedCount

instance Prelude.NFData ExecutionStatistics where
  rnf :: ExecutionStatistics -> ()
rnf ExecutionStatistics' {Maybe Integer
workUnitsExecutedCount :: Maybe Integer
dataScannedBytes :: Maybe Integer
averageExecutionTimeMillis :: Maybe Integer
$sel:workUnitsExecutedCount:ExecutionStatistics' :: ExecutionStatistics -> Maybe Integer
$sel:dataScannedBytes:ExecutionStatistics' :: ExecutionStatistics -> Maybe Integer
$sel:averageExecutionTimeMillis:ExecutionStatistics' :: ExecutionStatistics -> Maybe Integer
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Integer
averageExecutionTimeMillis
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Integer
dataScannedBytes
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Integer
workUnitsExecutedCount