packages feed

amazonka-migrationhubstrategy-2.0: gen/Amazonka/MigrationHubStrategy/Types/ApplicationComponentDetail.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.MigrationHubStrategy.Types.ApplicationComponentDetail
-- 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.MigrationHubStrategy.Types.ApplicationComponentDetail where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.MigrationHubStrategy.Types.AntipatternReportStatus
import Amazonka.MigrationHubStrategy.Types.AntipatternSeveritySummary
import Amazonka.MigrationHubStrategy.Types.AppType
import Amazonka.MigrationHubStrategy.Types.AppUnitError
import Amazonka.MigrationHubStrategy.Types.DatabaseConfigDetail
import Amazonka.MigrationHubStrategy.Types.InclusionStatus
import Amazonka.MigrationHubStrategy.Types.RecommendationSet
import Amazonka.MigrationHubStrategy.Types.ResourceSubType
import Amazonka.MigrationHubStrategy.Types.RuntimeAnalysisStatus
import Amazonka.MigrationHubStrategy.Types.S3Object
import Amazonka.MigrationHubStrategy.Types.SourceCodeRepository
import Amazonka.MigrationHubStrategy.Types.SrcCodeOrDbAnalysisStatus
import qualified Amazonka.Prelude as Prelude

-- | Contains detailed information about an application component.
--
-- /See:/ 'newApplicationComponentDetail' smart constructor.
data ApplicationComponentDetail = ApplicationComponentDetail'
  { -- | The status of analysis, if the application component has source code or
    -- an associated database.
    analysisStatus :: Prelude.Maybe SrcCodeOrDbAnalysisStatus,
    -- | The S3 bucket name and the Amazon S3 key name for the anti-pattern
    -- report.
    antipatternReportS3Object :: Prelude.Maybe S3Object,
    -- | The status of the anti-pattern report generation.
    antipatternReportStatus :: Prelude.Maybe AntipatternReportStatus,
    -- | The status message for the anti-pattern.
    antipatternReportStatusMessage :: Prelude.Maybe Prelude.Text,
    -- | The type of application component.
    appType :: Prelude.Maybe AppType,
    -- | The error in the analysis of the source code or database.
    appUnitError :: Prelude.Maybe AppUnitError,
    -- | The ID of the server that the application component is running on.
    associatedServerId :: Prelude.Maybe Prelude.Text,
    -- | Configuration details for the database associated with the application
    -- component.
    databaseConfigDetail :: Prelude.Maybe DatabaseConfigDetail,
    -- | The ID of the application component.
    id :: Prelude.Maybe Prelude.Text,
    -- | Indicates whether the application component has been included for server
    -- recommendation or not.
    inclusionStatus :: Prelude.Maybe InclusionStatus,
    -- | The timestamp of when the application component was assessed.
    lastAnalyzedTimestamp :: Prelude.Maybe Data.POSIX,
    -- | A list of anti-pattern severity summaries.
    listAntipatternSeveritySummary :: Prelude.Maybe [AntipatternSeveritySummary],
    -- | Set to true if the application component is running on multiple servers.
    moreServerAssociationExists :: Prelude.Maybe Prelude.Bool,
    -- | The name of application component.
    name :: Prelude.Maybe Prelude.Text,
    -- | OS driver.
    osDriver :: Prelude.Maybe Prelude.Text,
    -- | OS version.
    osVersion :: Prelude.Maybe Prelude.Text,
    -- | The top recommendation set for the application component.
    recommendationSet :: Prelude.Maybe RecommendationSet,
    -- | The application component subtype.
    resourceSubType :: Prelude.Maybe ResourceSubType,
    -- | The status of the application unit.
    runtimeStatus :: Prelude.Maybe RuntimeAnalysisStatus,
    -- | The status message for the application unit.
    runtimeStatusMessage :: Prelude.Maybe Prelude.Text,
    -- | Details about the source code repository associated with the application
    -- component.
    sourceCodeRepositories :: Prelude.Maybe [SourceCodeRepository],
    -- | A detailed description of the analysis status and any failure message.
    statusMessage :: Prelude.Maybe Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'ApplicationComponentDetail' 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:
--
-- 'analysisStatus', 'applicationComponentDetail_analysisStatus' - The status of analysis, if the application component has source code or
-- an associated database.
--
-- 'antipatternReportS3Object', 'applicationComponentDetail_antipatternReportS3Object' - The S3 bucket name and the Amazon S3 key name for the anti-pattern
-- report.
--
-- 'antipatternReportStatus', 'applicationComponentDetail_antipatternReportStatus' - The status of the anti-pattern report generation.
--
-- 'antipatternReportStatusMessage', 'applicationComponentDetail_antipatternReportStatusMessage' - The status message for the anti-pattern.
--
-- 'appType', 'applicationComponentDetail_appType' - The type of application component.
--
-- 'appUnitError', 'applicationComponentDetail_appUnitError' - The error in the analysis of the source code or database.
--
-- 'associatedServerId', 'applicationComponentDetail_associatedServerId' - The ID of the server that the application component is running on.
--
-- 'databaseConfigDetail', 'applicationComponentDetail_databaseConfigDetail' - Configuration details for the database associated with the application
-- component.
--
-- 'id', 'applicationComponentDetail_id' - The ID of the application component.
--
-- 'inclusionStatus', 'applicationComponentDetail_inclusionStatus' - Indicates whether the application component has been included for server
-- recommendation or not.
--
-- 'lastAnalyzedTimestamp', 'applicationComponentDetail_lastAnalyzedTimestamp' - The timestamp of when the application component was assessed.
--
-- 'listAntipatternSeveritySummary', 'applicationComponentDetail_listAntipatternSeveritySummary' - A list of anti-pattern severity summaries.
--
-- 'moreServerAssociationExists', 'applicationComponentDetail_moreServerAssociationExists' - Set to true if the application component is running on multiple servers.
--
-- 'name', 'applicationComponentDetail_name' - The name of application component.
--
-- 'osDriver', 'applicationComponentDetail_osDriver' - OS driver.
--
-- 'osVersion', 'applicationComponentDetail_osVersion' - OS version.
--
-- 'recommendationSet', 'applicationComponentDetail_recommendationSet' - The top recommendation set for the application component.
--
-- 'resourceSubType', 'applicationComponentDetail_resourceSubType' - The application component subtype.
--
-- 'runtimeStatus', 'applicationComponentDetail_runtimeStatus' - The status of the application unit.
--
-- 'runtimeStatusMessage', 'applicationComponentDetail_runtimeStatusMessage' - The status message for the application unit.
--
-- 'sourceCodeRepositories', 'applicationComponentDetail_sourceCodeRepositories' - Details about the source code repository associated with the application
-- component.
--
-- 'statusMessage', 'applicationComponentDetail_statusMessage' - A detailed description of the analysis status and any failure message.
newApplicationComponentDetail ::
  ApplicationComponentDetail
newApplicationComponentDetail =
  ApplicationComponentDetail'
    { analysisStatus =
        Prelude.Nothing,
      antipatternReportS3Object = Prelude.Nothing,
      antipatternReportStatus = Prelude.Nothing,
      antipatternReportStatusMessage =
        Prelude.Nothing,
      appType = Prelude.Nothing,
      appUnitError = Prelude.Nothing,
      associatedServerId = Prelude.Nothing,
      databaseConfigDetail = Prelude.Nothing,
      id = Prelude.Nothing,
      inclusionStatus = Prelude.Nothing,
      lastAnalyzedTimestamp = Prelude.Nothing,
      listAntipatternSeveritySummary =
        Prelude.Nothing,
      moreServerAssociationExists = Prelude.Nothing,
      name = Prelude.Nothing,
      osDriver = Prelude.Nothing,
      osVersion = Prelude.Nothing,
      recommendationSet = Prelude.Nothing,
      resourceSubType = Prelude.Nothing,
      runtimeStatus = Prelude.Nothing,
      runtimeStatusMessage = Prelude.Nothing,
      sourceCodeRepositories = Prelude.Nothing,
      statusMessage = Prelude.Nothing
    }

-- | The status of analysis, if the application component has source code or
-- an associated database.
applicationComponentDetail_analysisStatus :: Lens.Lens' ApplicationComponentDetail (Prelude.Maybe SrcCodeOrDbAnalysisStatus)
applicationComponentDetail_analysisStatus = Lens.lens (\ApplicationComponentDetail' {analysisStatus} -> analysisStatus) (\s@ApplicationComponentDetail' {} a -> s {analysisStatus = a} :: ApplicationComponentDetail)

-- | The S3 bucket name and the Amazon S3 key name for the anti-pattern
-- report.
applicationComponentDetail_antipatternReportS3Object :: Lens.Lens' ApplicationComponentDetail (Prelude.Maybe S3Object)
applicationComponentDetail_antipatternReportS3Object = Lens.lens (\ApplicationComponentDetail' {antipatternReportS3Object} -> antipatternReportS3Object) (\s@ApplicationComponentDetail' {} a -> s {antipatternReportS3Object = a} :: ApplicationComponentDetail)

-- | The status of the anti-pattern report generation.
applicationComponentDetail_antipatternReportStatus :: Lens.Lens' ApplicationComponentDetail (Prelude.Maybe AntipatternReportStatus)
applicationComponentDetail_antipatternReportStatus = Lens.lens (\ApplicationComponentDetail' {antipatternReportStatus} -> antipatternReportStatus) (\s@ApplicationComponentDetail' {} a -> s {antipatternReportStatus = a} :: ApplicationComponentDetail)

-- | The status message for the anti-pattern.
applicationComponentDetail_antipatternReportStatusMessage :: Lens.Lens' ApplicationComponentDetail (Prelude.Maybe Prelude.Text)
applicationComponentDetail_antipatternReportStatusMessage = Lens.lens (\ApplicationComponentDetail' {antipatternReportStatusMessage} -> antipatternReportStatusMessage) (\s@ApplicationComponentDetail' {} a -> s {antipatternReportStatusMessage = a} :: ApplicationComponentDetail)

-- | The type of application component.
applicationComponentDetail_appType :: Lens.Lens' ApplicationComponentDetail (Prelude.Maybe AppType)
applicationComponentDetail_appType = Lens.lens (\ApplicationComponentDetail' {appType} -> appType) (\s@ApplicationComponentDetail' {} a -> s {appType = a} :: ApplicationComponentDetail)

-- | The error in the analysis of the source code or database.
applicationComponentDetail_appUnitError :: Lens.Lens' ApplicationComponentDetail (Prelude.Maybe AppUnitError)
applicationComponentDetail_appUnitError = Lens.lens (\ApplicationComponentDetail' {appUnitError} -> appUnitError) (\s@ApplicationComponentDetail' {} a -> s {appUnitError = a} :: ApplicationComponentDetail)

-- | The ID of the server that the application component is running on.
applicationComponentDetail_associatedServerId :: Lens.Lens' ApplicationComponentDetail (Prelude.Maybe Prelude.Text)
applicationComponentDetail_associatedServerId = Lens.lens (\ApplicationComponentDetail' {associatedServerId} -> associatedServerId) (\s@ApplicationComponentDetail' {} a -> s {associatedServerId = a} :: ApplicationComponentDetail)

-- | Configuration details for the database associated with the application
-- component.
applicationComponentDetail_databaseConfigDetail :: Lens.Lens' ApplicationComponentDetail (Prelude.Maybe DatabaseConfigDetail)
applicationComponentDetail_databaseConfigDetail = Lens.lens (\ApplicationComponentDetail' {databaseConfigDetail} -> databaseConfigDetail) (\s@ApplicationComponentDetail' {} a -> s {databaseConfigDetail = a} :: ApplicationComponentDetail)

-- | The ID of the application component.
applicationComponentDetail_id :: Lens.Lens' ApplicationComponentDetail (Prelude.Maybe Prelude.Text)
applicationComponentDetail_id = Lens.lens (\ApplicationComponentDetail' {id} -> id) (\s@ApplicationComponentDetail' {} a -> s {id = a} :: ApplicationComponentDetail)

-- | Indicates whether the application component has been included for server
-- recommendation or not.
applicationComponentDetail_inclusionStatus :: Lens.Lens' ApplicationComponentDetail (Prelude.Maybe InclusionStatus)
applicationComponentDetail_inclusionStatus = Lens.lens (\ApplicationComponentDetail' {inclusionStatus} -> inclusionStatus) (\s@ApplicationComponentDetail' {} a -> s {inclusionStatus = a} :: ApplicationComponentDetail)

-- | The timestamp of when the application component was assessed.
applicationComponentDetail_lastAnalyzedTimestamp :: Lens.Lens' ApplicationComponentDetail (Prelude.Maybe Prelude.UTCTime)
applicationComponentDetail_lastAnalyzedTimestamp = Lens.lens (\ApplicationComponentDetail' {lastAnalyzedTimestamp} -> lastAnalyzedTimestamp) (\s@ApplicationComponentDetail' {} a -> s {lastAnalyzedTimestamp = a} :: ApplicationComponentDetail) Prelude.. Lens.mapping Data._Time

-- | A list of anti-pattern severity summaries.
applicationComponentDetail_listAntipatternSeveritySummary :: Lens.Lens' ApplicationComponentDetail (Prelude.Maybe [AntipatternSeveritySummary])
applicationComponentDetail_listAntipatternSeveritySummary = Lens.lens (\ApplicationComponentDetail' {listAntipatternSeveritySummary} -> listAntipatternSeveritySummary) (\s@ApplicationComponentDetail' {} a -> s {listAntipatternSeveritySummary = a} :: ApplicationComponentDetail) Prelude.. Lens.mapping Lens.coerced

-- | Set to true if the application component is running on multiple servers.
applicationComponentDetail_moreServerAssociationExists :: Lens.Lens' ApplicationComponentDetail (Prelude.Maybe Prelude.Bool)
applicationComponentDetail_moreServerAssociationExists = Lens.lens (\ApplicationComponentDetail' {moreServerAssociationExists} -> moreServerAssociationExists) (\s@ApplicationComponentDetail' {} a -> s {moreServerAssociationExists = a} :: ApplicationComponentDetail)

-- | The name of application component.
applicationComponentDetail_name :: Lens.Lens' ApplicationComponentDetail (Prelude.Maybe Prelude.Text)
applicationComponentDetail_name = Lens.lens (\ApplicationComponentDetail' {name} -> name) (\s@ApplicationComponentDetail' {} a -> s {name = a} :: ApplicationComponentDetail)

-- | OS driver.
applicationComponentDetail_osDriver :: Lens.Lens' ApplicationComponentDetail (Prelude.Maybe Prelude.Text)
applicationComponentDetail_osDriver = Lens.lens (\ApplicationComponentDetail' {osDriver} -> osDriver) (\s@ApplicationComponentDetail' {} a -> s {osDriver = a} :: ApplicationComponentDetail)

-- | OS version.
applicationComponentDetail_osVersion :: Lens.Lens' ApplicationComponentDetail (Prelude.Maybe Prelude.Text)
applicationComponentDetail_osVersion = Lens.lens (\ApplicationComponentDetail' {osVersion} -> osVersion) (\s@ApplicationComponentDetail' {} a -> s {osVersion = a} :: ApplicationComponentDetail)

-- | The top recommendation set for the application component.
applicationComponentDetail_recommendationSet :: Lens.Lens' ApplicationComponentDetail (Prelude.Maybe RecommendationSet)
applicationComponentDetail_recommendationSet = Lens.lens (\ApplicationComponentDetail' {recommendationSet} -> recommendationSet) (\s@ApplicationComponentDetail' {} a -> s {recommendationSet = a} :: ApplicationComponentDetail)

-- | The application component subtype.
applicationComponentDetail_resourceSubType :: Lens.Lens' ApplicationComponentDetail (Prelude.Maybe ResourceSubType)
applicationComponentDetail_resourceSubType = Lens.lens (\ApplicationComponentDetail' {resourceSubType} -> resourceSubType) (\s@ApplicationComponentDetail' {} a -> s {resourceSubType = a} :: ApplicationComponentDetail)

-- | The status of the application unit.
applicationComponentDetail_runtimeStatus :: Lens.Lens' ApplicationComponentDetail (Prelude.Maybe RuntimeAnalysisStatus)
applicationComponentDetail_runtimeStatus = Lens.lens (\ApplicationComponentDetail' {runtimeStatus} -> runtimeStatus) (\s@ApplicationComponentDetail' {} a -> s {runtimeStatus = a} :: ApplicationComponentDetail)

-- | The status message for the application unit.
applicationComponentDetail_runtimeStatusMessage :: Lens.Lens' ApplicationComponentDetail (Prelude.Maybe Prelude.Text)
applicationComponentDetail_runtimeStatusMessage = Lens.lens (\ApplicationComponentDetail' {runtimeStatusMessage} -> runtimeStatusMessage) (\s@ApplicationComponentDetail' {} a -> s {runtimeStatusMessage = a} :: ApplicationComponentDetail)

-- | Details about the source code repository associated with the application
-- component.
applicationComponentDetail_sourceCodeRepositories :: Lens.Lens' ApplicationComponentDetail (Prelude.Maybe [SourceCodeRepository])
applicationComponentDetail_sourceCodeRepositories = Lens.lens (\ApplicationComponentDetail' {sourceCodeRepositories} -> sourceCodeRepositories) (\s@ApplicationComponentDetail' {} a -> s {sourceCodeRepositories = a} :: ApplicationComponentDetail) Prelude.. Lens.mapping Lens.coerced

-- | A detailed description of the analysis status and any failure message.
applicationComponentDetail_statusMessage :: Lens.Lens' ApplicationComponentDetail (Prelude.Maybe Prelude.Text)
applicationComponentDetail_statusMessage = Lens.lens (\ApplicationComponentDetail' {statusMessage} -> statusMessage) (\s@ApplicationComponentDetail' {} a -> s {statusMessage = a} :: ApplicationComponentDetail)

instance Data.FromJSON ApplicationComponentDetail where
  parseJSON =
    Data.withObject
      "ApplicationComponentDetail"
      ( \x ->
          ApplicationComponentDetail'
            Prelude.<$> (x Data..:? "analysisStatus")
            Prelude.<*> (x Data..:? "antipatternReportS3Object")
            Prelude.<*> (x Data..:? "antipatternReportStatus")
            Prelude.<*> (x Data..:? "antipatternReportStatusMessage")
            Prelude.<*> (x Data..:? "appType")
            Prelude.<*> (x Data..:? "appUnitError")
            Prelude.<*> (x Data..:? "associatedServerId")
            Prelude.<*> (x Data..:? "databaseConfigDetail")
            Prelude.<*> (x Data..:? "id")
            Prelude.<*> (x Data..:? "inclusionStatus")
            Prelude.<*> (x Data..:? "lastAnalyzedTimestamp")
            Prelude.<*> ( x
                            Data..:? "listAntipatternSeveritySummary"
                            Data..!= Prelude.mempty
                        )
            Prelude.<*> (x Data..:? "moreServerAssociationExists")
            Prelude.<*> (x Data..:? "name")
            Prelude.<*> (x Data..:? "osDriver")
            Prelude.<*> (x Data..:? "osVersion")
            Prelude.<*> (x Data..:? "recommendationSet")
            Prelude.<*> (x Data..:? "resourceSubType")
            Prelude.<*> (x Data..:? "runtimeStatus")
            Prelude.<*> (x Data..:? "runtimeStatusMessage")
            Prelude.<*> ( x
                            Data..:? "sourceCodeRepositories"
                            Data..!= Prelude.mempty
                        )
            Prelude.<*> (x Data..:? "statusMessage")
      )

instance Prelude.Hashable ApplicationComponentDetail where
  hashWithSalt _salt ApplicationComponentDetail' {..} =
    _salt
      `Prelude.hashWithSalt` analysisStatus
      `Prelude.hashWithSalt` antipatternReportS3Object
      `Prelude.hashWithSalt` antipatternReportStatus
      `Prelude.hashWithSalt` antipatternReportStatusMessage
      `Prelude.hashWithSalt` appType
      `Prelude.hashWithSalt` appUnitError
      `Prelude.hashWithSalt` associatedServerId
      `Prelude.hashWithSalt` databaseConfigDetail
      `Prelude.hashWithSalt` id
      `Prelude.hashWithSalt` inclusionStatus
      `Prelude.hashWithSalt` lastAnalyzedTimestamp
      `Prelude.hashWithSalt` listAntipatternSeveritySummary
      `Prelude.hashWithSalt` moreServerAssociationExists
      `Prelude.hashWithSalt` name
      `Prelude.hashWithSalt` osDriver
      `Prelude.hashWithSalt` osVersion
      `Prelude.hashWithSalt` recommendationSet
      `Prelude.hashWithSalt` resourceSubType
      `Prelude.hashWithSalt` runtimeStatus
      `Prelude.hashWithSalt` runtimeStatusMessage
      `Prelude.hashWithSalt` sourceCodeRepositories
      `Prelude.hashWithSalt` statusMessage

instance Prelude.NFData ApplicationComponentDetail where
  rnf ApplicationComponentDetail' {..} =
    Prelude.rnf analysisStatus
      `Prelude.seq` Prelude.rnf antipatternReportS3Object
      `Prelude.seq` Prelude.rnf antipatternReportStatus
      `Prelude.seq` Prelude.rnf antipatternReportStatusMessage
      `Prelude.seq` Prelude.rnf appType
      `Prelude.seq` Prelude.rnf appUnitError
      `Prelude.seq` Prelude.rnf associatedServerId
      `Prelude.seq` Prelude.rnf databaseConfigDetail
      `Prelude.seq` Prelude.rnf id
      `Prelude.seq` Prelude.rnf inclusionStatus
      `Prelude.seq` Prelude.rnf lastAnalyzedTimestamp
      `Prelude.seq` Prelude.rnf listAntipatternSeveritySummary
      `Prelude.seq` Prelude.rnf moreServerAssociationExists
      `Prelude.seq` Prelude.rnf name
      `Prelude.seq` Prelude.rnf osDriver
      `Prelude.seq` Prelude.rnf osVersion
      `Prelude.seq` Prelude.rnf recommendationSet
      `Prelude.seq` Prelude.rnf resourceSubType
      `Prelude.seq` Prelude.rnf runtimeStatus
      `Prelude.seq` Prelude.rnf
        runtimeStatusMessage
      `Prelude.seq` Prelude.rnf
        sourceCodeRepositories
      `Prelude.seq` Prelude.rnf statusMessage