# frozen_string_literal: true

# WARNING ABOUT GENERATED CODE
#
# This file is generated. See the contributing guide for more information:
# https://github.com/aws/aws-sdk-ruby/blob/version-3/CONTRIBUTING.md
#
# WARNING ABOUT GENERATED CODE

module Aws::ApplicationSignals
  module Types

    # You don't have sufficient permissions to perform this action.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/AccessDeniedException AWS API Documentation
    #
    class AccessDeniedException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] timestamp
    #   The date and time that you want the report to be for. It is
    #   expressed as the number of milliseconds since Jan 1, 1970 00:00:00
    #   UTC.
    #   @return [Time]
    #
    # @!attribute [rw] slo_ids
    #   An array containing the IDs of the service level objectives that you
    #   want to include in the report.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/BatchGetServiceLevelObjectiveBudgetReportInput AWS API Documentation
    #
    class BatchGetServiceLevelObjectiveBudgetReportInput < Struct.new(
      :timestamp,
      :slo_ids)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] timestamp
    #   The date and time that the report is for. It is expressed as the
    #   number of milliseconds since Jan 1, 1970 00:00:00 UTC.
    #   @return [Time]
    #
    # @!attribute [rw] reports
    #   An array of structures, where each structure is one budget report.
    #   @return [Array<Types::ServiceLevelObjectiveBudgetReport>]
    #
    # @!attribute [rw] errors
    #   An array of structures, where each structure includes an error
    #   indicating that one of the requests in the array was not valid.
    #   @return [Array<Types::ServiceLevelObjectiveBudgetReportError>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/BatchGetServiceLevelObjectiveBudgetReportOutput AWS API Documentation
    #
    class BatchGetServiceLevelObjectiveBudgetReportOutput < Struct.new(
      :timestamp,
      :reports,
      :errors)
      SENSITIVE = []
      include Aws::Structure
    end

    # If the interval for this service level objective is a calendar
    # interval, this structure contains the interval specifications.
    #
    # @!attribute [rw] start_time
    #   The date and time when you want the first interval to start. Be sure
    #   to choose a time that configures the intervals the way that you
    #   want. For example, if you want weekly intervals starting on Mondays
    #   at 6 a.m., be sure to specify a start time that is a Monday at 6
    #   a.m.
    #
    #   When used in a raw HTTP Query API, it is formatted as be epoch time
    #   in seconds. For example: `1698778057`
    #
    #   As soon as one calendar interval ends, another automatically begins.
    #   @return [Time]
    #
    # @!attribute [rw] duration_unit
    #   Specifies the calendar interval unit.
    #   @return [String]
    #
    # @!attribute [rw] duration
    #   Specifies the duration of each calendar interval. For example, if
    #   `Duration` is `1` and `DurationUnit` is `MONTH`, each interval is
    #   one month, aligned with the calendar.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/CalendarInterval AWS API Documentation
    #
    class CalendarInterval < Struct.new(
      :start_time,
      :duration_unit,
      :duration)
      SENSITIVE = []
      include Aws::Structure
    end

    # This operation attempted to create a resource that already exists.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/ConflictException AWS API Documentation
    #
    class ConflictException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] name
    #   A name for this SLO.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   An optional description for this SLO.
    #   @return [String]
    #
    # @!attribute [rw] sli_config
    #   A structure that contains information about what service and what
    #   performance metric that this SLO will monitor.
    #   @return [Types::ServiceLevelIndicatorConfig]
    #
    # @!attribute [rw] goal
    #   A structure that contains the attributes that determine the goal of
    #   the SLO. This includes the time period for evaluation and the
    #   attainment threshold.
    #   @return [Types::Goal]
    #
    # @!attribute [rw] tags
    #   A list of key-value pairs to associate with the SLO. You can
    #   associate as many as 50 tags with an SLO. To be able to associate
    #   tags with the SLO when you create the SLO, you must have the
    #   `cloudwatch:TagResource` permission.
    #
    #   Tags can help you organize and categorize your resources. You can
    #   also use them to scope user permissions by granting a user
    #   permission to access or change only resources with certain tag
    #   values.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/CreateServiceLevelObjectiveInput AWS API Documentation
    #
    class CreateServiceLevelObjectiveInput < Struct.new(
      :name,
      :description,
      :sli_config,
      :goal,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] slo
    #   A structure that contains information about the SLO that you just
    #   created.
    #   @return [Types::ServiceLevelObjective]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/CreateServiceLevelObjectiveOutput AWS API Documentation
    #
    class CreateServiceLevelObjectiveOutput < Struct.new(
      :slo)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] id
    #   The ARN or name of the service level objective to delete.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/DeleteServiceLevelObjectiveInput AWS API Documentation
    #
    class DeleteServiceLevelObjectiveInput < Struct.new(
      :id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/DeleteServiceLevelObjectiveOutput AWS API Documentation
    #
    class DeleteServiceLevelObjectiveOutput < Aws::EmptyStructure; end

    # A dimension is a name/value pair that is part of the identity of a
    # metric. Because dimensions are part of the unique identifier for a
    # metric, whenever you add a unique name/value pair to one of your
    # metrics, you are creating a new variation of that metric. For example,
    # many Amazon EC2 metrics publish `InstanceId` as a dimension name, and
    # the actual instance ID as the value for that dimension.
    #
    # You can assign up to 30 dimensions to a metric.
    #
    # @!attribute [rw] name
    #   The name of the dimension. Dimension names must contain only ASCII
    #   characters, must include at least one non-whitespace character, and
    #   cannot start with a colon (`:`). ASCII control characters are not
    #   supported as part of dimension names.
    #   @return [String]
    #
    # @!attribute [rw] value
    #   The value of the dimension. Dimension values must contain only ASCII
    #   characters and must include at least one non-whitespace character.
    #   ASCII control characters are not supported as part of dimension
    #   values.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/Dimension AWS API Documentation
    #
    class Dimension < Struct.new(
      :name,
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] start_time
    #   The start of the time period to retrieve information about. When
    #   used in a raw HTTP Query API, it is formatted as be epoch time in
    #   seconds. For example: `1698778057`
    #   @return [Time]
    #
    # @!attribute [rw] end_time
    #   The end of the time period to retrieve information about. When used
    #   in a raw HTTP Query API, it is formatted as be epoch time in
    #   seconds. For example: `1698778057`
    #   @return [Time]
    #
    # @!attribute [rw] key_attributes
    #   Use this field to specify which service you want to retrieve
    #   information for. You must specify at least the `Type`, `Name`, and
    #   `Environment` attributes.
    #
    #   This is a string-to-string map. It can include the following fields.
    #
    #   * `Type` designates the type of object this is.
    #
    #   * `ResourceType` specifies the type of the resource. This field is
    #     used only when the value of the `Type` field is `Resource` or
    #     `AWS::Resource`.
    #
    #   * `Name` specifies the name of the object. This is used only if the
    #     value of the `Type` field is `Service`, `RemoteService`, or
    #     `AWS::Service`.
    #
    #   * `Identifier` identifies the resource objects of this resource.
    #     This is used only if the value of the `Type` field is `Resource`
    #     or `AWS::Resource`.
    #
    #   * `Environment` specifies the location where this object is hosted,
    #     or what it belongs to.
    #   @return [Hash<String,String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/GetServiceInput AWS API Documentation
    #
    class GetServiceInput < Struct.new(
      :start_time,
      :end_time,
      :key_attributes)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] id
    #   The ARN or name of the SLO that you want to retrieve information
    #   about. You can find the ARNs of SLOs by using the
    #   [ListServiceLevelObjectives][1] operation.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_ListServiceLevelObjectives.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/GetServiceLevelObjectiveInput AWS API Documentation
    #
    class GetServiceLevelObjectiveInput < Struct.new(
      :id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] slo
    #   A structure containing the information about the SLO.
    #   @return [Types::ServiceLevelObjective]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/GetServiceLevelObjectiveOutput AWS API Documentation
    #
    class GetServiceLevelObjectiveOutput < Struct.new(
      :slo)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] service
    #   A structure containing information about the service.
    #   @return [Types::Service]
    #
    # @!attribute [rw] start_time
    #   The start time of the data included in the response. In a raw HTTP
    #   Query API, it is formatted as be epoch time in seconds. For example:
    #   `1698778057`.
    #   @return [Time]
    #
    # @!attribute [rw] end_time
    #   The end time of the data included in the response. In a raw HTTP
    #   Query API, it is formatted as be epoch time in seconds. For example:
    #   `1698778057`.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/GetServiceOutput AWS API Documentation
    #
    class GetServiceOutput < Struct.new(
      :service,
      :start_time,
      :end_time)
      SENSITIVE = []
      include Aws::Structure
    end

    # This structure contains the attributes that determine the goal of an
    # SLO. This includes the time period for evaluation and the attainment
    # threshold.
    #
    # @!attribute [rw] interval
    #   The time period used to evaluate the SLO. It can be either a
    #   calendar interval or rolling interval.
    #
    #   If you omit this parameter, a rolling interval of 7 days is used.
    #   @return [Types::Interval]
    #
    # @!attribute [rw] attainment_goal
    #   The threshold that determines if the goal is being met. An
    #   *attainment goal* is the ratio of good periods that meet the
    #   threshold requirements to the total periods within the interval. For
    #   example, an attainment goal of 99.9% means that within your
    #   interval, you are targeting 99.9% of the periods to be in healthy
    #   state.
    #
    #   If you omit this parameter, 99 is used to represent 99% as the
    #   attainment goal.
    #   @return [Float]
    #
    # @!attribute [rw] warning_threshold
    #   The percentage of remaining budget over total budget that you want
    #   to get warnings for. If you omit this parameter, the default of 50.0
    #   is used.
    #   @return [Float]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/Goal AWS API Documentation
    #
    class Goal < Struct.new(
      :interval,
      :attainment_goal,
      :warning_threshold)
      SENSITIVE = []
      include Aws::Structure
    end

    # The time period used to evaluate the SLO. It can be either a calendar
    # interval or rolling interval.
    #
    # @note Interval is a union - when making an API calls you must set exactly one of the members.
    #
    # @note Interval is a union - when returned from an API call exactly one value will be set and the returned type will be a subclass of Interval corresponding to the set member.
    #
    # @!attribute [rw] rolling_interval
    #   If the interval is a rolling interval, this structure contains the
    #   interval specifications.
    #   @return [Types::RollingInterval]
    #
    # @!attribute [rw] calendar_interval
    #   If the interval is a calendar interval, this structure contains the
    #   interval specifications.
    #   @return [Types::CalendarInterval]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/Interval AWS API Documentation
    #
    class Interval < Struct.new(
      :rolling_interval,
      :calendar_interval,
      :unknown)
      SENSITIVE = []
      include Aws::Structure
      include Aws::Structure::Union

      class RollingInterval < Interval; end
      class CalendarInterval < Interval; end
      class Unknown < Interval; end
    end

    # @!attribute [rw] start_time
    #   The start of the time period to retrieve information about. When
    #   used in a raw HTTP Query API, it is formatted as be epoch time in
    #   seconds. For example: `1698778057`
    #   @return [Time]
    #
    # @!attribute [rw] end_time
    #   The end of the time period to retrieve information about. When used
    #   in a raw HTTP Query API, it is formatted as be epoch time in
    #   seconds. For example: `1698778057`
    #   @return [Time]
    #
    # @!attribute [rw] key_attributes
    #   Use this field to specify which service you want to retrieve
    #   information for. You must specify at least the `Type`, `Name`, and
    #   `Environment` attributes.
    #
    #   This is a string-to-string map. It can include the following fields.
    #
    #   * `Type` designates the type of object this is.
    #
    #   * `ResourceType` specifies the type of the resource. This field is
    #     used only when the value of the `Type` field is `Resource` or
    #     `AWS::Resource`.
    #
    #   * `Name` specifies the name of the object. This is used only if the
    #     value of the `Type` field is `Service`, `RemoteService`, or
    #     `AWS::Service`.
    #
    #   * `Identifier` identifies the resource objects of this resource.
    #     This is used only if the value of the `Type` field is `Resource`
    #     or `AWS::Resource`.
    #
    #   * `Environment` specifies the location where this object is hosted,
    #     or what it belongs to.
    #   @return [Hash<String,String>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return in one operation. If you
    #   omit this parameter, the default of 50 is used.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   Include this value, if it was returned by the previous operation, to
    #   get the next set of service dependencies.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/ListServiceDependenciesInput AWS API Documentation
    #
    class ListServiceDependenciesInput < Struct.new(
      :start_time,
      :end_time,
      :key_attributes,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] start_time
    #   The start of the time period that the returned information applies
    #   to. When used in a raw HTTP Query API, it is formatted as be epoch
    #   time in seconds. For example: `1698778057`
    #   @return [Time]
    #
    # @!attribute [rw] end_time
    #   The end of the time period that the returned information applies to.
    #   When used in a raw HTTP Query API, it is formatted as be epoch time
    #   in seconds. For example: `1698778057`
    #   @return [Time]
    #
    # @!attribute [rw] service_dependencies
    #   An array, where each object in the array contains information about
    #   one of the dependencies of this service.
    #   @return [Array<Types::ServiceDependency>]
    #
    # @!attribute [rw] next_token
    #   Include this value in your next use of this API to get next set of
    #   service dependencies.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/ListServiceDependenciesOutput AWS API Documentation
    #
    class ListServiceDependenciesOutput < Struct.new(
      :start_time,
      :end_time,
      :service_dependencies,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] start_time
    #   The start of the time period to retrieve information about. When
    #   used in a raw HTTP Query API, it is formatted as be epoch time in
    #   seconds. For example: `1698778057`
    #   @return [Time]
    #
    # @!attribute [rw] end_time
    #   The end of the time period to retrieve information about. When used
    #   in a raw HTTP Query API, it is formatted as be epoch time in
    #   seconds. For example: `1698778057`
    #   @return [Time]
    #
    # @!attribute [rw] key_attributes
    #   Use this field to specify which service you want to retrieve
    #   information for. You must specify at least the `Type`, `Name`, and
    #   `Environment` attributes.
    #
    #   This is a string-to-string map. It can include the following fields.
    #
    #   * `Type` designates the type of object this is.
    #
    #   * `ResourceType` specifies the type of the resource. This field is
    #     used only when the value of the `Type` field is `Resource` or
    #     `AWS::Resource`.
    #
    #   * `Name` specifies the name of the object. This is used only if the
    #     value of the `Type` field is `Service`, `RemoteService`, or
    #     `AWS::Service`.
    #
    #   * `Identifier` identifies the resource objects of this resource.
    #     This is used only if the value of the `Type` field is `Resource`
    #     or `AWS::Resource`.
    #
    #   * `Environment` specifies the location where this object is hosted,
    #     or what it belongs to.
    #   @return [Hash<String,String>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return in one operation. If you
    #   omit this parameter, the default of 50 is used.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   Include this value, if it was returned by the previous operation, to
    #   get the next set of service dependents.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/ListServiceDependentsInput AWS API Documentation
    #
    class ListServiceDependentsInput < Struct.new(
      :start_time,
      :end_time,
      :key_attributes,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] start_time
    #   The start of the time period that the returned information applies
    #   to. When used in a raw HTTP Query API, it is formatted as be epoch
    #   time in seconds. For example: `1698778057`
    #   @return [Time]
    #
    # @!attribute [rw] end_time
    #   The end of the time period that the returned information applies to.
    #   When used in a raw HTTP Query API, it is formatted as be epoch time
    #   in seconds. For example: `1698778057`
    #   @return [Time]
    #
    # @!attribute [rw] service_dependents
    #   An array, where each object in the array contains information about
    #   one of the dependents of this service.
    #   @return [Array<Types::ServiceDependent>]
    #
    # @!attribute [rw] next_token
    #   Include this value in your next use of this API to get next set of
    #   service dependents.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/ListServiceDependentsOutput AWS API Documentation
    #
    class ListServiceDependentsOutput < Struct.new(
      :start_time,
      :end_time,
      :service_dependents,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] key_attributes
    #   You can use this optional field to specify which services you want
    #   to retrieve SLO information for.
    #
    #   This is a string-to-string map. It can include the following fields.
    #
    #   * `Type` designates the type of object this is.
    #
    #   * `ResourceType` specifies the type of the resource. This field is
    #     used only when the value of the `Type` field is `Resource` or
    #     `AWS::Resource`.
    #
    #   * `Name` specifies the name of the object. This is used only if the
    #     value of the `Type` field is `Service`, `RemoteService`, or
    #     `AWS::Service`.
    #
    #   * `Identifier` identifies the resource objects of this resource.
    #     This is used only if the value of the `Type` field is `Resource`
    #     or `AWS::Resource`.
    #
    #   * `Environment` specifies the location where this object is hosted,
    #     or what it belongs to.
    #   @return [Hash<String,String>]
    #
    # @!attribute [rw] operation_name
    #   The name of the operation that this SLO is associated with.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return in one operation. If you
    #   omit this parameter, the default of 50 is used.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   Include this value, if it was returned by the previous operation, to
    #   get the next set of service level objectives.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/ListServiceLevelObjectivesInput AWS API Documentation
    #
    class ListServiceLevelObjectivesInput < Struct.new(
      :key_attributes,
      :operation_name,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] slo_summaries
    #   An array of structures, where each structure contains information
    #   about one SLO.
    #   @return [Array<Types::ServiceLevelObjectiveSummary>]
    #
    # @!attribute [rw] next_token
    #   Include this value in your next use of this API to get next set of
    #   service level objectives.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/ListServiceLevelObjectivesOutput AWS API Documentation
    #
    class ListServiceLevelObjectivesOutput < Struct.new(
      :slo_summaries,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] start_time
    #   The start of the time period to retrieve information about. When
    #   used in a raw HTTP Query API, it is formatted as be epoch time in
    #   seconds. For example: `1698778057`
    #   @return [Time]
    #
    # @!attribute [rw] end_time
    #   The end of the time period to retrieve information about. When used
    #   in a raw HTTP Query API, it is formatted as be epoch time in
    #   seconds. For example: `1698778057`
    #   @return [Time]
    #
    # @!attribute [rw] key_attributes
    #   Use this field to specify which service you want to retrieve
    #   information for. You must specify at least the `Type`, `Name`, and
    #   `Environment` attributes.
    #
    #   This is a string-to-string map. It can include the following fields.
    #
    #   * `Type` designates the type of object this is.
    #
    #   * `ResourceType` specifies the type of the resource. This field is
    #     used only when the value of the `Type` field is `Resource` or
    #     `AWS::Resource`.
    #
    #   * `Name` specifies the name of the object. This is used only if the
    #     value of the `Type` field is `Service`, `RemoteService`, or
    #     `AWS::Service`.
    #
    #   * `Identifier` identifies the resource objects of this resource.
    #     This is used only if the value of the `Type` field is `Resource`
    #     or `AWS::Resource`.
    #
    #   * `Environment` specifies the location where this object is hosted,
    #     or what it belongs to.
    #   @return [Hash<String,String>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return in one operation. If you
    #   omit this parameter, the default of 50 is used.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   Include this value, if it was returned by the previous operation, to
    #   get the next set of service operations.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/ListServiceOperationsInput AWS API Documentation
    #
    class ListServiceOperationsInput < Struct.new(
      :start_time,
      :end_time,
      :key_attributes,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] start_time
    #   The start of the time period that the returned information applies
    #   to. When used in a raw HTTP Query API, it is formatted as be epoch
    #   time in seconds. For example: `1698778057`
    #   @return [Time]
    #
    # @!attribute [rw] end_time
    #   The end of the time period that the returned information applies to.
    #   When used in a raw HTTP Query API, it is formatted as be epoch time
    #   in seconds. For example: `1698778057`
    #   @return [Time]
    #
    # @!attribute [rw] service_operations
    #   An array of structures that each contain information about one
    #   operation of this service.
    #   @return [Array<Types::ServiceOperation>]
    #
    # @!attribute [rw] next_token
    #   Include this value in your next use of this API to get next set of
    #   service operations.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/ListServiceOperationsOutput AWS API Documentation
    #
    class ListServiceOperationsOutput < Struct.new(
      :start_time,
      :end_time,
      :service_operations,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] start_time
    #   The start of the time period to retrieve information about. When
    #   used in a raw HTTP Query API, it is formatted as be epoch time in
    #   seconds. For example: `1698778057`
    #   @return [Time]
    #
    # @!attribute [rw] end_time
    #   The end of the time period to retrieve information about. When used
    #   in a raw HTTP Query API, it is formatted as be epoch time in
    #   seconds. For example: `1698778057`
    #   @return [Time]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return in one operation. If you
    #   omit this parameter, the default of 50 is used.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   Include this value, if it was returned by the previous operation, to
    #   get the next set of services.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/ListServicesInput AWS API Documentation
    #
    class ListServicesInput < Struct.new(
      :start_time,
      :end_time,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] start_time
    #   The start of the time period that the returned information applies
    #   to. When used in a raw HTTP Query API, it is formatted as be epoch
    #   time in seconds. For example: `1698778057`
    #   @return [Time]
    #
    # @!attribute [rw] end_time
    #   The end of the time period that the returned information applies to.
    #   When used in a raw HTTP Query API, it is formatted as be epoch time
    #   in seconds. For example: `1698778057`
    #   @return [Time]
    #
    # @!attribute [rw] service_summaries
    #   An array of structures, where each structure contains some
    #   information about a service. To get complete information about a
    #   service, use [GetService][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetService.html
    #   @return [Array<Types::ServiceSummary>]
    #
    # @!attribute [rw] next_token
    #   Include this value in your next use of this API to get next set of
    #   services.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/ListServicesOutput AWS API Documentation
    #
    class ListServicesOutput < Struct.new(
      :start_time,
      :end_time,
      :service_summaries,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] resource_arn
    #   The Amazon Resource Name (ARN) of the CloudWatch resource that you
    #   want to view tags for.
    #
    #   The ARN format of an Application Signals SLO is
    #   `arn:aws:cloudwatch:Region:account-id:slo:slo-name `
    #
    #   For more information about ARN format, see [ Resource Types Defined
    #   by Amazon CloudWatch][1] in the *Amazon Web Services General
    #   Reference*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazoncloudwatch.html#amazoncloudwatch-resources-for-iam-policies
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/ListTagsForResourceRequest AWS API Documentation
    #
    class ListTagsForResourceRequest < Struct.new(
      :resource_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] tags
    #   The list of tag keys and values associated with the resource you
    #   specified.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/ListTagsForResourceResponse AWS API Documentation
    #
    class ListTagsForResourceResponse < Struct.new(
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # This structure defines the metric used for a service level indicator,
    # including the metric name, namespace, and dimensions
    #
    # @!attribute [rw] namespace
    #   The namespace of the metric. For more information, see
    #   [Namespaces][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Namespace
    #   @return [String]
    #
    # @!attribute [rw] metric_name
    #   The name of the metric to use.
    #   @return [String]
    #
    # @!attribute [rw] dimensions
    #   An array of one or more dimensions to use to define the metric that
    #   you want to use. For more information, see [Dimensions][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Dimension
    #   @return [Array<Types::Dimension>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/Metric AWS API Documentation
    #
    class Metric < Struct.new(
      :namespace,
      :metric_name,
      :dimensions)
      SENSITIVE = []
      include Aws::Structure
    end

    # Use this structure to define a metric or metric math expression that
    # you want to use as for a service level objective.
    #
    # Each `MetricDataQuery` in the `MetricDataQueries` array specifies
    # either a metric to retrieve, or a metric math expression to be
    # performed on retrieved metrics. A single `MetricDataQueries` array can
    # include as many as 20 `MetricDataQuery` structures in the array. The
    # 20 structures can include as many as 10 structures that contain a
    # `MetricStat` parameter to retrieve a metric, and as many as 10
    # structures that contain the `Expression` parameter to perform a math
    # expression. Of those `Expression` structures, exactly one must have
    # true as the value for `ReturnData`. The result of this expression used
    # for the SLO.
    #
    # For more information about metric math expressions, see [CloudWatchUse
    # metric math][1].
    #
    # Within each `MetricDataQuery` object, you must specify either
    # `Expression` or `MetricStat` but not both.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html
    #
    # @!attribute [rw] id
    #   A short name used to tie this object to the results in the response.
    #   This `Id` must be unique within a `MetricDataQueries` array. If you
    #   are performing math expressions on this set of data, this name
    #   represents that data and can serve as a variable in the metric math
    #   expression. The valid characters are letters, numbers, and
    #   underscore. The first character must be a lowercase letter.
    #   @return [String]
    #
    # @!attribute [rw] metric_stat
    #   A metric to be used directly for the SLO, or to be used in the math
    #   expression that will be used for the SLO.
    #
    #   Within one `MetricDataQuery` object, you must specify either
    #   `Expression` or `MetricStat` but not both.
    #   @return [Types::MetricStat]
    #
    # @!attribute [rw] expression
    #   This field can contain a metric math expression to be performed on
    #   the other metrics that you are retrieving within this
    #   `MetricDataQueries` structure.
    #
    #   A math expression can use the `Id` of the other metrics or queries
    #   to refer to those metrics, and can also use the `Id` of other
    #   expressions to use the result of those expressions. For more
    #   information about metric math expressions, see [Metric Math Syntax
    #   and Functions][1] in the *Amazon CloudWatch User Guide*.
    #
    #   Within each `MetricDataQuery` object, you must specify either
    #   `Expression` or `MetricStat` but not both.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html#metric-math-syntax
    #   @return [String]
    #
    # @!attribute [rw] label
    #   A human-readable label for this metric or expression. This is
    #   especially useful if this is an expression, so that you know what
    #   the value represents. If the metric or expression is shown in a
    #   CloudWatch dashboard widget, the label is shown. If `Label` is
    #   omitted, CloudWatch generates a default.
    #
    #   You can put dynamic expressions into a label, so that it is more
    #   descriptive. For more information, see [Using Dynamic Labels][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/graph-dynamic-labels.html
    #   @return [String]
    #
    # @!attribute [rw] return_data
    #   Use this only if you are using a metric math expression for the SLO.
    #   Specify `true` for `ReturnData` for only the one expression result
    #   to use as the alarm. For all other metrics and expressions in the
    #   same `CreateServiceLevelObjective` operation, specify `ReturnData`
    #   as `false`.
    #   @return [Boolean]
    #
    # @!attribute [rw] period
    #   The granularity, in seconds, of the returned data points for this
    #   metric. For metrics with regular resolution, a period can be as
    #   short as one minute (60 seconds) and must be a multiple of 60. For
    #   high-resolution metrics that are collected at intervals of less than
    #   one minute, the period can be 1, 5, 10, 30, 60, or any multiple of
    #   60. High-resolution metrics are those metrics stored by a
    #   `PutMetricData` call that includes a `StorageResolution` of 1
    #   second.
    #
    #   If the `StartTime` parameter specifies a time stamp that is greater
    #   than 3 hours ago, you must specify the period as follows or no data
    #   points in that time range is returned:
    #
    #   * Start time between 3 hours and 15 days ago - Use a multiple of 60
    #     seconds (1 minute).
    #
    #   * Start time between 15 and 63 days ago - Use a multiple of 300
    #     seconds (5 minutes).
    #
    #   * Start time greater than 63 days ago - Use a multiple of 3600
    #     seconds (1 hour).
    #   @return [Integer]
    #
    # @!attribute [rw] account_id
    #   The ID of the account where this metric is located. If you are
    #   performing this operatiion in a monitoring account, use this to
    #   specify which source account to retrieve this metric from.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/MetricDataQuery AWS API Documentation
    #
    class MetricDataQuery < Struct.new(
      :id,
      :metric_stat,
      :expression,
      :label,
      :return_data,
      :period,
      :account_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # This structure contains information about one CloudWatch metric
    # associated with this entity discovered by Application Signals.
    #
    # @!attribute [rw] namespace
    #   The namespace of the metric. For more information, see
    #   [CloudWatchNamespaces][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Namespace
    #   @return [String]
    #
    # @!attribute [rw] metric_type
    #   Used to display the appropriate statistics in the CloudWatch
    #   console.
    #   @return [String]
    #
    # @!attribute [rw] dimensions
    #   An array of one or more dimensions that further define the metric.
    #   For more information, see [CloudWatchDimensions][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Dimension
    #   @return [Array<Types::Dimension>]
    #
    # @!attribute [rw] metric_name
    #   The name of the metric.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/MetricReference AWS API Documentation
    #
    class MetricReference < Struct.new(
      :namespace,
      :metric_type,
      :dimensions,
      :metric_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # This structure defines the metric to be used as the service level
    # indicator, along with the statistics, period, and unit.
    #
    # @!attribute [rw] metric
    #   The metric to use as the service level indicator, including the
    #   metric name, namespace, and dimensions.
    #   @return [Types::Metric]
    #
    # @!attribute [rw] period
    #   The granularity, in seconds, to be used for the metric. For metrics
    #   with regular resolution, a period can be as short as one minute (60
    #   seconds) and must be a multiple of 60. For high-resolution metrics
    #   that are collected at intervals of less than one minute, the period
    #   can be 1, 5, 10, 30, 60, or any multiple of 60. High-resolution
    #   metrics are those metrics stored by a `PutMetricData` call that
    #   includes a `StorageResolution` of 1 second.
    #   @return [Integer]
    #
    # @!attribute [rw] stat
    #   The statistic to use for comparison to the threshold. It can be any
    #   CloudWatch statistic or extended statistic. For more information
    #   about statistics, see [CloudWatch statistics definitions][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Statistics-definitions.html
    #   @return [String]
    #
    # @!attribute [rw] unit
    #   If you omit `Unit` then all data that was collected with any unit is
    #   returned, along with the corresponding units that were specified
    #   when the data was reported to CloudWatch. If you specify a unit, the
    #   operation returns only data that was collected with that unit
    #   specified. If you specify a unit that does not match the data
    #   collected, the results of the operation are null. CloudWatch does
    #   not perform unit conversions.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/MetricStat AWS API Documentation
    #
    class MetricStat < Struct.new(
      :metric,
      :period,
      :stat,
      :unit)
      SENSITIVE = []
      include Aws::Structure
    end

    # Resource not found.
    #
    # @!attribute [rw] resource_type
    #   The resource type is not valid.
    #   @return [String]
    #
    # @!attribute [rw] resource_id
    #   Cannot find the resource id.
    #   @return [String]
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/ResourceNotFoundException AWS API Documentation
    #
    class ResourceNotFoundException < Struct.new(
      :resource_type,
      :resource_id,
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # If the interval for this SLO is a rolling interval, this structure
    # contains the interval specifications.
    #
    # @!attribute [rw] duration_unit
    #   Specifies the rolling interval unit.
    #   @return [String]
    #
    # @!attribute [rw] duration
    #   Specifies the duration of each rolling interval. For example, if
    #   `Duration` is `7` and `DurationUnit` is `DAY`, each rolling interval
    #   is seven days.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/RollingInterval AWS API Documentation
    #
    class RollingInterval < Struct.new(
      :duration_unit,
      :duration)
      SENSITIVE = []
      include Aws::Structure
    end

    # This structure contains information about one of your services that
    # was discovered by Application Signals.
    #
    # @!attribute [rw] key_attributes
    #   This is a string-to-string map. It can include the following fields.
    #
    #   * `Type` designates the type of object this is.
    #
    #   * `ResourceType` specifies the type of the resource. This field is
    #     used only when the value of the `Type` field is `Resource` or
    #     `AWS::Resource`.
    #
    #   * `Name` specifies the name of the object. This is used only if the
    #     value of the `Type` field is `Service`, `RemoteService`, or
    #     `AWS::Service`.
    #
    #   * `Identifier` identifies the resource objects of this resource.
    #     This is used only if the value of the `Type` field is `Resource`
    #     or `AWS::Resource`.
    #
    #   * `Environment` specifies the location where this object is hosted,
    #     or what it belongs to.
    #   @return [Hash<String,String>]
    #
    # @!attribute [rw] attribute_maps
    #   This structure contains one or more string-to-string maps that help
    #   identify this service. It can include *platform attributes*,
    #   *application attributes*, and *telemetry attributes*.
    #
    #   Platform attributes contain information the service's platform.
    #
    #   * `PlatformType` defines the hosted-in platform.
    #
    #   * `EKS.Cluster` is the name of the Amazon EKS cluster.
    #
    #   * `K8s.Cluster` is the name of the self-hosted Kubernetes cluster.
    #
    #   * `K8s.Namespace` is the name of the Kubernetes namespace in either
    #     Amazon EKS or Kubernetes clusters.
    #
    #   * `K8s.Workload` is the name of the Kubernetes workload in either
    #     Amazon EKS or Kubernetes clusters.
    #
    #   * `K8s.Node` is the name of the Kubernetes node in either Amazon EKS
    #     or Kubernetes clusters.
    #
    #   * `K8s.Pod` is the name of the Kubernetes pod in either Amazon EKS
    #     or Kubernetes clusters.
    #
    #   * `EC2.AutoScalingGroup` is the name of the Amazon EC2 Auto Scaling
    #     group.
    #
    #   * `EC2.InstanceId` is the ID of the Amazon EC2 instance.
    #
    #   * `Host` is the name of the host, for all platform types.
    #
    #   Applciation attributes contain information about the application.
    #
    #   * `AWS.Application` is the application's name in Amazon Web
    #     Services Service Catalog AppRegistry.
    #
    #   * `AWS.Application.ARN` is the application's ARN in Amazon Web
    #     Services Service Catalog AppRegistry.
    #
    #   Telemetry attributes contain telemetry information.
    #
    #   * `Telemetry.SDK` is the fingerprint of the OpenTelemetry SDK
    #     version for instrumented services.
    #
    #   * `Telemetry.Agent` is the fingerprint of the agent used to collect
    #     and send telemetry data.
    #
    #   * `Telemetry.Source` Specifies the point of application where the
    #     telemetry was collected or specifies what was used for the source
    #     of telemetry data.
    #   @return [Array<Hash<String,String>>]
    #
    # @!attribute [rw] metric_references
    #   An array of structures that each contain information about one
    #   metric associated with this service.
    #   @return [Array<Types::MetricReference>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/Service AWS API Documentation
    #
    class Service < Struct.new(
      :key_attributes,
      :attribute_maps,
      :metric_references)
      SENSITIVE = []
      include Aws::Structure
    end

    # This structure contains information about one dependency of this
    # service.
    #
    # @!attribute [rw] operation_name
    #   The name of the operation in this service that calls the dependency.
    #   @return [String]
    #
    # @!attribute [rw] dependency_key_attributes
    #   This is a string-to-string map. It can include the following fields.
    #
    #   * `Type` designates the type of object this is.
    #
    #   * `ResourceType` specifies the type of the resource. This field is
    #     used only when the value of the `Type` field is `Resource` or
    #     `AWS::Resource`.
    #
    #   * `Name` specifies the name of the object. This is used only if the
    #     value of the `Type` field is `Service`, `RemoteService`, or
    #     `AWS::Service`.
    #
    #   * `Identifier` identifies the resource objects of this resource.
    #     This is used only if the value of the `Type` field is `Resource`
    #     or `AWS::Resource`.
    #
    #   * `Environment` specifies the location where this object is hosted,
    #     or what it belongs to.
    #   @return [Hash<String,String>]
    #
    # @!attribute [rw] dependency_operation_name
    #   The name of the called operation in the dependency.
    #   @return [String]
    #
    # @!attribute [rw] metric_references
    #   An array of structures that each contain information about one
    #   metric associated with this service dependency that was discovered
    #   by Application Signals.
    #   @return [Array<Types::MetricReference>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/ServiceDependency AWS API Documentation
    #
    class ServiceDependency < Struct.new(
      :operation_name,
      :dependency_key_attributes,
      :dependency_operation_name,
      :metric_references)
      SENSITIVE = []
      include Aws::Structure
    end

    # This structure contains information about a service dependent that was
    # discovered by Application Signals. A dependent is an entity that
    # invoked the specified service during the provided time range.
    # Dependents include other services, CloudWatch Synthetics canaries, and
    # clients that are instrumented with CloudWatch RUM app monitors.
    #
    # @!attribute [rw] operation_name
    #   If the invoked entity is an operation on an entity, the name of that
    #   dependent operation is displayed here.
    #   @return [String]
    #
    # @!attribute [rw] dependent_key_attributes
    #   This is a string-to-string map. It can include the following fields.
    #
    #   * `Type` designates the type of object this is.
    #
    #   * `ResourceType` specifies the type of the resource. This field is
    #     used only when the value of the `Type` field is `Resource` or
    #     `AWS::Resource`.
    #
    #   * `Name` specifies the name of the object. This is used only if the
    #     value of the `Type` field is `Service`, `RemoteService`, or
    #     `AWS::Service`.
    #
    #   * `Identifier` identifies the resource objects of this resource.
    #     This is used only if the value of the `Type` field is `Resource`
    #     or `AWS::Resource`.
    #
    #   * `Environment` specifies the location where this object is hosted,
    #     or what it belongs to.
    #   @return [Hash<String,String>]
    #
    # @!attribute [rw] dependent_operation_name
    #   If the dependent invoker was a service that invoked it from an
    #   operation, the name of that dependent operation is displayed here.
    #   @return [String]
    #
    # @!attribute [rw] metric_references
    #   An array of structures that each contain information about one
    #   metric associated with this service dependent that was discovered by
    #   Application Signals.
    #   @return [Array<Types::MetricReference>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/ServiceDependent AWS API Documentation
    #
    class ServiceDependent < Struct.new(
      :operation_name,
      :dependent_key_attributes,
      :dependent_operation_name,
      :metric_references)
      SENSITIVE = []
      include Aws::Structure
    end

    # This structure contains information about the performance metric that
    # an SLO monitors.
    #
    # @!attribute [rw] sli_metric
    #   A structure that contains information about the metric that the SLO
    #   monitors.
    #   @return [Types::ServiceLevelIndicatorMetric]
    #
    # @!attribute [rw] metric_threshold
    #   The value that the SLI metric is compared to.
    #   @return [Float]
    #
    # @!attribute [rw] comparison_operator
    #   The arithmetic operation used when comparing the specified metric to
    #   the threshold.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/ServiceLevelIndicator AWS API Documentation
    #
    class ServiceLevelIndicator < Struct.new(
      :sli_metric,
      :metric_threshold,
      :comparison_operator)
      SENSITIVE = []
      include Aws::Structure
    end

    # This structure specifies the information about the service and the
    # performance metric that an SLO is to monitor.
    #
    # @!attribute [rw] sli_metric_config
    #   Use this structure to specify the metric to be used for the SLO.
    #   @return [Types::ServiceLevelIndicatorMetricConfig]
    #
    # @!attribute [rw] metric_threshold
    #   The value that the SLI metric is compared to.
    #   @return [Float]
    #
    # @!attribute [rw] comparison_operator
    #   The arithmetic operation to use when comparing the specified metric
    #   to the threshold.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/ServiceLevelIndicatorConfig AWS API Documentation
    #
    class ServiceLevelIndicatorConfig < Struct.new(
      :sli_metric_config,
      :metric_threshold,
      :comparison_operator)
      SENSITIVE = []
      include Aws::Structure
    end

    # This structure contains the information about the metric that is used
    # for the SLO.
    #
    # @!attribute [rw] key_attributes
    #   This is a string-to-string map that contains information about the
    #   type of object that this SLO is related to. It can include the
    #   following fields.
    #
    #   * `Type` designates the type of object that this SLO is related to.
    #
    #   * `ResourceType` specifies the type of the resource. This field is
    #     used only when the value of the `Type` field is `Resource` or
    #     `AWS::Resource`.
    #
    #   * `Name` specifies the name of the object. This is used only if the
    #     value of the `Type` field is `Service`, `RemoteService`, or
    #     `AWS::Service`.
    #
    #   * `Identifier` identifies the resource objects of this resource.
    #     This is used only if the value of the `Type` field is `Resource`
    #     or `AWS::Resource`.
    #
    #   * `Environment` specifies the location where this object is hosted,
    #     or what it belongs to.
    #   @return [Hash<String,String>]
    #
    # @!attribute [rw] operation_name
    #   If the SLO monitors a specific operation of the service, this field
    #   displays that operation name.
    #   @return [String]
    #
    # @!attribute [rw] metric_type
    #   If the SLO monitors either the `LATENCY` or `AVAILABILITY` metric
    #   that Application Signals collects, this field displays which of
    #   those metrics is used.
    #   @return [String]
    #
    # @!attribute [rw] metric_data_queries
    #   If this SLO monitors a CloudWatch metric or the result of a
    #   CloudWatch metric math expression, this structure includes the
    #   information about that metric or expression.
    #   @return [Array<Types::MetricDataQuery>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/ServiceLevelIndicatorMetric AWS API Documentation
    #
    class ServiceLevelIndicatorMetric < Struct.new(
      :key_attributes,
      :operation_name,
      :metric_type,
      :metric_data_queries)
      SENSITIVE = []
      include Aws::Structure
    end

    # Use this structure to specify the information for the metric that the
    # SLO will monitor.
    #
    # @!attribute [rw] key_attributes
    #   If this SLO is related to a metric collected by Application Signals,
    #   you must use this field to specify which service the SLO metric is
    #   related to. To do so, you must specify at least the `Type`, `Name`,
    #   and `Environment` attributes.
    #
    #   This is a string-to-string map. It can include the following fields.
    #
    #   * `Type` designates the type of object this is.
    #
    #   * `ResourceType` specifies the type of the resource. This field is
    #     used only when the value of the `Type` field is `Resource` or
    #     `AWS::Resource`.
    #
    #   * `Name` specifies the name of the object. This is used only if the
    #     value of the `Type` field is `Service`, `RemoteService`, or
    #     `AWS::Service`.
    #
    #   * `Identifier` identifies the resource objects of this resource.
    #     This is used only if the value of the `Type` field is `Resource`
    #     or `AWS::Resource`.
    #
    #   * `Environment` specifies the location where this object is hosted,
    #     or what it belongs to.
    #   @return [Hash<String,String>]
    #
    # @!attribute [rw] operation_name
    #   If the SLO is to monitor a specific operation of the service, use
    #   this field to specify the name of that operation.
    #   @return [String]
    #
    # @!attribute [rw] metric_type
    #   If the SLO is to monitor either the `LATENCY` or `AVAILABILITY`
    #   metric that Application Signals collects, use this field to specify
    #   which of those metrics is used.
    #   @return [String]
    #
    # @!attribute [rw] statistic
    #   The statistic to use for comparison to the threshold. It can be any
    #   CloudWatch statistic or extended statistic. For more information
    #   about statistics, see [CloudWatch statistics definitions][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Statistics-definitions.html
    #   @return [String]
    #
    # @!attribute [rw] period_seconds
    #   The number of seconds to use as the period for SLO evaluation. Your
    #   application's performance is compared to the SLI during each
    #   period. For each period, the application is determined to have
    #   either achieved or not achieved the necessary performance.
    #   @return [Integer]
    #
    # @!attribute [rw] metric_data_queries
    #   If this SLO monitors a CloudWatch metric or the result of a
    #   CloudWatch metric math expression, use this structure to specify
    #   that metric or expression.
    #   @return [Array<Types::MetricDataQuery>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/ServiceLevelIndicatorMetricConfig AWS API Documentation
    #
    class ServiceLevelIndicatorMetricConfig < Struct.new(
      :key_attributes,
      :operation_name,
      :metric_type,
      :statistic,
      :period_seconds,
      :metric_data_queries)
      SENSITIVE = []
      include Aws::Structure
    end

    # A structure containing information about one service level objective
    # (SLO) that has been created in Application Signals. Creating SLOs can
    # help you ensure your services are performing to the level that you
    # expect. SLOs help you set and track a specific target level for the
    # reliability and availability of your applications and services. Each
    # SLO uses a service level indicator (SLI), which is a key performance
    # metric, to calculate how much underperformance can be tolerated before
    # the goal that you set for the SLO is not achieved.
    #
    # @!attribute [rw] arn
    #   The ARN of this SLO.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   The name of this SLO.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   The description that you created for this SLO.
    #   @return [String]
    #
    # @!attribute [rw] created_time
    #   The date and time that this SLO was created. When used in a raw HTTP
    #   Query API, it is formatted as `yyyy-MM-dd'T'HH:mm:ss`. For example,
    #   `2019-07-01T23:59:59`.
    #   @return [Time]
    #
    # @!attribute [rw] last_updated_time
    #   The time that this SLO was most recently updated. When used in a raw
    #   HTTP Query API, it is formatted as `yyyy-MM-dd'T'HH:mm:ss`. For
    #   example, `2019-07-01T23:59:59`.
    #   @return [Time]
    #
    # @!attribute [rw] sli
    #   A structure containing information about the performance metric that
    #   this SLO monitors.
    #   @return [Types::ServiceLevelIndicator]
    #
    # @!attribute [rw] goal
    #   This structure contains the attributes that determine the goal of an
    #   SLO. This includes the time period for evaluation and the attainment
    #   threshold.
    #   @return [Types::Goal]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/ServiceLevelObjective AWS API Documentation
    #
    class ServiceLevelObjective < Struct.new(
      :arn,
      :name,
      :description,
      :created_time,
      :last_updated_time,
      :sli,
      :goal)
      SENSITIVE = []
      include Aws::Structure
    end

    # A structure containing an SLO budget report that you have requested.
    #
    # @!attribute [rw] arn
    #   The ARN of the SLO that this report is for.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   The name of the SLO that this report is for.
    #   @return [String]
    #
    # @!attribute [rw] budget_status
    #   The status of this SLO, as it relates to the error budget for the
    #   entire time interval.
    #
    #   * `OK` means that the SLO had remaining budget above the warning
    #     threshold, as of the time that you specified in `TimeStamp`.
    #
    #   * `WARNING` means that the SLO's remaining budget was below the
    #     warning threshold, as of the time that you specified in
    #     `TimeStamp`.
    #
    #   * `BREACHED` means that the SLO's budget was exhausted, as of the
    #     time that you specified in `TimeStamp`.
    #
    #   * `INSUFFICIENT_DATA` means that the specifed start and end times
    #     were before the SLO was created, or that attainment data is
    #     missing.
    #   @return [String]
    #
    # @!attribute [rw] attainment
    #   A number between 0 and 100 that represents the percentage of time
    #   periods that the service has attained the SLO's attainment goal, as
    #   of the time of the request.
    #   @return [Float]
    #
    # @!attribute [rw] total_budget_seconds
    #   The total number of seconds in the error budget for the interval.
    #   @return [Integer]
    #
    # @!attribute [rw] budget_seconds_remaining
    #   The budget amount remaining before the SLO status becomes
    #   `BREACHING`, at the time specified in the `Timestemp` parameter of
    #   the request. If this value is negative, then the SLO is already in
    #   `BREACHING` status.
    #   @return [Integer]
    #
    # @!attribute [rw] sli
    #   A structure that contains information about the performance metric
    #   that this SLO monitors.
    #   @return [Types::ServiceLevelIndicator]
    #
    # @!attribute [rw] goal
    #   This structure contains the attributes that determine the goal of an
    #   SLO. This includes the time period for evaluation and the attainment
    #   threshold.
    #   @return [Types::Goal]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/ServiceLevelObjectiveBudgetReport AWS API Documentation
    #
    class ServiceLevelObjectiveBudgetReport < Struct.new(
      :arn,
      :name,
      :budget_status,
      :attainment,
      :total_budget_seconds,
      :budget_seconds_remaining,
      :sli,
      :goal)
      SENSITIVE = []
      include Aws::Structure
    end

    # A structure containing information about one error that occurred
    # during a [BatchGetServiceLevelObjectiveBudgetReport][1] operation.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_BatchGetServiceLevelObjectiveBudgetReport.html
    #
    # @!attribute [rw] name
    #   The name of the SLO that this error is related to.
    #   @return [String]
    #
    # @!attribute [rw] arn
    #   The ARN of the SLO that this error is related to.
    #   @return [String]
    #
    # @!attribute [rw] error_code
    #   The error code for this error.
    #   @return [String]
    #
    # @!attribute [rw] error_message
    #   The message for this error.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/ServiceLevelObjectiveBudgetReportError AWS API Documentation
    #
    class ServiceLevelObjectiveBudgetReportError < Struct.new(
      :name,
      :arn,
      :error_code,
      :error_message)
      SENSITIVE = []
      include Aws::Structure
    end

    # A structure that contains information about one service level
    # objective (SLO) created in Application Signals.
    #
    # @!attribute [rw] arn
    #   The ARN of this service level objective.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   The name of the service level objective.
    #   @return [String]
    #
    # @!attribute [rw] key_attributes
    #   This is a string-to-string map. It can include the following fields.
    #
    #   * `Type` designates the type of object this service level objective
    #     is for.
    #
    #   * `ResourceType` specifies the type of the resource. This field is
    #     used only when the value of the `Type` field is `Resource` or
    #     `AWS::Resource`.
    #
    #   * `Name` specifies the name of the object. This is used only if the
    #     value of the `Type` field is `Service`, `RemoteService`, or
    #     `AWS::Service`.
    #
    #   * `Identifier` identifies the resource objects of this resource.
    #     This is used only if the value of the `Type` field is `Resource`
    #     or `AWS::Resource`.
    #
    #   * `Environment` specifies the location where this object is hosted,
    #     or what it belongs to.
    #   @return [Hash<String,String>]
    #
    # @!attribute [rw] operation_name
    #   If this service level objective is specific to a single operation,
    #   this field displays the name of that operation.
    #   @return [String]
    #
    # @!attribute [rw] created_time
    #   The date and time that this service level objective was created. It
    #   is expressed as the number of milliseconds since Jan 1, 1970
    #   00:00:00 UTC.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/ServiceLevelObjectiveSummary AWS API Documentation
    #
    class ServiceLevelObjectiveSummary < Struct.new(
      :arn,
      :name,
      :key_attributes,
      :operation_name,
      :created_time)
      SENSITIVE = []
      include Aws::Structure
    end

    # This structure contains information about an operation discovered by
    # Application Signals. An operation is a specific function performed by
    # a service that was discovered by Application Signals, and is often an
    # API that is called by an upstream dependent.
    #
    # @!attribute [rw] name
    #   The name of the operation, discovered by Application Signals.
    #   @return [String]
    #
    # @!attribute [rw] metric_references
    #   An array of structures that each contain information about one
    #   metric associated with this service operation that was discovered by
    #   Application Signals.
    #   @return [Array<Types::MetricReference>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/ServiceOperation AWS API Documentation
    #
    class ServiceOperation < Struct.new(
      :name,
      :metric_references)
      SENSITIVE = []
      include Aws::Structure
    end

    # This request exceeds a service quota.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/ServiceQuotaExceededException AWS API Documentation
    #
    class ServiceQuotaExceededException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # This structure contains information about one of your services that
    # was discoverd by Application Signals
    #
    # @!attribute [rw] key_attributes
    #   This is a string-to-string map that help identify the objects
    #   discovered by Application Signals. It can include the following
    #   fields.
    #
    #   * `Type` designates the type of object this is.
    #
    #   * `ResourceType` specifies the type of the resource. This field is
    #     used only when the value of the `Type` field is `Resource` or
    #     `AWS::Resource`.
    #
    #   * `Name` specifies the name of the object. This is used only if the
    #     value of the `Type` field is `Service`, `RemoteService`, or
    #     `AWS::Service`.
    #
    #   * `Identifier` identifies the resource objects of this resource.
    #     This is used only if the value of the `Type` field is `Resource`
    #     or `AWS::Resource`.
    #
    #   * `Environment` specifies the location where this object is hosted,
    #     or what it belongs to.
    #   @return [Hash<String,String>]
    #
    # @!attribute [rw] attribute_maps
    #   This structure contains one or more string-to-string maps that help
    #   identify this service. It can include *platform attributes*,
    #   *application attributes*, and *telemetry attributes*.
    #
    #   Platform attributes contain information the service's platform.
    #
    #   * `PlatformType` defines the hosted-in platform.
    #
    #   * `EKS.Cluster` is the name of the Amazon EKS cluster.
    #
    #   * `K8s.Cluster` is the name of the self-hosted Kubernetes cluster.
    #
    #   * `K8s.Namespace` is the name of the Kubernetes namespace in either
    #     Amazon EKS or Kubernetes clusters.
    #
    #   * `K8s.Workload` is the name of the Kubernetes workload in either
    #     Amazon EKS or Kubernetes clusters.
    #
    #   * `K8s.Node` is the name of the Kubernetes node in either Amazon EKS
    #     or Kubernetes clusters.
    #
    #   * `K8s.Pod` is the name of the Kubernetes pod in either Amazon EKS
    #     or Kubernetes clusters.
    #
    #   * `EC2.AutoScalingGroup` is the name of the Amazon EC2 Auto Scaling
    #     group.
    #
    #   * `EC2.InstanceId` is the ID of the Amazon EC2 instance.
    #
    #   * `Host` is the name of the host, for all platform types.
    #
    #   Applciation attributes contain information about the application.
    #
    #   * `AWS.Application` is the application's name in Amazon Web
    #     Services Service Catalog AppRegistry.
    #
    #   * `AWS.Application.ARN` is the application's ARN in Amazon Web
    #     Services Service Catalog AppRegistry.
    #
    #   Telemetry attributes contain telemetry information.
    #
    #   * `Telemetry.SDK` is the fingerprint of the OpenTelemetry SDK
    #     version for instrumented services.
    #
    #   * `Telemetry.Agent` is the fingerprint of the agent used to collect
    #     and send telemetry data.
    #
    #   * `Telemetry.Source` Specifies the point of application where the
    #     telemetry was collected or specifies what was used for the source
    #     of telemetry data.
    #   @return [Array<Hash<String,String>>]
    #
    # @!attribute [rw] metric_references
    #   An array of structures that each contain information about one
    #   metric associated with this service.
    #   @return [Array<Types::MetricReference>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/ServiceSummary AWS API Documentation
    #
    class ServiceSummary < Struct.new(
      :key_attributes,
      :attribute_maps,
      :metric_references)
      SENSITIVE = []
      include Aws::Structure
    end

    # @api private
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/StartDiscoveryInput AWS API Documentation
    #
    class StartDiscoveryInput < Aws::EmptyStructure; end

    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/StartDiscoveryOutput AWS API Documentation
    #
    class StartDiscoveryOutput < Aws::EmptyStructure; end

    # A key-value pair associated with a resource. Tags can help you
    # organize and categorize your resources.
    #
    # @!attribute [rw] key
    #   A string that you can use to assign a value. The combination of tag
    #   keys and values can help you organize and categorize your resources.
    #   @return [String]
    #
    # @!attribute [rw] value
    #   The value for the specified tag key.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/Tag AWS API Documentation
    #
    class Tag < Struct.new(
      :key,
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] resource_arn
    #   The Amazon Resource Name (ARN) of the CloudWatch resource that you
    #   want to set tags for.
    #
    #   The ARN format of an Application Signals SLO is
    #   `arn:aws:cloudwatch:Region:account-id:slo:slo-name `
    #
    #   For more information about ARN format, see [ Resource Types Defined
    #   by Amazon CloudWatch][1] in the *Amazon Web Services General
    #   Reference*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazoncloudwatch.html#amazoncloudwatch-resources-for-iam-policies
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The list of key-value pairs to associate with the alarm.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/TagResourceRequest AWS API Documentation
    #
    class TagResourceRequest < Struct.new(
      :resource_arn,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/TagResourceResponse AWS API Documentation
    #
    class TagResourceResponse < Aws::EmptyStructure; end

    # The request was throttled because of quota limits.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/ThrottlingException AWS API Documentation
    #
    class ThrottlingException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] resource_arn
    #   The Amazon Resource Name (ARN) of the CloudWatch resource that you
    #   want to delete tags from.
    #
    #   The ARN format of an Application Signals SLO is
    #   `arn:aws:cloudwatch:Region:account-id:slo:slo-name `
    #
    #   For more information about ARN format, see [ Resource Types Defined
    #   by Amazon CloudWatch][1] in the *Amazon Web Services General
    #   Reference*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazoncloudwatch.html#amazoncloudwatch-resources-for-iam-policies
    #   @return [String]
    #
    # @!attribute [rw] tag_keys
    #   The list of tag keys to remove from the resource.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/UntagResourceRequest AWS API Documentation
    #
    class UntagResourceRequest < Struct.new(
      :resource_arn,
      :tag_keys)
      SENSITIVE = []
      include Aws::Structure
    end

    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/UntagResourceResponse AWS API Documentation
    #
    class UntagResourceResponse < Aws::EmptyStructure; end

    # @!attribute [rw] id
    #   The Amazon Resource Name (ARN) or name of the service level
    #   objective that you want to update.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   An optional description for the SLO.
    #   @return [String]
    #
    # @!attribute [rw] sli_config
    #   A structure that contains information about what performance metric
    #   this SLO will monitor.
    #   @return [Types::ServiceLevelIndicatorConfig]
    #
    # @!attribute [rw] goal
    #   A structure that contains the attributes that determine the goal of
    #   the SLO. This includes the time period for evaluation and the
    #   attainment threshold.
    #   @return [Types::Goal]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/UpdateServiceLevelObjectiveInput AWS API Documentation
    #
    class UpdateServiceLevelObjectiveInput < Struct.new(
      :id,
      :description,
      :sli_config,
      :goal)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] slo
    #   A structure that contains information about the SLO that you just
    #   updated.
    #   @return [Types::ServiceLevelObjective]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/UpdateServiceLevelObjectiveOutput AWS API Documentation
    #
    class UpdateServiceLevelObjectiveOutput < Struct.new(
      :slo)
      SENSITIVE = []
      include Aws::Structure
    end

    # The resource is not valid.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/application-signals-2024-04-15/ValidationException AWS API Documentation
    #
    class ValidationException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

  end
end