packages feed

amazonka-application-insights-2.0: gen/Amazonka/ApplicationInsights/Types/Observation.hs

{-# 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.ApplicationInsights.Types.Observation
-- 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.ApplicationInsights.Types.Observation where

import Amazonka.ApplicationInsights.Types.CloudWatchEventSource
import Amazonka.ApplicationInsights.Types.LogFilter
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

-- | Describes an anomaly or error with the application.
--
-- /See:/ 'newObservation' smart constructor.
data Observation = Observation'
  { -- | The detail type of the CloudWatch Event-based observation, for example,
    -- @EC2 Instance State-change Notification@.
    cloudWatchEventDetailType :: Prelude.Maybe Prelude.Text,
    -- | The ID of the CloudWatch Event-based observation related to the detected
    -- problem.
    cloudWatchEventId :: Prelude.Maybe Prelude.Text,
    -- | The source of the CloudWatch Event.
    cloudWatchEventSource :: Prelude.Maybe CloudWatchEventSource,
    -- | The CodeDeploy application to which the deployment belongs.
    codeDeployApplication :: Prelude.Maybe Prelude.Text,
    -- | The deployment group to which the CodeDeploy deployment belongs.
    codeDeployDeploymentGroup :: Prelude.Maybe Prelude.Text,
    -- | The deployment ID of the CodeDeploy-based observation related to the
    -- detected problem.
    codeDeployDeploymentId :: Prelude.Maybe Prelude.Text,
    -- | The instance group to which the CodeDeploy instance belongs.
    codeDeployInstanceGroupId :: Prelude.Maybe Prelude.Text,
    -- | The status of the CodeDeploy deployment, for example @SUCCESS@ or
    -- @ FAILURE@.
    codeDeployState :: Prelude.Maybe Prelude.Text,
    -- | The cause of an EBS CloudWatch event.
    ebsCause :: Prelude.Maybe Prelude.Text,
    -- | The type of EBS CloudWatch event, such as @createVolume@, @deleteVolume@
    -- or @attachVolume@.
    ebsEvent :: Prelude.Maybe Prelude.Text,
    -- | The request ID of an EBS CloudWatch event.
    ebsRequestId :: Prelude.Maybe Prelude.Text,
    -- | The result of an EBS CloudWatch event, such as @failed@ or @succeeded@.
    ebsResult :: Prelude.Maybe Prelude.Text,
    -- | The state of the instance, such as @STOPPING@ or @TERMINATING@.
    ec2State :: Prelude.Maybe Prelude.Text,
    -- | The time when the observation ended, in epoch seconds.
    endTime :: Prelude.Maybe Data.POSIX,
    -- | The Amazon Resource Name (ARN) of the AWS Health Event-based
    -- observation.
    healthEventArn :: Prelude.Maybe Prelude.Text,
    -- | The description of the AWS Health event provided by the service, such as
    -- Amazon EC2.
    healthEventDescription :: Prelude.Maybe Prelude.Text,
    -- | The category of the AWS Health event, such as @issue@.
    healthEventTypeCategory :: Prelude.Maybe Prelude.Text,
    -- | The type of the AWS Health event, for example,
    -- @AWS_EC2_POWER_CONNECTIVITY_ISSUE@.
    healthEventTypeCode :: Prelude.Maybe Prelude.Text,
    -- | The service to which the AWS Health Event belongs, such as EC2.
    healthService :: Prelude.Maybe Prelude.Text,
    -- | The ID of the observation type.
    id :: Prelude.Maybe Prelude.Text,
    -- | The timestamp in the CloudWatch Logs that specifies when the matched
    -- line occurred.
    lineTime :: Prelude.Maybe Data.POSIX,
    -- | The log filter of the observation.
    logFilter :: Prelude.Maybe LogFilter,
    -- | The log group name.
    logGroup :: Prelude.Maybe Prelude.Text,
    -- | The log text of the observation.
    logText :: Prelude.Maybe Prelude.Text,
    -- | The name of the observation metric.
    metricName :: Prelude.Maybe Prelude.Text,
    -- | The namespace of the observation metric.
    metricNamespace :: Prelude.Maybe Prelude.Text,
    -- | The category of an RDS event.
    rdsEventCategories :: Prelude.Maybe Prelude.Text,
    -- | The message of an RDS event.
    rdsEventMessage :: Prelude.Maybe Prelude.Text,
    -- | The name of the S3 CloudWatch Event-based observation.
    s3EventName :: Prelude.Maybe Prelude.Text,
    -- | The source resource ARN of the observation.
    sourceARN :: Prelude.Maybe Prelude.Text,
    -- | The source type of the observation.
    sourceType :: Prelude.Maybe Prelude.Text,
    -- | The time when the observation was first detected, in epoch seconds.
    startTime :: Prelude.Maybe Data.POSIX,
    -- | The Amazon Resource Name (ARN) of the step function-based observation.
    statesArn :: Prelude.Maybe Prelude.Text,
    -- | The Amazon Resource Name (ARN) of the step function execution-based
    -- observation.
    statesExecutionArn :: Prelude.Maybe Prelude.Text,
    -- | The input to the step function-based observation.
    statesInput :: Prelude.Maybe Prelude.Text,
    -- | The status of the step function-related observation.
    statesStatus :: Prelude.Maybe Prelude.Text,
    -- | The unit of the source observation metric.
    unit :: Prelude.Maybe Prelude.Text,
    -- | The value of the source observation metric.
    value :: Prelude.Maybe Prelude.Double,
    -- | The X-Ray request error percentage for this node.
    xRayErrorPercent :: Prelude.Maybe Prelude.Int,
    -- | The X-Ray request fault percentage for this node.
    xRayFaultPercent :: Prelude.Maybe Prelude.Int,
    -- | The name of the X-Ray node.
    xRayNodeName :: Prelude.Maybe Prelude.Text,
    -- | The type of the X-Ray node.
    xRayNodeType :: Prelude.Maybe Prelude.Text,
    -- | The X-Ray node request average latency for this node.
    xRayRequestAverageLatency :: Prelude.Maybe Prelude.Integer,
    -- | The X-Ray request count for this node.
    xRayRequestCount :: Prelude.Maybe Prelude.Int,
    -- | The X-Ray request throttle percentage for this node.
    xRayThrottlePercent :: Prelude.Maybe Prelude.Int
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'Observation' 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:
--
-- 'cloudWatchEventDetailType', 'observation_cloudWatchEventDetailType' - The detail type of the CloudWatch Event-based observation, for example,
-- @EC2 Instance State-change Notification@.
--
-- 'cloudWatchEventId', 'observation_cloudWatchEventId' - The ID of the CloudWatch Event-based observation related to the detected
-- problem.
--
-- 'cloudWatchEventSource', 'observation_cloudWatchEventSource' - The source of the CloudWatch Event.
--
-- 'codeDeployApplication', 'observation_codeDeployApplication' - The CodeDeploy application to which the deployment belongs.
--
-- 'codeDeployDeploymentGroup', 'observation_codeDeployDeploymentGroup' - The deployment group to which the CodeDeploy deployment belongs.
--
-- 'codeDeployDeploymentId', 'observation_codeDeployDeploymentId' - The deployment ID of the CodeDeploy-based observation related to the
-- detected problem.
--
-- 'codeDeployInstanceGroupId', 'observation_codeDeployInstanceGroupId' - The instance group to which the CodeDeploy instance belongs.
--
-- 'codeDeployState', 'observation_codeDeployState' - The status of the CodeDeploy deployment, for example @SUCCESS@ or
-- @ FAILURE@.
--
-- 'ebsCause', 'observation_ebsCause' - The cause of an EBS CloudWatch event.
--
-- 'ebsEvent', 'observation_ebsEvent' - The type of EBS CloudWatch event, such as @createVolume@, @deleteVolume@
-- or @attachVolume@.
--
-- 'ebsRequestId', 'observation_ebsRequestId' - The request ID of an EBS CloudWatch event.
--
-- 'ebsResult', 'observation_ebsResult' - The result of an EBS CloudWatch event, such as @failed@ or @succeeded@.
--
-- 'ec2State', 'observation_ec2State' - The state of the instance, such as @STOPPING@ or @TERMINATING@.
--
-- 'endTime', 'observation_endTime' - The time when the observation ended, in epoch seconds.
--
-- 'healthEventArn', 'observation_healthEventArn' - The Amazon Resource Name (ARN) of the AWS Health Event-based
-- observation.
--
-- 'healthEventDescription', 'observation_healthEventDescription' - The description of the AWS Health event provided by the service, such as
-- Amazon EC2.
--
-- 'healthEventTypeCategory', 'observation_healthEventTypeCategory' - The category of the AWS Health event, such as @issue@.
--
-- 'healthEventTypeCode', 'observation_healthEventTypeCode' - The type of the AWS Health event, for example,
-- @AWS_EC2_POWER_CONNECTIVITY_ISSUE@.
--
-- 'healthService', 'observation_healthService' - The service to which the AWS Health Event belongs, such as EC2.
--
-- 'id', 'observation_id' - The ID of the observation type.
--
-- 'lineTime', 'observation_lineTime' - The timestamp in the CloudWatch Logs that specifies when the matched
-- line occurred.
--
-- 'logFilter', 'observation_logFilter' - The log filter of the observation.
--
-- 'logGroup', 'observation_logGroup' - The log group name.
--
-- 'logText', 'observation_logText' - The log text of the observation.
--
-- 'metricName', 'observation_metricName' - The name of the observation metric.
--
-- 'metricNamespace', 'observation_metricNamespace' - The namespace of the observation metric.
--
-- 'rdsEventCategories', 'observation_rdsEventCategories' - The category of an RDS event.
--
-- 'rdsEventMessage', 'observation_rdsEventMessage' - The message of an RDS event.
--
-- 's3EventName', 'observation_s3EventName' - The name of the S3 CloudWatch Event-based observation.
--
-- 'sourceARN', 'observation_sourceARN' - The source resource ARN of the observation.
--
-- 'sourceType', 'observation_sourceType' - The source type of the observation.
--
-- 'startTime', 'observation_startTime' - The time when the observation was first detected, in epoch seconds.
--
-- 'statesArn', 'observation_statesArn' - The Amazon Resource Name (ARN) of the step function-based observation.
--
-- 'statesExecutionArn', 'observation_statesExecutionArn' - The Amazon Resource Name (ARN) of the step function execution-based
-- observation.
--
-- 'statesInput', 'observation_statesInput' - The input to the step function-based observation.
--
-- 'statesStatus', 'observation_statesStatus' - The status of the step function-related observation.
--
-- 'unit', 'observation_unit' - The unit of the source observation metric.
--
-- 'value', 'observation_value' - The value of the source observation metric.
--
-- 'xRayErrorPercent', 'observation_xRayErrorPercent' - The X-Ray request error percentage for this node.
--
-- 'xRayFaultPercent', 'observation_xRayFaultPercent' - The X-Ray request fault percentage for this node.
--
-- 'xRayNodeName', 'observation_xRayNodeName' - The name of the X-Ray node.
--
-- 'xRayNodeType', 'observation_xRayNodeType' - The type of the X-Ray node.
--
-- 'xRayRequestAverageLatency', 'observation_xRayRequestAverageLatency' - The X-Ray node request average latency for this node.
--
-- 'xRayRequestCount', 'observation_xRayRequestCount' - The X-Ray request count for this node.
--
-- 'xRayThrottlePercent', 'observation_xRayThrottlePercent' - The X-Ray request throttle percentage for this node.
newObservation ::
  Observation
newObservation =
  Observation'
    { cloudWatchEventDetailType =
        Prelude.Nothing,
      cloudWatchEventId = Prelude.Nothing,
      cloudWatchEventSource = Prelude.Nothing,
      codeDeployApplication = Prelude.Nothing,
      codeDeployDeploymentGroup = Prelude.Nothing,
      codeDeployDeploymentId = Prelude.Nothing,
      codeDeployInstanceGroupId = Prelude.Nothing,
      codeDeployState = Prelude.Nothing,
      ebsCause = Prelude.Nothing,
      ebsEvent = Prelude.Nothing,
      ebsRequestId = Prelude.Nothing,
      ebsResult = Prelude.Nothing,
      ec2State = Prelude.Nothing,
      endTime = Prelude.Nothing,
      healthEventArn = Prelude.Nothing,
      healthEventDescription = Prelude.Nothing,
      healthEventTypeCategory = Prelude.Nothing,
      healthEventTypeCode = Prelude.Nothing,
      healthService = Prelude.Nothing,
      id = Prelude.Nothing,
      lineTime = Prelude.Nothing,
      logFilter = Prelude.Nothing,
      logGroup = Prelude.Nothing,
      logText = Prelude.Nothing,
      metricName = Prelude.Nothing,
      metricNamespace = Prelude.Nothing,
      rdsEventCategories = Prelude.Nothing,
      rdsEventMessage = Prelude.Nothing,
      s3EventName = Prelude.Nothing,
      sourceARN = Prelude.Nothing,
      sourceType = Prelude.Nothing,
      startTime = Prelude.Nothing,
      statesArn = Prelude.Nothing,
      statesExecutionArn = Prelude.Nothing,
      statesInput = Prelude.Nothing,
      statesStatus = Prelude.Nothing,
      unit = Prelude.Nothing,
      value = Prelude.Nothing,
      xRayErrorPercent = Prelude.Nothing,
      xRayFaultPercent = Prelude.Nothing,
      xRayNodeName = Prelude.Nothing,
      xRayNodeType = Prelude.Nothing,
      xRayRequestAverageLatency = Prelude.Nothing,
      xRayRequestCount = Prelude.Nothing,
      xRayThrottlePercent = Prelude.Nothing
    }

-- | The detail type of the CloudWatch Event-based observation, for example,
-- @EC2 Instance State-change Notification@.
observation_cloudWatchEventDetailType :: Lens.Lens' Observation (Prelude.Maybe Prelude.Text)
observation_cloudWatchEventDetailType = Lens.lens (\Observation' {cloudWatchEventDetailType} -> cloudWatchEventDetailType) (\s@Observation' {} a -> s {cloudWatchEventDetailType = a} :: Observation)

-- | The ID of the CloudWatch Event-based observation related to the detected
-- problem.
observation_cloudWatchEventId :: Lens.Lens' Observation (Prelude.Maybe Prelude.Text)
observation_cloudWatchEventId = Lens.lens (\Observation' {cloudWatchEventId} -> cloudWatchEventId) (\s@Observation' {} a -> s {cloudWatchEventId = a} :: Observation)

-- | The source of the CloudWatch Event.
observation_cloudWatchEventSource :: Lens.Lens' Observation (Prelude.Maybe CloudWatchEventSource)
observation_cloudWatchEventSource = Lens.lens (\Observation' {cloudWatchEventSource} -> cloudWatchEventSource) (\s@Observation' {} a -> s {cloudWatchEventSource = a} :: Observation)

-- | The CodeDeploy application to which the deployment belongs.
observation_codeDeployApplication :: Lens.Lens' Observation (Prelude.Maybe Prelude.Text)
observation_codeDeployApplication = Lens.lens (\Observation' {codeDeployApplication} -> codeDeployApplication) (\s@Observation' {} a -> s {codeDeployApplication = a} :: Observation)

-- | The deployment group to which the CodeDeploy deployment belongs.
observation_codeDeployDeploymentGroup :: Lens.Lens' Observation (Prelude.Maybe Prelude.Text)
observation_codeDeployDeploymentGroup = Lens.lens (\Observation' {codeDeployDeploymentGroup} -> codeDeployDeploymentGroup) (\s@Observation' {} a -> s {codeDeployDeploymentGroup = a} :: Observation)

-- | The deployment ID of the CodeDeploy-based observation related to the
-- detected problem.
observation_codeDeployDeploymentId :: Lens.Lens' Observation (Prelude.Maybe Prelude.Text)
observation_codeDeployDeploymentId = Lens.lens (\Observation' {codeDeployDeploymentId} -> codeDeployDeploymentId) (\s@Observation' {} a -> s {codeDeployDeploymentId = a} :: Observation)

-- | The instance group to which the CodeDeploy instance belongs.
observation_codeDeployInstanceGroupId :: Lens.Lens' Observation (Prelude.Maybe Prelude.Text)
observation_codeDeployInstanceGroupId = Lens.lens (\Observation' {codeDeployInstanceGroupId} -> codeDeployInstanceGroupId) (\s@Observation' {} a -> s {codeDeployInstanceGroupId = a} :: Observation)

-- | The status of the CodeDeploy deployment, for example @SUCCESS@ or
-- @ FAILURE@.
observation_codeDeployState :: Lens.Lens' Observation (Prelude.Maybe Prelude.Text)
observation_codeDeployState = Lens.lens (\Observation' {codeDeployState} -> codeDeployState) (\s@Observation' {} a -> s {codeDeployState = a} :: Observation)

-- | The cause of an EBS CloudWatch event.
observation_ebsCause :: Lens.Lens' Observation (Prelude.Maybe Prelude.Text)
observation_ebsCause = Lens.lens (\Observation' {ebsCause} -> ebsCause) (\s@Observation' {} a -> s {ebsCause = a} :: Observation)

-- | The type of EBS CloudWatch event, such as @createVolume@, @deleteVolume@
-- or @attachVolume@.
observation_ebsEvent :: Lens.Lens' Observation (Prelude.Maybe Prelude.Text)
observation_ebsEvent = Lens.lens (\Observation' {ebsEvent} -> ebsEvent) (\s@Observation' {} a -> s {ebsEvent = a} :: Observation)

-- | The request ID of an EBS CloudWatch event.
observation_ebsRequestId :: Lens.Lens' Observation (Prelude.Maybe Prelude.Text)
observation_ebsRequestId = Lens.lens (\Observation' {ebsRequestId} -> ebsRequestId) (\s@Observation' {} a -> s {ebsRequestId = a} :: Observation)

-- | The result of an EBS CloudWatch event, such as @failed@ or @succeeded@.
observation_ebsResult :: Lens.Lens' Observation (Prelude.Maybe Prelude.Text)
observation_ebsResult = Lens.lens (\Observation' {ebsResult} -> ebsResult) (\s@Observation' {} a -> s {ebsResult = a} :: Observation)

-- | The state of the instance, such as @STOPPING@ or @TERMINATING@.
observation_ec2State :: Lens.Lens' Observation (Prelude.Maybe Prelude.Text)
observation_ec2State = Lens.lens (\Observation' {ec2State} -> ec2State) (\s@Observation' {} a -> s {ec2State = a} :: Observation)

-- | The time when the observation ended, in epoch seconds.
observation_endTime :: Lens.Lens' Observation (Prelude.Maybe Prelude.UTCTime)
observation_endTime = Lens.lens (\Observation' {endTime} -> endTime) (\s@Observation' {} a -> s {endTime = a} :: Observation) Prelude.. Lens.mapping Data._Time

-- | The Amazon Resource Name (ARN) of the AWS Health Event-based
-- observation.
observation_healthEventArn :: Lens.Lens' Observation (Prelude.Maybe Prelude.Text)
observation_healthEventArn = Lens.lens (\Observation' {healthEventArn} -> healthEventArn) (\s@Observation' {} a -> s {healthEventArn = a} :: Observation)

-- | The description of the AWS Health event provided by the service, such as
-- Amazon EC2.
observation_healthEventDescription :: Lens.Lens' Observation (Prelude.Maybe Prelude.Text)
observation_healthEventDescription = Lens.lens (\Observation' {healthEventDescription} -> healthEventDescription) (\s@Observation' {} a -> s {healthEventDescription = a} :: Observation)

-- | The category of the AWS Health event, such as @issue@.
observation_healthEventTypeCategory :: Lens.Lens' Observation (Prelude.Maybe Prelude.Text)
observation_healthEventTypeCategory = Lens.lens (\Observation' {healthEventTypeCategory} -> healthEventTypeCategory) (\s@Observation' {} a -> s {healthEventTypeCategory = a} :: Observation)

-- | The type of the AWS Health event, for example,
-- @AWS_EC2_POWER_CONNECTIVITY_ISSUE@.
observation_healthEventTypeCode :: Lens.Lens' Observation (Prelude.Maybe Prelude.Text)
observation_healthEventTypeCode = Lens.lens (\Observation' {healthEventTypeCode} -> healthEventTypeCode) (\s@Observation' {} a -> s {healthEventTypeCode = a} :: Observation)

-- | The service to which the AWS Health Event belongs, such as EC2.
observation_healthService :: Lens.Lens' Observation (Prelude.Maybe Prelude.Text)
observation_healthService = Lens.lens (\Observation' {healthService} -> healthService) (\s@Observation' {} a -> s {healthService = a} :: Observation)

-- | The ID of the observation type.
observation_id :: Lens.Lens' Observation (Prelude.Maybe Prelude.Text)
observation_id = Lens.lens (\Observation' {id} -> id) (\s@Observation' {} a -> s {id = a} :: Observation)

-- | The timestamp in the CloudWatch Logs that specifies when the matched
-- line occurred.
observation_lineTime :: Lens.Lens' Observation (Prelude.Maybe Prelude.UTCTime)
observation_lineTime = Lens.lens (\Observation' {lineTime} -> lineTime) (\s@Observation' {} a -> s {lineTime = a} :: Observation) Prelude.. Lens.mapping Data._Time

-- | The log filter of the observation.
observation_logFilter :: Lens.Lens' Observation (Prelude.Maybe LogFilter)
observation_logFilter = Lens.lens (\Observation' {logFilter} -> logFilter) (\s@Observation' {} a -> s {logFilter = a} :: Observation)

-- | The log group name.
observation_logGroup :: Lens.Lens' Observation (Prelude.Maybe Prelude.Text)
observation_logGroup = Lens.lens (\Observation' {logGroup} -> logGroup) (\s@Observation' {} a -> s {logGroup = a} :: Observation)

-- | The log text of the observation.
observation_logText :: Lens.Lens' Observation (Prelude.Maybe Prelude.Text)
observation_logText = Lens.lens (\Observation' {logText} -> logText) (\s@Observation' {} a -> s {logText = a} :: Observation)

-- | The name of the observation metric.
observation_metricName :: Lens.Lens' Observation (Prelude.Maybe Prelude.Text)
observation_metricName = Lens.lens (\Observation' {metricName} -> metricName) (\s@Observation' {} a -> s {metricName = a} :: Observation)

-- | The namespace of the observation metric.
observation_metricNamespace :: Lens.Lens' Observation (Prelude.Maybe Prelude.Text)
observation_metricNamespace = Lens.lens (\Observation' {metricNamespace} -> metricNamespace) (\s@Observation' {} a -> s {metricNamespace = a} :: Observation)

-- | The category of an RDS event.
observation_rdsEventCategories :: Lens.Lens' Observation (Prelude.Maybe Prelude.Text)
observation_rdsEventCategories = Lens.lens (\Observation' {rdsEventCategories} -> rdsEventCategories) (\s@Observation' {} a -> s {rdsEventCategories = a} :: Observation)

-- | The message of an RDS event.
observation_rdsEventMessage :: Lens.Lens' Observation (Prelude.Maybe Prelude.Text)
observation_rdsEventMessage = Lens.lens (\Observation' {rdsEventMessage} -> rdsEventMessage) (\s@Observation' {} a -> s {rdsEventMessage = a} :: Observation)

-- | The name of the S3 CloudWatch Event-based observation.
observation_s3EventName :: Lens.Lens' Observation (Prelude.Maybe Prelude.Text)
observation_s3EventName = Lens.lens (\Observation' {s3EventName} -> s3EventName) (\s@Observation' {} a -> s {s3EventName = a} :: Observation)

-- | The source resource ARN of the observation.
observation_sourceARN :: Lens.Lens' Observation (Prelude.Maybe Prelude.Text)
observation_sourceARN = Lens.lens (\Observation' {sourceARN} -> sourceARN) (\s@Observation' {} a -> s {sourceARN = a} :: Observation)

-- | The source type of the observation.
observation_sourceType :: Lens.Lens' Observation (Prelude.Maybe Prelude.Text)
observation_sourceType = Lens.lens (\Observation' {sourceType} -> sourceType) (\s@Observation' {} a -> s {sourceType = a} :: Observation)

-- | The time when the observation was first detected, in epoch seconds.
observation_startTime :: Lens.Lens' Observation (Prelude.Maybe Prelude.UTCTime)
observation_startTime = Lens.lens (\Observation' {startTime} -> startTime) (\s@Observation' {} a -> s {startTime = a} :: Observation) Prelude.. Lens.mapping Data._Time

-- | The Amazon Resource Name (ARN) of the step function-based observation.
observation_statesArn :: Lens.Lens' Observation (Prelude.Maybe Prelude.Text)
observation_statesArn = Lens.lens (\Observation' {statesArn} -> statesArn) (\s@Observation' {} a -> s {statesArn = a} :: Observation)

-- | The Amazon Resource Name (ARN) of the step function execution-based
-- observation.
observation_statesExecutionArn :: Lens.Lens' Observation (Prelude.Maybe Prelude.Text)
observation_statesExecutionArn = Lens.lens (\Observation' {statesExecutionArn} -> statesExecutionArn) (\s@Observation' {} a -> s {statesExecutionArn = a} :: Observation)

-- | The input to the step function-based observation.
observation_statesInput :: Lens.Lens' Observation (Prelude.Maybe Prelude.Text)
observation_statesInput = Lens.lens (\Observation' {statesInput} -> statesInput) (\s@Observation' {} a -> s {statesInput = a} :: Observation)

-- | The status of the step function-related observation.
observation_statesStatus :: Lens.Lens' Observation (Prelude.Maybe Prelude.Text)
observation_statesStatus = Lens.lens (\Observation' {statesStatus} -> statesStatus) (\s@Observation' {} a -> s {statesStatus = a} :: Observation)

-- | The unit of the source observation metric.
observation_unit :: Lens.Lens' Observation (Prelude.Maybe Prelude.Text)
observation_unit = Lens.lens (\Observation' {unit} -> unit) (\s@Observation' {} a -> s {unit = a} :: Observation)

-- | The value of the source observation metric.
observation_value :: Lens.Lens' Observation (Prelude.Maybe Prelude.Double)
observation_value = Lens.lens (\Observation' {value} -> value) (\s@Observation' {} a -> s {value = a} :: Observation)

-- | The X-Ray request error percentage for this node.
observation_xRayErrorPercent :: Lens.Lens' Observation (Prelude.Maybe Prelude.Int)
observation_xRayErrorPercent = Lens.lens (\Observation' {xRayErrorPercent} -> xRayErrorPercent) (\s@Observation' {} a -> s {xRayErrorPercent = a} :: Observation)

-- | The X-Ray request fault percentage for this node.
observation_xRayFaultPercent :: Lens.Lens' Observation (Prelude.Maybe Prelude.Int)
observation_xRayFaultPercent = Lens.lens (\Observation' {xRayFaultPercent} -> xRayFaultPercent) (\s@Observation' {} a -> s {xRayFaultPercent = a} :: Observation)

-- | The name of the X-Ray node.
observation_xRayNodeName :: Lens.Lens' Observation (Prelude.Maybe Prelude.Text)
observation_xRayNodeName = Lens.lens (\Observation' {xRayNodeName} -> xRayNodeName) (\s@Observation' {} a -> s {xRayNodeName = a} :: Observation)

-- | The type of the X-Ray node.
observation_xRayNodeType :: Lens.Lens' Observation (Prelude.Maybe Prelude.Text)
observation_xRayNodeType = Lens.lens (\Observation' {xRayNodeType} -> xRayNodeType) (\s@Observation' {} a -> s {xRayNodeType = a} :: Observation)

-- | The X-Ray node request average latency for this node.
observation_xRayRequestAverageLatency :: Lens.Lens' Observation (Prelude.Maybe Prelude.Integer)
observation_xRayRequestAverageLatency = Lens.lens (\Observation' {xRayRequestAverageLatency} -> xRayRequestAverageLatency) (\s@Observation' {} a -> s {xRayRequestAverageLatency = a} :: Observation)

-- | The X-Ray request count for this node.
observation_xRayRequestCount :: Lens.Lens' Observation (Prelude.Maybe Prelude.Int)
observation_xRayRequestCount = Lens.lens (\Observation' {xRayRequestCount} -> xRayRequestCount) (\s@Observation' {} a -> s {xRayRequestCount = a} :: Observation)

-- | The X-Ray request throttle percentage for this node.
observation_xRayThrottlePercent :: Lens.Lens' Observation (Prelude.Maybe Prelude.Int)
observation_xRayThrottlePercent = Lens.lens (\Observation' {xRayThrottlePercent} -> xRayThrottlePercent) (\s@Observation' {} a -> s {xRayThrottlePercent = a} :: Observation)

instance Data.FromJSON Observation where
  parseJSON =
    Data.withObject
      "Observation"
      ( \x ->
          Observation'
            Prelude.<$> (x Data..:? "CloudWatchEventDetailType")
            Prelude.<*> (x Data..:? "CloudWatchEventId")
            Prelude.<*> (x Data..:? "CloudWatchEventSource")
            Prelude.<*> (x Data..:? "CodeDeployApplication")
            Prelude.<*> (x Data..:? "CodeDeployDeploymentGroup")
            Prelude.<*> (x Data..:? "CodeDeployDeploymentId")
            Prelude.<*> (x Data..:? "CodeDeployInstanceGroupId")
            Prelude.<*> (x Data..:? "CodeDeployState")
            Prelude.<*> (x Data..:? "EbsCause")
            Prelude.<*> (x Data..:? "EbsEvent")
            Prelude.<*> (x Data..:? "EbsRequestId")
            Prelude.<*> (x Data..:? "EbsResult")
            Prelude.<*> (x Data..:? "Ec2State")
            Prelude.<*> (x Data..:? "EndTime")
            Prelude.<*> (x Data..:? "HealthEventArn")
            Prelude.<*> (x Data..:? "HealthEventDescription")
            Prelude.<*> (x Data..:? "HealthEventTypeCategory")
            Prelude.<*> (x Data..:? "HealthEventTypeCode")
            Prelude.<*> (x Data..:? "HealthService")
            Prelude.<*> (x Data..:? "Id")
            Prelude.<*> (x Data..:? "LineTime")
            Prelude.<*> (x Data..:? "LogFilter")
            Prelude.<*> (x Data..:? "LogGroup")
            Prelude.<*> (x Data..:? "LogText")
            Prelude.<*> (x Data..:? "MetricName")
            Prelude.<*> (x Data..:? "MetricNamespace")
            Prelude.<*> (x Data..:? "RdsEventCategories")
            Prelude.<*> (x Data..:? "RdsEventMessage")
            Prelude.<*> (x Data..:? "S3EventName")
            Prelude.<*> (x Data..:? "SourceARN")
            Prelude.<*> (x Data..:? "SourceType")
            Prelude.<*> (x Data..:? "StartTime")
            Prelude.<*> (x Data..:? "StatesArn")
            Prelude.<*> (x Data..:? "StatesExecutionArn")
            Prelude.<*> (x Data..:? "StatesInput")
            Prelude.<*> (x Data..:? "StatesStatus")
            Prelude.<*> (x Data..:? "Unit")
            Prelude.<*> (x Data..:? "Value")
            Prelude.<*> (x Data..:? "XRayErrorPercent")
            Prelude.<*> (x Data..:? "XRayFaultPercent")
            Prelude.<*> (x Data..:? "XRayNodeName")
            Prelude.<*> (x Data..:? "XRayNodeType")
            Prelude.<*> (x Data..:? "XRayRequestAverageLatency")
            Prelude.<*> (x Data..:? "XRayRequestCount")
            Prelude.<*> (x Data..:? "XRayThrottlePercent")
      )

instance Prelude.Hashable Observation where
  hashWithSalt _salt Observation' {..} =
    _salt
      `Prelude.hashWithSalt` cloudWatchEventDetailType
      `Prelude.hashWithSalt` cloudWatchEventId
      `Prelude.hashWithSalt` cloudWatchEventSource
      `Prelude.hashWithSalt` codeDeployApplication
      `Prelude.hashWithSalt` codeDeployDeploymentGroup
      `Prelude.hashWithSalt` codeDeployDeploymentId
      `Prelude.hashWithSalt` codeDeployInstanceGroupId
      `Prelude.hashWithSalt` codeDeployState
      `Prelude.hashWithSalt` ebsCause
      `Prelude.hashWithSalt` ebsEvent
      `Prelude.hashWithSalt` ebsRequestId
      `Prelude.hashWithSalt` ebsResult
      `Prelude.hashWithSalt` ec2State
      `Prelude.hashWithSalt` endTime
      `Prelude.hashWithSalt` healthEventArn
      `Prelude.hashWithSalt` healthEventDescription
      `Prelude.hashWithSalt` healthEventTypeCategory
      `Prelude.hashWithSalt` healthEventTypeCode
      `Prelude.hashWithSalt` healthService
      `Prelude.hashWithSalt` id
      `Prelude.hashWithSalt` lineTime
      `Prelude.hashWithSalt` logFilter
      `Prelude.hashWithSalt` logGroup
      `Prelude.hashWithSalt` logText
      `Prelude.hashWithSalt` metricName
      `Prelude.hashWithSalt` metricNamespace
      `Prelude.hashWithSalt` rdsEventCategories
      `Prelude.hashWithSalt` rdsEventMessage
      `Prelude.hashWithSalt` s3EventName
      `Prelude.hashWithSalt` sourceARN
      `Prelude.hashWithSalt` sourceType
      `Prelude.hashWithSalt` startTime
      `Prelude.hashWithSalt` statesArn
      `Prelude.hashWithSalt` statesExecutionArn
      `Prelude.hashWithSalt` statesInput
      `Prelude.hashWithSalt` statesStatus
      `Prelude.hashWithSalt` unit
      `Prelude.hashWithSalt` value
      `Prelude.hashWithSalt` xRayErrorPercent
      `Prelude.hashWithSalt` xRayFaultPercent
      `Prelude.hashWithSalt` xRayNodeName
      `Prelude.hashWithSalt` xRayNodeType
      `Prelude.hashWithSalt` xRayRequestAverageLatency
      `Prelude.hashWithSalt` xRayRequestCount
      `Prelude.hashWithSalt` xRayThrottlePercent

instance Prelude.NFData Observation where
  rnf Observation' {..} =
    Prelude.rnf cloudWatchEventDetailType
      `Prelude.seq` Prelude.rnf cloudWatchEventId
      `Prelude.seq` Prelude.rnf cloudWatchEventSource
      `Prelude.seq` Prelude.rnf codeDeployApplication
      `Prelude.seq` Prelude.rnf codeDeployDeploymentGroup
      `Prelude.seq` Prelude.rnf codeDeployDeploymentId
      `Prelude.seq` Prelude.rnf codeDeployInstanceGroupId
      `Prelude.seq` Prelude.rnf codeDeployState
      `Prelude.seq` Prelude.rnf ebsCause
      `Prelude.seq` Prelude.rnf ebsEvent
      `Prelude.seq` Prelude.rnf ebsRequestId
      `Prelude.seq` Prelude.rnf ebsResult
      `Prelude.seq` Prelude.rnf ec2State
      `Prelude.seq` Prelude.rnf endTime
      `Prelude.seq` Prelude.rnf healthEventArn
      `Prelude.seq` Prelude.rnf healthEventDescription
      `Prelude.seq` Prelude.rnf healthEventTypeCategory
      `Prelude.seq` Prelude.rnf healthEventTypeCode
      `Prelude.seq` Prelude.rnf healthService
      `Prelude.seq` Prelude.rnf id
      `Prelude.seq` Prelude.rnf lineTime
      `Prelude.seq` Prelude.rnf logFilter
      `Prelude.seq` Prelude.rnf logGroup
      `Prelude.seq` Prelude.rnf logText
      `Prelude.seq` Prelude.rnf
        metricName
      `Prelude.seq` Prelude.rnf
        metricNamespace
      `Prelude.seq` Prelude.rnf
        rdsEventCategories
      `Prelude.seq` Prelude.rnf
        rdsEventMessage
      `Prelude.seq` Prelude.rnf
        s3EventName
      `Prelude.seq` Prelude.rnf
        sourceARN
      `Prelude.seq` Prelude.rnf
        sourceType
      `Prelude.seq` Prelude.rnf
        startTime
      `Prelude.seq` Prelude.rnf
        statesArn
      `Prelude.seq` Prelude.rnf
        statesExecutionArn
      `Prelude.seq` Prelude.rnf
        statesInput
      `Prelude.seq` Prelude.rnf
        statesStatus
      `Prelude.seq` Prelude.rnf
        unit
      `Prelude.seq` Prelude.rnf
        value
      `Prelude.seq` Prelude.rnf
        xRayErrorPercent
      `Prelude.seq` Prelude.rnf
        xRayFaultPercent
      `Prelude.seq` Prelude.rnf
        xRayNodeName
      `Prelude.seq` Prelude.rnf
        xRayNodeType
      `Prelude.seq` Prelude.rnf
        xRayRequestAverageLatency
      `Prelude.seq` Prelude.rnf
        xRayRequestCount
      `Prelude.seq` Prelude.rnf
        xRayThrottlePercent