packages feed

amazonka-cloudwatch-logs-2.0: gen/Amazonka/CloudWatchLogs/TestMetricFilter.hs

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

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

-- |
-- Module      : Amazonka.CloudWatchLogs.TestMetricFilter
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Tests the filter pattern of a metric filter against a sample of log
-- event messages. You can use this operation to validate the correctness
-- of a metric filter pattern.
module Amazonka.CloudWatchLogs.TestMetricFilter
  ( -- * Creating a Request
    TestMetricFilter (..),
    newTestMetricFilter,

    -- * Request Lenses
    testMetricFilter_filterPattern,
    testMetricFilter_logEventMessages,

    -- * Destructuring the Response
    TestMetricFilterResponse (..),
    newTestMetricFilterResponse,

    -- * Response Lenses
    testMetricFilterResponse_matches,
    testMetricFilterResponse_httpStatus,
  )
where

import Amazonka.CloudWatchLogs.Types
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 qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newTestMetricFilter' smart constructor.
data TestMetricFilter = TestMetricFilter'
  { filterPattern :: Prelude.Text,
    -- | The log event messages to test.
    logEventMessages :: Prelude.NonEmpty Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'TestMetricFilter' 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:
--
-- 'filterPattern', 'testMetricFilter_filterPattern' - Undocumented member.
--
-- 'logEventMessages', 'testMetricFilter_logEventMessages' - The log event messages to test.
newTestMetricFilter ::
  -- | 'filterPattern'
  Prelude.Text ->
  -- | 'logEventMessages'
  Prelude.NonEmpty Prelude.Text ->
  TestMetricFilter
newTestMetricFilter
  pFilterPattern_
  pLogEventMessages_ =
    TestMetricFilter'
      { filterPattern = pFilterPattern_,
        logEventMessages =
          Lens.coerced Lens.# pLogEventMessages_
      }

-- | Undocumented member.
testMetricFilter_filterPattern :: Lens.Lens' TestMetricFilter Prelude.Text
testMetricFilter_filterPattern = Lens.lens (\TestMetricFilter' {filterPattern} -> filterPattern) (\s@TestMetricFilter' {} a -> s {filterPattern = a} :: TestMetricFilter)

-- | The log event messages to test.
testMetricFilter_logEventMessages :: Lens.Lens' TestMetricFilter (Prelude.NonEmpty Prelude.Text)
testMetricFilter_logEventMessages = Lens.lens (\TestMetricFilter' {logEventMessages} -> logEventMessages) (\s@TestMetricFilter' {} a -> s {logEventMessages = a} :: TestMetricFilter) Prelude.. Lens.coerced

instance Core.AWSRequest TestMetricFilter where
  type
    AWSResponse TestMetricFilter =
      TestMetricFilterResponse
  request overrides =
    Request.postJSON (overrides defaultService)
  response =
    Response.receiveJSON
      ( \s h x ->
          TestMetricFilterResponse'
            Prelude.<$> (x Data..?> "matches" Core..!@ Prelude.mempty)
            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
      )

instance Prelude.Hashable TestMetricFilter where
  hashWithSalt _salt TestMetricFilter' {..} =
    _salt
      `Prelude.hashWithSalt` filterPattern
      `Prelude.hashWithSalt` logEventMessages

instance Prelude.NFData TestMetricFilter where
  rnf TestMetricFilter' {..} =
    Prelude.rnf filterPattern
      `Prelude.seq` Prelude.rnf logEventMessages

instance Data.ToHeaders TestMetricFilter where
  toHeaders =
    Prelude.const
      ( Prelude.mconcat
          [ "X-Amz-Target"
              Data.=# ( "Logs_20140328.TestMetricFilter" ::
                          Prelude.ByteString
                      ),
            "Content-Type"
              Data.=# ( "application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON TestMetricFilter where
  toJSON TestMetricFilter' {..} =
    Data.object
      ( Prelude.catMaybes
          [ Prelude.Just
              ("filterPattern" Data..= filterPattern),
            Prelude.Just
              ("logEventMessages" Data..= logEventMessages)
          ]
      )

instance Data.ToPath TestMetricFilter where
  toPath = Prelude.const "/"

instance Data.ToQuery TestMetricFilter where
  toQuery = Prelude.const Prelude.mempty

-- | /See:/ 'newTestMetricFilterResponse' smart constructor.
data TestMetricFilterResponse = TestMetricFilterResponse'
  { -- | The matched events.
    matches :: Prelude.Maybe [MetricFilterMatchRecord],
    -- | The response's http status code.
    httpStatus :: Prelude.Int
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'TestMetricFilterResponse' 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:
--
-- 'matches', 'testMetricFilterResponse_matches' - The matched events.
--
-- 'httpStatus', 'testMetricFilterResponse_httpStatus' - The response's http status code.
newTestMetricFilterResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  TestMetricFilterResponse
newTestMetricFilterResponse pHttpStatus_ =
  TestMetricFilterResponse'
    { matches =
        Prelude.Nothing,
      httpStatus = pHttpStatus_
    }

-- | The matched events.
testMetricFilterResponse_matches :: Lens.Lens' TestMetricFilterResponse (Prelude.Maybe [MetricFilterMatchRecord])
testMetricFilterResponse_matches = Lens.lens (\TestMetricFilterResponse' {matches} -> matches) (\s@TestMetricFilterResponse' {} a -> s {matches = a} :: TestMetricFilterResponse) Prelude.. Lens.mapping Lens.coerced

-- | The response's http status code.
testMetricFilterResponse_httpStatus :: Lens.Lens' TestMetricFilterResponse Prelude.Int
testMetricFilterResponse_httpStatus = Lens.lens (\TestMetricFilterResponse' {httpStatus} -> httpStatus) (\s@TestMetricFilterResponse' {} a -> s {httpStatus = a} :: TestMetricFilterResponse)

instance Prelude.NFData TestMetricFilterResponse where
  rnf TestMetricFilterResponse' {..} =
    Prelude.rnf matches
      `Prelude.seq` Prelude.rnf httpStatus