// Code generated by smithy-go-codegen DO NOT EDIT.

package types

import (
	smithydocument "github.com/aws/smithy-go/document"
	"time"
)

// Represents an individual contributor to a multi-timeseries alarm, containing
// information about a specific time series and its contribution to the alarm's
// state.
type AlarmContributor struct {

	// A map of attributes that describe the contributor, such as metric dimensions
	// and other identifying characteristics.
	//
	// This member is required.
	ContributorAttributes map[string]string

	// The unique identifier for this alarm contributor.
	//
	// This member is required.
	ContributorId *string

	// An explanation for the contributor's current state, providing context about why
	// it is in its current condition.
	//
	// This member is required.
	StateReason *string

	// The timestamp when the contributor last transitioned to its current state.
	StateTransitionedTimestamp *time.Time

	noSmithyDocumentSerde
}

// Represents the history of a specific alarm.
type AlarmHistoryItem struct {

	// A map of attributes that describe the alarm contributor associated with this
	// history item, providing context about the contributor's characteristics at the
	// time of the event.
	AlarmContributorAttributes map[string]string

	// The unique identifier of the alarm contributor associated with this history
	// item, if applicable.
	AlarmContributorId *string

	// The descriptive name for the alarm.
	AlarmName *string

	// The type of alarm, either metric alarm or composite alarm.
	AlarmType AlarmType

	// Data about the alarm, in JSON format.
	HistoryData *string

	// The type of alarm history item.
	HistoryItemType HistoryItemType

	// A summary of the alarm history, in text format.
	HistorySummary *string

	// The time stamp for the alarm history item.
	Timestamp *time.Time

	noSmithyDocumentSerde
}

// Summary information about an alarm mute rule, including its name, status, and
// configuration details.
type AlarmMuteRuleSummary struct {

	// The Amazon Resource Name (ARN) of the alarm mute rule.
	AlarmMuteRuleArn *string

	// The date and time when the mute rule expires and is no longer evaluated. This
	// field is only present if an expiration date was configured.
	ExpireDate *time.Time

	// The date and time when the mute rule was last updated.
	LastUpdatedTimestamp *time.Time

	// Indicates whether the mute rule is one-time or recurring. Valid values are
	// ONE_TIME or RECURRING .
	MuteType *string

	// The current status of the alarm mute rule. Valid values are SCHEDULED , ACTIVE ,
	// or EXPIRED .
	Status AlarmMuteRuleStatus

	noSmithyDocumentSerde
}

// Contains the configuration that determines how a PromQL alarm evaluates its
// contributors, including the query to run and the durations that define when
// contributors transition between states.
type AlarmPromQLCriteria struct {

	// The PromQL query that the alarm evaluates. The query must return a result of
	// vector type. Each entry in the vector result represents an alarm contributor.
	//
	// This member is required.
	Query *string

	// The duration, in seconds, that a contributor must be continuously breaching
	// before it transitions to the ALARM state.
	PendingPeriod *int32

	// The duration, in seconds, that a contributor must continuously not be breaching
	// before it transitions back to the OK state.
	RecoveryPeriod *int32

	noSmithyDocumentSerde
}

// An anomaly detection model associated with a particular CloudWatch metric,
// statistic, or metric math expression. You can use the model to display a band of
// expected, normal values when the metric is graphed.
//
// If you have enabled unified cross-account observability, and this account is a
// monitoring account, the metric can be in the same account or a source account.
type AnomalyDetector struct {

	// The configuration specifies details about how the anomaly detection model is to
	// be trained, including time ranges to exclude from use for training the model,
	// and the time zone to use for the metric.
	Configuration *AnomalyDetectorConfiguration

	// The metric dimensions associated with the anomaly detection model.
	//
	// Deprecated: Use SingleMetricAnomalyDetector.Dimensions property.
	Dimensions []Dimension

	// This object includes parameters that you can use to provide information about
	// your metric to CloudWatch to help it build more accurate anomaly detection
	// models. Currently, it includes the PeriodicSpikes parameter.
	MetricCharacteristics *MetricCharacteristics

	// The CloudWatch metric math expression for this anomaly detector.
	MetricMathAnomalyDetector *MetricMathAnomalyDetector

	// The name of the metric associated with the anomaly detection model.
	//
	// Deprecated: Use SingleMetricAnomalyDetector.MetricName property.
	MetricName *string

	// The namespace of the metric associated with the anomaly detection model.
	//
	// Deprecated: Use SingleMetricAnomalyDetector.Namespace property.
	Namespace *string

	// The CloudWatch metric and statistic for this anomaly detector.
	SingleMetricAnomalyDetector *SingleMetricAnomalyDetector

	// The statistic associated with the anomaly detection model.
	//
	// Deprecated: Use SingleMetricAnomalyDetector.Stat property.
	Stat *string

	// The current status of the anomaly detector's training.
	StateValue AnomalyDetectorStateValue

	noSmithyDocumentSerde
}

// The configuration specifies details about how the anomaly detection model is to
// be trained, including time ranges to exclude from use for training the model and
// the time zone to use for the metric.
type AnomalyDetectorConfiguration struct {

	// An array of time ranges to exclude from use when the anomaly detection model is
	// trained. Use this to make sure that events that could cause unusual values for
	// the metric, such as deployments, aren't used when CloudWatch creates the model.
	ExcludedTimeRanges []Range

	// The time zone to use for the metric. This is useful to enable the model to
	// automatically account for daylight savings time changes if the metric is
	// sensitive to such time changes.
	//
	// To specify a time zone, use the name of the time zone as specified in the
	// standard tz database. For more information, see [tz database].
	//
	// [tz database]: https://en.wikipedia.org/wiki/Tz_database
	MetricTimezone *string

	noSmithyDocumentSerde
}

// The details about a composite alarm.
type CompositeAlarm struct {

	// Indicates whether actions should be executed during any changes to the alarm
	// state.
	ActionsEnabled *bool

	//  When the value is ALARM , it means that the actions are suppressed because the
	// suppressor alarm is in ALARM When the value is WaitPeriod , it means that the
	// actions are suppressed because the composite alarm is waiting for the suppressor
	// alarm to go into into the ALARM state. The maximum waiting time is as specified
	// in ActionsSuppressorWaitPeriod . After this time, the composite alarm performs
	// its actions. When the value is ExtensionPeriod , it means that the actions are
	// suppressed because the composite alarm is waiting after the suppressor alarm
	// went out of the ALARM state. The maximum waiting time is as specified in
	// ActionsSuppressorExtensionPeriod . After this time, the composite alarm performs
	// its actions.
	ActionsSuppressedBy ActionsSuppressedBy

	//  Captures the reason for action suppression.
	ActionsSuppressedReason *string

	//  Actions will be suppressed if the suppressor alarm is in the ALARM state.
	// ActionsSuppressor can be an AlarmName or an Amazon Resource Name (ARN) from an
	// existing alarm.
	ActionsSuppressor *string

	//  The maximum time in seconds that the composite alarm waits after suppressor
	// alarm goes out of the ALARM state. After this time, the composite alarm
	// performs its actions.
	//
	// ExtensionPeriod is required only when ActionsSuppressor is specified.
	ActionsSuppressorExtensionPeriod *int32

	//  The maximum time in seconds that the composite alarm waits for the suppressor
	// alarm to go into the ALARM state. After this time, the composite alarm performs
	// its actions.
	//
	// WaitPeriod is required only when ActionsSuppressor is specified.
	ActionsSuppressorWaitPeriod *int32

	// The actions to execute when this alarm transitions to the ALARM state from any
	// other state. Each action is specified as an Amazon Resource Name (ARN).
	AlarmActions []string

	// The Amazon Resource Name (ARN) of the alarm.
	AlarmArn *string

	// The time stamp of the last update to the alarm configuration.
	AlarmConfigurationUpdatedTimestamp *time.Time

	// The description of the alarm.
	AlarmDescription *string

	// The name of the alarm.
	AlarmName *string

	// The rule that this alarm uses to evaluate its alarm state.
	AlarmRule *string

	// The actions to execute when this alarm transitions to the INSUFFICIENT_DATA
	// state from any other state. Each action is specified as an Amazon Resource Name
	// (ARN).
	InsufficientDataActions []string

	// The actions to execute when this alarm transitions to the OK state from any
	// other state. Each action is specified as an Amazon Resource Name (ARN).
	OKActions []string

	// An explanation for the alarm state, in text format.
	StateReason *string

	// An explanation for the alarm state, in JSON format.
	StateReasonData *string

	//  The timestamp of the last change to the alarm's StateValue .
	StateTransitionedTimestamp *time.Time

	// Tracks the timestamp of any state update, even if StateValue doesn't change.
	StateUpdatedTimestamp *time.Time

	// The state value for the alarm.
	StateValue StateValue

	noSmithyDocumentSerde
}

// Represents a specific dashboard.
type DashboardEntry struct {

	// The Amazon Resource Name (ARN) of the dashboard.
	DashboardArn *string

	// The name of the dashboard.
	DashboardName *string

	// The time stamp of when the dashboard was last modified, either by an API call
	// or through the console. This number is expressed as the number of milliseconds
	// since Jan 1, 1970 00:00:00 UTC.
	LastModified *time.Time

	// The size of the dashboard, in bytes.
	Size *int64

	noSmithyDocumentSerde
}

// An error or warning for the operation.
type DashboardValidationMessage struct {

	// The data path related to the message.
	DataPath *string

	// A message describing the error or warning.
	Message *string

	noSmithyDocumentSerde
}

// Encapsulates the statistical data that CloudWatch computes from metric data.
type Datapoint struct {

	// The average of the metric values that correspond to the data point.
	Average *float64

	// The percentile statistic for the data point.
	ExtendedStatistics map[string]float64

	// The maximum metric value for the data point.
	Maximum *float64

	// The minimum metric value for the data point.
	Minimum *float64

	// The number of metric values that contributed to the aggregate value of this
	// data point.
	SampleCount *float64

	// The sum of the metric values for the data point.
	Sum *float64

	// The time stamp used for the data point.
	Timestamp *time.Time

	// The standard unit for the data point.
	Unit StandardUnit

	noSmithyDocumentSerde
}

// 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.
type Dimension struct {

	// 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.
	//
	// This member is required.
	Name *string

	// 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.
	//
	// This member is required.
	Value *string

	noSmithyDocumentSerde
}

// Represents filters for a dimension.
type DimensionFilter struct {

	// The dimension name to be matched.
	//
	// This member is required.
	Name *string

	// The value of the dimension to be matched.
	Value *string

	noSmithyDocumentSerde
}

// An entity associated with metrics, to allow for finding related telemetry. An
// entity is typically a resource or service within your system. For example,
// metrics from an Amazon EC2 instance could be associated with that instance as
// the entity. Similarly, metrics from a service that you own could be associated
// with that service as the entity.
type Entity struct {

	// Additional attributes of the entity that are not used to specify the identity
	// of the entity. A list of key-value pairs.
	//
	// For details about how to use the attributes, see [How to add related information to telemetry] in the CloudWatch User Guide.
	//
	// [How to add related information to telemetry]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/adding-your-own-related-telemetry.html
	Attributes map[string]string

	// The attributes of the entity which identify the specific entity, as a list of
	// key-value pairs. Entities with the same KeyAttributes are considered to be the
	// same entity. For an entity to be valid, the KeyAttributes must exist and be
	// formatted correctly.
	//
	// There are five allowed attributes (key names): Type , ResourceType , Identifier
	// , Name , and Environment .
	//
	// For details about how to use the key attributes to specify an entity, see [How to add related information to telemetry] in
	// the CloudWatch User Guide.
	//
	// [How to add related information to telemetry]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/adding-your-own-related-telemetry.html
	KeyAttributes map[string]string

	noSmithyDocumentSerde
}

// A set of metrics that are associated with an entity, such as a specific service
// or resource. Contains the entity and the list of metric data associated with it.
type EntityMetricData struct {

	// The entity associated with the metrics.
	Entity *Entity

	// The metric data.
	MetricData []MetricDatum

	noSmithyDocumentSerde
}

// The evaluation criteria for an alarm. This is a union type that currently
// supports PromQLCriteria .
//
// The following types satisfy this interface:
//
//	EvaluationCriteriaMemberPromQLCriteria
type EvaluationCriteria interface {
	isEvaluationCriteria()
}

// The PromQL criteria for the alarm evaluation.
type EvaluationCriteriaMemberPromQLCriteria struct {
	Value AlarmPromQLCriteria

	noSmithyDocumentSerde
}

func (*EvaluationCriteriaMemberPromQLCriteria) isEvaluationCriteria() {}

// The evaluation window that an alarm uses to select the range of metric data
// that it evaluates each time it runs. This is a union type. Set exactly one of
// its members, SlidingWindow or WallClockWindow . If you don't set
// EvaluationWindow , the alarm uses a SlidingWindow by default.
//
// For more information, see [Alarm evaluation windows] in the CloudWatch User Guide.
//
// The following types satisfy this interface:
//
//	EvaluationWindowMemberSlidingWindow
//	EvaluationWindowMemberWallClockWindow
//
// [Alarm evaluation windows]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/alarm-evaluation-window.html
type EvaluationWindow interface {
	isEvaluationWindow()
}

// A sliding window, which advances each time the alarm is evaluated, forming a
// rolling time window. This is the default evaluation window.
type EvaluationWindowMemberSlidingWindow struct {
	Value SlidingWindow

	noSmithyDocumentSerde
}

func (*EvaluationWindowMemberSlidingWindow) isEvaluationWindow() {}

// A wall clock window, which aligns the evaluated range to fixed clock boundaries
// that match the alarm's period, such as the top of the hour, midnight, or the
// start of the calendar week.
type EvaluationWindowMemberWallClockWindow struct {
	Value WallClockWindow

	noSmithyDocumentSerde
}

func (*EvaluationWindowMemberWallClockWindow) isEvaluationWindow() {}

// This structure contains the definition for a Contributor Insights rule. For
// more information about this rule, see[Using Constributor Insights to analyze high-cardinality data] in the Amazon CloudWatch User Guide.
//
// [Using Constributor Insights to analyze high-cardinality data]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ContributorInsights.html
type InsightRule struct {

	// The definition of the rule, as a JSON object. The definition contains the
	// keywords used to define contributors, the value to aggregate on if this rule
	// returns a sum instead of a count, and the filters. For details on the valid
	// syntax, see [Contributor Insights Rule Syntax].
	//
	// [Contributor Insights Rule Syntax]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ContributorInsights-RuleSyntax.html
	//
	// This member is required.
	Definition *string

	// The name of the rule.
	//
	// This member is required.
	Name *string

	// For rules that you create, this is always {"Name": "CloudWatchLogRule",
	// "Version": 1} . For managed rules, this is {"Name": "ServiceLogRule",
	// "Version": 1}
	//
	// This member is required.
	Schema *string

	// Indicates whether the rule is enabled or disabled.
	//
	// This member is required.
	State *string

	// Displays whether the rule is evaluated on the transformed versions of logs, for
	// log groups that have [Log transformation]enabled. If this is false , log events are evaluated before
	// they are transformed.
	//
	// [Log transformation]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch-Logs-Transformation.html
	ApplyOnTransformedLogs *bool

	//  An optional built-in rule that Amazon Web Services manages.
	ManagedRule *bool

	noSmithyDocumentSerde
}

// One of the unique contributors found by a Contributor Insights rule. If the
// rule contains multiple keys, then a unique contributor is a unique combination
// of values from all the keys in the rule.
//
// If the rule contains a single key, then each unique contributor is each unique
// value for this key.
//
// For more information, see [GetInsightRuleReport].
//
// [GetInsightRuleReport]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetInsightRuleReport.html
type InsightRuleContributor struct {

	// An approximation of the aggregate value that comes from this contributor.
	//
	// This member is required.
	ApproximateAggregateValue *float64

	// An array of the data points where this contributor is present. Only the data
	// points when this contributor appeared are included in the array.
	//
	// This member is required.
	Datapoints []InsightRuleContributorDatapoint

	// One of the log entry field keywords that is used to define contributors for
	// this rule.
	//
	// This member is required.
	Keys []string

	noSmithyDocumentSerde
}

// One data point related to one contributor.
//
// For more information, see [GetInsightRuleReport] and [InsightRuleContributor].
//
// [GetInsightRuleReport]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetInsightRuleReport.html
// [InsightRuleContributor]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_InsightRuleContributor.html
type InsightRuleContributorDatapoint struct {

	// The approximate value that this contributor added during this timestamp.
	//
	// This member is required.
	ApproximateValue *float64

	// The timestamp of the data point.
	//
	// This member is required.
	Timestamp *time.Time

	noSmithyDocumentSerde
}

// One data point from the metric time series returned in a Contributor Insights
// rule report.
//
// For more information, see [GetInsightRuleReport].
//
// [GetInsightRuleReport]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetInsightRuleReport.html
type InsightRuleMetricDatapoint struct {

	// The timestamp of the data point.
	//
	// This member is required.
	Timestamp *time.Time

	// The average value from all contributors during the time period represented by
	// that data point.
	//
	// This statistic is returned only if you included it in the Metrics array in your
	// request.
	Average *float64

	// The maximum value provided by one contributor during this timestamp. Each
	// timestamp is evaluated separately, so the identity of the max contributor could
	// be different for each timestamp.
	//
	// This statistic is returned only if you included it in the Metrics array in your
	// request.
	MaxContributorValue *float64

	// The maximum value from a single occurence from a single contributor during the
	// time period represented by that data point.
	//
	// This statistic is returned only if you included it in the Metrics array in your
	// request.
	Maximum *float64

	// The minimum value from a single contributor during the time period represented
	// by that data point.
	//
	// This statistic is returned only if you included it in the Metrics array in your
	// request.
	Minimum *float64

	// The number of occurrences that matched the rule during this data point.
	//
	// This statistic is returned only if you included it in the Metrics array in your
	// request.
	SampleCount *float64

	// The sum of the values from all contributors during the time period represented
	// by that data point.
	//
	// This statistic is returned only if you included it in the Metrics array in your
	// request.
	Sum *float64

	// The number of unique contributors who published data during this timestamp.
	//
	// This statistic is returned only if you included it in the Metrics array in your
	// request.
	UniqueContributors *float64

	noSmithyDocumentSerde
}

// This structure includes the Timezone parameter, which you can use to specify
// your time zone so that the labels that are associated with returned metrics
// display the correct time for your time zone.
//
// The Timezone value affects a label only if you have a time-based dynamic
// expression in the label. For more information about dynamic expressions in
// labels, see [Using Dynamic Labels].
//
// [Using Dynamic Labels]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/graph-dynamic-labels.html
type LabelOptions struct {

	// The time zone to use for metric data return in this operation. The format is +
	// or - followed by four digits. The first two digits indicate the number of hours
	// ahead or behind of UTC, and the final two digits are the number of minutes. For
	// example, +0130 indicates a time zone that is 1 hour and 30 minutes ahead of UTC.
	// The default is +0000.
	Timezone *string

	noSmithyDocumentSerde
}

// The details about a log alarm.
type LogAlarm struct {

	// The number of log lines from the most recent scheduled query execution that are
	// included in alarm action notifications. Valid range is 0 through 50. A value of
	// 0 means no log lines are included.
	ActionLogLineCount *int32

	// The Amazon Resource Name (ARN) of the IAM role that CloudWatch assumes to
	// retrieve log events for inclusion in alarm action notifications. Set when
	// ActionLogLineCount is greater than 0.
	ActionLogLineRoleArn *string

	// Indicates whether actions should be executed during any changes to the alarm
	// state.
	ActionsEnabled *bool

	// The actions to execute when this alarm transitions to the ALARM state from any
	// other state. Each action is specified as an Amazon Resource Name (ARN).
	AlarmActions []string

	// The Amazon Resource Name (ARN) of the alarm.
	AlarmArn *string

	// The time stamp of the last update to the alarm configuration.
	AlarmConfigurationUpdatedTimestamp *time.Time

	// The description of the alarm.
	AlarmDescription *string

	// The name of the alarm.
	AlarmName *string

	// The arithmetic operation to use when comparing the aggregated query result and
	// the threshold. The aggregated query result is used as the first operand.
	ComparisonOperator ComparisonOperator

	// If the value of this field is EVALUATION_ERROR , it indicates configuration
	// errors in the alarm setup that require review and correction. Refer to the
	// StateReason field of the alarm for more details.
	//
	// If the value of this field is EVALUATION_FAILURE , it indicates temporary
	// CloudWatch issues. We recommend manual monitoring until the issue is resolved.
	//
	// If the value of this field is PARTIAL_DATA , it indicates that the query
	// returned the maximum 500 contributor groups but more matched. The alarm
	// evaluates the available contributors, but results might be incomplete.
	EvaluationState EvaluationState

	// The actions to execute when this alarm transitions to the INSUFFICIENT_DATA
	// state from any other state. Each action is specified as an Amazon Resource Name
	// (ARN).
	InsufficientDataActions []string

	// The actions to execute when this alarm transitions to the OK state from any
	// other state. Each action is specified as an Amazon Resource Name (ARN).
	OKActions []string

	// The number of query results, out of the most recent QueryResultsToEvaluate
	// results, that must breach the threshold to trigger the alarm to transition to
	// ALARM (the M in M-of-N evaluation).
	QueryResultsToAlarm *int32

	// The number of most recent scheduled query results that the alarm evaluates
	// against the threshold (the N in M-of-N evaluation).
	QueryResultsToEvaluate *int32

	// The configuration of the underlying CloudWatch Logs scheduled query, including
	// the query string, log groups, schedule, aggregation expression, and the ARN of
	// the managed scheduled query.
	ScheduledQueryConfiguration *ScheduledQueryConfiguration

	// An explanation for the alarm state, in text format.
	StateReason *string

	// An explanation for the alarm state, in JSON format.
	StateReasonData *string

	// The date and time that the alarm's StateValue most recently changed.
	StateTransitionedTimestamp *time.Time

	// The time stamp of the last update to the value of either the StateValue or
	// EvaluationState parameters.
	StateUpdatedTimestamp *time.Time

	// The state value for the alarm.
	StateValue StateValue

	// The value to compare with the aggregated query result.
	Threshold *float64

	// How this alarm handles missing data points. Valid values are breaching ,
	// notBreaching , ignore , and missing .
	TreatMissingData *string

	noSmithyDocumentSerde
}

//	Contains the information that's required to enable a managed Contributor
//
// Insights rule for an Amazon Web Services resource.
type ManagedRule struct {

	//  The ARN of an Amazon Web Services resource that has managed Contributor
	// Insights rules.
	//
	// This member is required.
	ResourceARN *string

	//  The template name for the managed Contributor Insights rule, as returned by
	// ListManagedInsightRules .
	//
	// This member is required.
	TemplateName *string

	//  A list of key-value pairs that you can associate with a managed Contributor
	// Insights rule. You can associate as many as 50 tags with a rule. Tags can help
	// you organize and categorize your resources. You also can use them to scope user
	// permissions by granting a user permission to access or change only the resources
	// that have certain tag values. To associate tags with a rule, you must have the
	// cloudwatch:TagResource permission in addition to the cloudwatch:PutInsightRule
	// permission. If you are using this operation to update an existing Contributor
	// Insights rule, any tags that you specify in this parameter are ignored. To
	// change the tags of an existing rule, use TagResource .
	Tags []Tag

	noSmithyDocumentSerde
}

//	Contains information about managed Contributor Insights rules, as returned by
//
// ListManagedInsightRules .
type ManagedRuleDescription struct {

	//  If a managed rule is enabled, this is the ARN for the related Amazon Web
	// Services resource.
	ResourceARN *string

	//  Describes the state of a managed rule. If present, it contains information
	// about the Contributor Insights rule that contains information about the related
	// Amazon Web Services resource.
	RuleState *ManagedRuleState

	//  The template name for the managed rule. Used to enable managed rules using
	// PutManagedInsightRules .
	TemplateName *string

	noSmithyDocumentSerde
}

// The status of a managed Contributor Insights rule.
type ManagedRuleState struct {

	//  The name of the Contributor Insights rule that contains data for the specified
	// Amazon Web Services resource.
	//
	// This member is required.
	RuleName *string

	//  Indicates whether the rule is enabled or disabled.
	//
	// This member is required.
	State *string

	noSmithyDocumentSerde
}

// A message returned by the GetMetricData API, including a code and a description.
//
// If a cross-Region GetMetricData operation fails with a code of Forbidden and a
// value of Authentication too complex to retrieve cross region data , you can
// correct the problem by running the GetMetricData operation in the same Region
// where the metric data is.
type MessageData struct {

	// The error code or status code associated with the message.
	Code *string

	// The message text.
	Value *string

	noSmithyDocumentSerde
}

// Represents a specific metric.
type Metric struct {

	// The dimensions for the metric.
	Dimensions []Dimension

	// The name of the metric. This is a required field.
	MetricName *string

	// The namespace of the metric.
	Namespace *string

	noSmithyDocumentSerde
}

// The details about a metric alarm.
type MetricAlarm struct {

	// Indicates whether actions should be executed during any changes to the alarm
	// state.
	ActionsEnabled *bool

	// The actions to execute when this alarm transitions to the ALARM state from any
	// other state. Each action is specified as an Amazon Resource Name (ARN).
	AlarmActions []string

	// The Amazon Resource Name (ARN) of the alarm.
	AlarmArn *string

	// The time stamp of the last update to the alarm configuration.
	AlarmConfigurationUpdatedTimestamp *time.Time

	// The description of the alarm.
	AlarmDescription *string

	// The name of the alarm.
	AlarmName *string

	// The arithmetic operation to use when comparing the specified statistic and
	// threshold. The specified statistic value is used as the first operand.
	ComparisonOperator ComparisonOperator

	// The number of data points that must be breaching to trigger the alarm.
	DatapointsToAlarm *int32

	// The dimensions for the metric associated with the alarm.
	Dimensions []Dimension

	// Used only for alarms based on percentiles. If ignore , the alarm state does not
	// change during periods with too few data points to be statistically significant.
	// If evaluate or this parameter is not used, the alarm is always evaluated and
	// possibly changes state no matter how many data points are available.
	EvaluateLowSampleCountPercentile *string

	// The evaluation criteria for the alarm.
	EvaluationCriteria EvaluationCriteria

	// The frequency, in seconds, at which the alarm is evaluated.
	EvaluationInterval *int32

	// The number of periods over which data is compared to the specified threshold.
	EvaluationPeriods *int32

	// If the value of this field is PARTIAL_DATA , it indicates that not all the
	// available data was able to be retrieved due to quota limitations. For more
	// information, see [Create alarms on Metrics Insights queries].
	//
	// If the value of this field is EVALUATION_ERROR , it indicates configuration
	// errors in alarm setup that require review and correction. Refer to StateReason
	// field of the alarm for more details.
	//
	// If the value of this field is EVALUATION_FAILURE , it indicates temporary
	// CloudWatch issues. We recommend manual monitoring until the issue is resolved
	//
	// [Create alarms on Metrics Insights queries]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Create_Metrics_Insights_Alarm.html
	EvaluationState EvaluationState

	// The evaluation window that the alarm uses to select the range of metric data
	// that it evaluates. This is either a sliding window or a wall clock window. For
	// more information, see [Alarm evaluation windows]in the CloudWatch User Guide.
	//
	// [Alarm evaluation windows]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/alarm-evaluation-window.html
	EvaluationWindow EvaluationWindow

	// The percentile statistic for the metric associated with the alarm. Specify a
	// value between p0.0 and p100.
	ExtendedStatistic *string

	// The actions to execute when this alarm transitions to the INSUFFICIENT_DATA
	// state from any other state. Each action is specified as an Amazon Resource Name
	// (ARN).
	InsufficientDataActions []string

	// The name of the metric associated with the alarm, if this is an alarm based on
	// a single metric.
	MetricName *string

	// An array of MetricDataQuery structures, used in an alarm based on a metric math
	// expression. Each structure either retrieves a metric or performs a math
	// expression. One item in the Metrics array is the math expression that the alarm
	// watches. This expression by designated by having ReturnData set to true.
	Metrics []MetricDataQuery

	// The namespace of the metric associated with the alarm.
	Namespace *string

	// The actions to execute when this alarm transitions to the OK state from any
	// other state. Each action is specified as an Amazon Resource Name (ARN).
	OKActions []string

	// The period, in seconds, over which the statistic is applied.
	Period *int32

	// An explanation for the alarm state, in text format.
	StateReason *string

	// An explanation for the alarm state, in JSON format.
	StateReasonData *string

	// The date and time that the alarm's StateValue most recently changed.
	StateTransitionedTimestamp *time.Time

	// The time stamp of the last update to the value of either the StateValue or
	// EvaluationState parameters.
	StateUpdatedTimestamp *time.Time

	// The state value for the alarm.
	StateValue StateValue

	// The statistic for the metric associated with the alarm, other than percentile.
	// For percentile statistics, use ExtendedStatistic .
	Statistic Statistic

	// The value to compare with the specified statistic.
	Threshold *float64

	// In an alarm based on an anomaly detection model, this is the ID of the
	// ANOMALY_DETECTION_BAND function used as the threshold for the alarm.
	ThresholdMetricId *string

	// Sets how this alarm is to handle missing data points. The valid values are
	// breaching , notBreaching , ignore , and missing . For more information, see [Configuring how CloudWatch alarms treat missing data].
	//
	// If this parameter is omitted, the default behavior of missing is used.
	//
	// This parameter is not applicable to PromQL alarms.
	//
	// [Configuring how CloudWatch alarms treat missing data]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html#alarms-and-missing-data
	TreatMissingData *string

	// The unit of the metric associated with the alarm.
	Unit StandardUnit

	noSmithyDocumentSerde
}

// This object includes parameters that you can use to provide information to
// CloudWatch to help it build more accurate anomaly detection models.
type MetricCharacteristics struct {

	// Set this parameter to true if values for this metric consistently include
	// spikes that should not be considered to be anomalies. With this set to true ,
	// CloudWatch will expect to see spikes that occurred consistently during the model
	// training period, and won't flag future similar spikes as anomalies.
	PeriodicSpikes *bool

	noSmithyDocumentSerde
}

// This structure is used in both GetMetricData and PutMetricAlarm . The supported
// use of this structure is different for those two operations.
//
// When used in GetMetricData , it indicates the metric data to return, and whether
// this call is just retrieving a batch set of data for one metric, or is
// performing a Metrics Insights query or a math expression. A single GetMetricData
// call can include up to 500 MetricDataQuery structures.
//
// When used in PutMetricAlarm , it enables you to create an alarm based on a
// metric math expression. Each MetricDataQuery in the array specifies either a
// metric to retrieve, or a math expression to be performed on retrieved metrics. A
// single PutMetricAlarm call can include up to 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, one must have true as the value for ReturnData . The
// result of this expression is the value the alarm watches.
//
// Any expression used in a PutMetricAlarm operation must return a single time
// series. For more information, see [Metric Math Syntax and Functions]in the Amazon CloudWatch User Guide.
//
// Some of the parameters of this structure also have different uses whether you
// are using this structure in a GetMetricData operation or a PutMetricAlarm
// operation. These differences are explained in the following parameter list.
//
// [Metric Math Syntax and Functions]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html#metric-math-syntax
type MetricDataQuery struct {

	// A short name used to tie this object to the results in the response. This name
	// must be unique within a single call to GetMetricData . If you are performing
	// math expressions on this set of data, this name represents that data and can
	// serve as a variable in the mathematical expression. The valid characters are
	// letters, numbers, and underscore. The first character must be a lowercase
	// letter.
	//
	// This member is required.
	Id *string

	// The ID of the account where the metrics are located.
	//
	// If you are performing a GetMetricData operation in a monitoring account, use
	// this to specify which account to retrieve this metric from.
	//
	// If you are performing a PutMetricAlarm operation, use this to specify which
	// account contains the metric that the alarm is watching.
	AccountId *string

	// This field can contain either a Metrics Insights query, or a metric math
	// expression to be performed on the returned data. For more information about
	// Metrics Insights queries, see [Metrics Insights query components and syntax]in the Amazon CloudWatch User Guide.
	//
	// 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]
	// in the Amazon CloudWatch User Guide.
	//
	// Within each MetricDataQuery object, you must specify either Expression or
	// MetricStat but not both.
	//
	// [Metrics Insights query components and syntax]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-metrics-insights-querylanguage
	// [Metric Math Syntax and Functions]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html#metric-math-syntax
	Expression *string

	// 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].
	//
	// [Using Dynamic Labels]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/graph-dynamic-labels.html
	Label *string

	// The metric to be returned, along with statistics, period, and units. Use this
	// parameter only if this object is retrieving a metric and not performing a math
	// expression on returned data.
	//
	// Within one MetricDataQuery object, you must specify either Expression or
	// MetricStat but not both.
	MetricStat *MetricStat

	// The granularity, in seconds, of the returned data points. 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, 20, 30, 60, or any multiple
	// of 60. High-resolution metrics are those metrics stored by a PutMetricData
	// operation that includes a StorageResolution of 1 second .
	Period *int32

	// When used in GetMetricData , this option indicates whether to return the
	// timestamps and raw data values of this metric. If you are performing this call
	// just to do math expressions and do not also need the raw data returned, you can
	// specify false . If you omit this, the default of true is used.
	//
	// When used in PutMetricAlarm , specify true for the one expression result to use
	// as the alarm. For all other metrics and expressions in the same PutMetricAlarm
	// operation, specify ReturnData as False.
	ReturnData *bool

	noSmithyDocumentSerde
}

// A GetMetricData call returns an array of MetricDataResult structures. Each of
// these structures includes the data points for that metric, along with the
// timestamps of those data points and other identifying information.
type MetricDataResult struct {

	// The short name you specified to represent this metric.
	Id *string

	// The human-readable label associated with the data.
	Label *string

	// A list of messages with additional information about the data returned.
	Messages []MessageData

	// The status of the returned data. Complete indicates that all data points in the
	// requested time range were returned. PartialData means that an incomplete set of
	// data points were returned. You can use the NextToken value that was returned
	// and repeat your request to get more data points. NextToken is not returned if
	// you are performing a math expression. InternalError indicates that an error
	// occurred. Retry your request using NextToken , if present.
	StatusCode StatusCode

	// The timestamps for the data points, formatted in Unix timestamp format. The
	// number of timestamps always matches the number of values and the value for
	// Timestamps[x] is Values[x].
	Timestamps []time.Time

	// The data points for the metric corresponding to Timestamps . The number of
	// values always matches the number of timestamps and the timestamp for Values[x]
	// is Timestamps[x].
	Values []float64

	noSmithyDocumentSerde
}

// Encapsulates the information sent to either create a metric or add new values
// to be aggregated into an existing metric.
type MetricDatum struct {

	// The name of the metric.
	//
	// This member is required.
	MetricName *string

	// Array of numbers that is used along with the Values array. Each number in the
	// Count array is the number of times the corresponding value in the Values array
	// occurred during the period.
	//
	// If you omit the Counts array, the default of 1 is used as the value for each
	// count. If you include a Counts array, it must include the same amount of values
	// as the Values array.
	Counts []float64

	// The dimensions associated with the metric.
	Dimensions []Dimension

	// The statistical values for the metric.
	StatisticValues *StatisticSet

	// Valid values are 1 and 60. Setting this to 1 specifies this metric as a
	// high-resolution metric, so that CloudWatch stores the metric with sub-minute
	// resolution down to one second. Setting this to 60 specifies this metric as a
	// regular-resolution metric, which CloudWatch stores at 1-minute resolution.
	// Currently, high resolution is available only for custom metrics. For more
	// information about high-resolution metrics, see [High-Resolution Metrics]in the Amazon CloudWatch User
	// Guide.
	//
	// This field is optional, if you do not specify it the default of 60 is used.
	//
	// [High-Resolution Metrics]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/publishingMetrics.html#high-resolution-metrics
	StorageResolution *int32

	// The time the metric data was received, expressed as the number of milliseconds
	// since Jan 1, 1970 00:00:00 UTC.
	Timestamp *time.Time

	// When you are using a Put operation, this defines what unit you want to use when
	// storing the metric.
	//
	// In a Get operation, this displays the unit that is used for the metric.
	Unit StandardUnit

	// The value for the metric.
	//
	// Although the parameter accepts numbers of type Double, CloudWatch rejects
	// values that are either too small or too large. Values must be in the range of
	// -2^360 to 2^360. In addition, special values (for example, NaN, +Infinity,
	// -Infinity) are not supported.
	Value *float64

	// Array of numbers representing the values for the metric during the period. Each
	// unique value is listed just once in this array, and the corresponding number in
	// the Counts array specifies the number of times that value occurred during the
	// period. You can include up to 150 unique values in each PutMetricData action
	// that specifies a Values array.
	//
	// Although the Values array accepts numbers of type Double , CloudWatch rejects
	// values that are either too small or too large. Values must be in the range of
	// -2^360 to 2^360. In addition, special values (for example, NaN, +Infinity,
	// -Infinity) are not supported.
	Values []float64

	noSmithyDocumentSerde
}

// Indicates the CloudWatch math expression that provides the time series the
// anomaly detector uses as input. The designated math expression must return a
// single time series.
type MetricMathAnomalyDetector struct {

	// An array of metric data query structures that enables you to create an anomaly
	// detector based on the result of a metric math expression. Each item in
	// MetricDataQueries gets a metric or performs a math expression. One item in
	// MetricDataQueries is the expression that provides the time series that the
	// anomaly detector uses as input. Designate the expression by setting ReturnData
	// to true for this object in the array. For all other expressions and metrics,
	// set ReturnData to false . The designated expression must return a single time
	// series.
	MetricDataQueries []MetricDataQuery

	noSmithyDocumentSerde
}

// This structure defines the metric to be returned, along with the statistics,
// period, and units.
type MetricStat struct {

	// The metric to return, including the metric name, namespace, and dimensions.
	//
	// This member is required.
	Metric *Metric

	// The granularity, in seconds, of the returned data points. 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, 20, 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).
	//
	// This member is required.
	Period *int32

	// The statistic to return. It can include any CloudWatch statistic or extended
	// statistic.
	//
	// This member is required.
	Stat *string

	// When you are using a Put operation, this defines what unit you want to use when
	// storing the metric.
	//
	// In a Get operation, 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.
	Unit StandardUnit

	noSmithyDocumentSerde
}

// This structure contains the configuration information about one metric stream.
type MetricStreamEntry struct {

	// The ARN of the metric stream.
	Arn *string

	// The date that the metric stream was originally created.
	CreationDate *time.Time

	// The ARN of the Kinesis Firehose devlivery stream that is used for this metric
	// stream.
	FirehoseArn *string

	// The date that the configuration of this metric stream was most recently updated.
	LastUpdateDate *time.Time

	// The name of the metric stream.
	Name *string

	// The output format of this metric stream. Valid values are json ,
	// opentelemetry1.0 , and opentelemetry0.7 .
	OutputFormat MetricStreamOutputFormat

	// The current state of this stream. Valid values are running and stopped .
	State *string

	noSmithyDocumentSerde
}

// This structure contains a metric namespace and optionally, a list of metric
// names, to either include in a metric stream or exclude from a metric stream.
//
// A metric stream's filters can include up to 1000 total names. This limit
// applies to the sum of namespace names and metric names in the filters. For
// example, this could include 10 metric namespace filters with 99 metrics each, or
// 20 namespace filters with 49 metrics specified in each filter.
type MetricStreamFilter struct {

	// The names of the metrics to either include or exclude from the metric stream.
	//
	// If you omit this parameter, all metrics in the namespace are included or
	// excluded, depending on whether this filter is specified as an exclude filter or
	// an include filter.
	//
	// Each metric name can contain only ASCII printable characters (ASCII range 32
	// through 126). Each metric name must contain at least one non-whitespace
	// character.
	MetricNames []string

	// The name of the metric namespace for this filter.
	//
	// The namespace can contain only ASCII printable characters (ASCII range 32
	// through 126). It must contain at least one non-whitespace character.
	Namespace *string

	noSmithyDocumentSerde
}

// By default, a metric stream always sends the MAX , MIN , SUM , and SAMPLECOUNT
// statistics for each metric that is streamed. This structure contains information
// for one metric that includes additional statistics in the stream. For more
// information about statistics, see CloudWatch, listed in [CloudWatch statistics definitions].
//
// [CloudWatch statistics definitions]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Statistics-definitions.html.html
type MetricStreamStatisticsConfiguration struct {

	// The list of additional statistics that are to be streamed for the metrics
	// listed in the IncludeMetrics array in this structure. This list can include as
	// many as 20 statistics.
	//
	// If the OutputFormat for the stream is opentelemetry1.0 or opentelemetry0.7 , the
	// only valid values are p??  percentile statistics such as p90 , p99 and so on.
	//
	// If the OutputFormat for the stream is json , the valid values include the
	// abbreviations for all of the statistics listed in [CloudWatch statistics definitions]. For example, this includes
	// tm98, wm90 , PR(:300) , and so on.
	//
	// [CloudWatch statistics definitions]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Statistics-definitions.html.html
	//
	// This member is required.
	AdditionalStatistics []string

	// An array of metric name and namespace pairs that stream the additional
	// statistics listed in the value of the AdditionalStatistics parameter. There can
	// be as many as 100 pairs in the array.
	//
	// All metrics that match the combination of metric name and namespace will be
	// streamed with the additional statistics, no matter their dimensions.
	//
	// This member is required.
	IncludeMetrics []MetricStreamStatisticsMetric

	noSmithyDocumentSerde
}

// This object contains the information for one metric that is to be streamed with
// additional statistics.
type MetricStreamStatisticsMetric struct {

	// The name of the metric.
	//
	// This member is required.
	MetricName *string

	// The namespace of the metric.
	//
	// This member is required.
	Namespace *string

	noSmithyDocumentSerde
}

// Specifies which alarms an alarm mute rule applies to.
//
// You can target up to 100 specific alarms by name. When a mute rule is active,
// the targeted alarms continue to evaluate metrics and transition between states,
// but their configured actions are muted.
type MuteTargets struct {

	// The list of alarm names that this mute rule targets. You can specify up to 100
	// alarm names.
	//
	// Each alarm name must be between 1 and 255 characters in length. The alarm names
	// must match existing alarms in your Amazon Web Services account and region.
	//
	// This member is required.
	AlarmNames []string

	noSmithyDocumentSerde
}

// This array is empty if the API operation was successful for all the rules
// specified in the request. If the operation could not process one of the rules,
// the following data is returned for each of those rules.
type PartialFailure struct {

	// The type of error.
	ExceptionType *string

	// The code of the error.
	FailureCode *string

	// A description of the error.
	FailureDescription *string

	// The specified rule that could not be deleted.
	FailureResource *string

	noSmithyDocumentSerde
}

// Specifies one range of days or times to exclude from use for training an
// anomaly detection model.
type Range struct {

	// The end time of the range to exclude. The format is yyyy-MM-dd'T'HH:mm:ss . For
	// example, 2019-07-01T23:59:59 .
	//
	// This member is required.
	EndTime *time.Time

	// The start time of the range to exclude. The format is yyyy-MM-dd'T'HH:mm:ss .
	// For example, 2019-07-01T23:59:59 .
	//
	// This member is required.
	StartTime *time.Time

	noSmithyDocumentSerde
}

// Defines the schedule configuration for an alarm mute rule.
//
// The rule contains a schedule that specifies when and how long alarms should be
// muted. The schedule can be a recurring pattern using cron expressions or a
// one-time mute window using at expressions.
type Rule struct {

	// The schedule configuration that defines when the mute rule activates and how
	// long it remains active.
	//
	// This member is required.
	Schedule *Schedule

	noSmithyDocumentSerde
}

// Specifies when and how long an alarm mute rule is active.
//
// The schedule uses either a cron expression for recurring mute windows or an at
// expression for one-time mute windows. When the schedule activates, the mute rule
// mutes alarm actions for the specified duration.
type Schedule struct {

	// The length of time that alarms remain muted when the schedule activates. The
	// duration must be between 1 and 50 characters in length.
	//
	// Specify the duration using ISO 8601 duration format with a minimum of 1 minute (
	// PT1M ) and maximum of 15 days ( P15D ).
	//
	// Examples:
	//
	//   - PT4H - 4 hours for weekly system maintenance
	//
	//   - P2DT12H - 2 days and 12 hours for weekend muting from Friday 6:00 PM to
	//   Monday 6:00 AM
	//
	//   - PT6H - 6 hours for monthly database maintenance
	//
	//   - PT2H - 2 hours for nightly backup operations
	//
	//   - P7D - 7 days for annual company shutdown
	//
	// The duration begins when the schedule expression time is reached. For recurring
	// schedules, the duration applies to each occurrence.
	//
	// This member is required.
	Duration *string

	// The schedule expression that defines when the mute rule activates. The
	// expression must be between 1 and 256 characters in length.
	//
	// You can use one of two expression formats:
	//
	//   - Cron expressions - For recurring mute windows. Format: cron(Minutes Hours
	//   Day-of-month Month Day-of-week)
	//
	// Examples:
	//
	//   - cron(0 2 * * *) - Activates daily at 2:00 AM
	//
	//   - cron(0 2 * * SUN) - Activates every Sunday at 2:00 AM for weekly system
	//   maintenance
	//
	//   - cron(0 1 1 * *) - Activates on the first day of each month at 1:00 AM for
	//   monthly database maintenance
	//
	//   - cron(0 18 * * FRI) - Activates every Friday at 6:00 PM
	//
	//   - cron(0 23 * * *) - Activates every day at 11:00 PM during nightly backup
	//   operations
	//
	// The characters * , - , and , are supported in all fields. English names can be
	//   used for the month (JAN-DEC) and day of week (SUN-SAT) fields.
	//
	//   - At expressions - For one-time mute windows. Format: at(yyyy-MM-ddThh:mm)
	//
	// Examples:
	//
	//   - at(2024-05-10T14:00) - Activates once on May 10, 2024 at 2:00 PM during an
	//   active incident response session
	//
	//   - at(2024-12-23T00:00) - Activates once on December 23, 2024 at midnight
	//   during annual company shutdown
	//
	// This member is required.
	Expression *string

	// The time zone to use when evaluating the schedule expression. The time zone
	// must be between 1 and 50 characters in length.
	//
	// Specify the time zone using standard timezone identifiers (for example,
	// America/New_York , Europe/London , or Asia/Tokyo ).
	//
	// If you don't specify a time zone, UTC is used by default. The time zone affects
	// how cron and at expressions are interpreted, as well as start and expire dates
	// you specify
	//
	// Examples:
	//
	//   - America/New_York - Eastern Time (US)
	//
	//   - America/Los_Angeles - Pacific Time (US)
	//
	//   - Europe/London - British Time
	//
	//   - Asia/Tokyo - Japan Standard Time
	//
	//   - UTC - Coordinated Universal Time
	Timezone *string

	noSmithyDocumentSerde
}

// Contains the schedule expression and time-range offsets that define when a
// scheduled query runs and what time range each execution covers.
type ScheduleConfiguration struct {

	// The schedule expression that defines how often the underlying CloudWatch Logs
	// scheduled query runs. Specify a rate() expression, for example rate(5 minutes) .
	//
	// This member is required.
	ScheduleExpression *string

	// The offset, in seconds, before the scheduled execution time at which the query
	// time range ends. Must be non-negative and less than StartTimeOffset . The
	// default is 0.
	EndTimeOffset *int64

	// The offset, in seconds, before the scheduled execution time at which the query
	// time range begins. For example, an offset of 360 (6 minutes) on a query running
	// at 12:05:00 starts the query time range at 11:59:00.
	StartTimeOffset *int64

	noSmithyDocumentSerde
}

// The configuration of the CloudWatch Logs scheduled query that backs a log alarm.
type ScheduledQueryConfiguration struct {

	// The expression that defines how to aggregate query results into one or more
	// scalar values for alarm evaluation. For example, count(*) or avg(latency) by
	// host | sort desc . Length constraints: minimum 1 character, maximum 2048
	// characters.
	//
	// This member is required.
	AggregationExpression *string

	// The CloudWatch Logs query to execute on each scheduled run. Length constraints:
	// maximum of 10,000 characters.
	//
	// This member is required.
	QueryString *string

	// The schedule and time-range offset configuration for the underlying scheduled
	// query.
	//
	// This member is required.
	ScheduleConfiguration *ScheduleConfiguration

	// The Amazon Resource Name (ARN) of the IAM role that CloudWatch assumes when
	// executing the scheduled query against the configured log groups.
	//
	// This member is required.
	ScheduledQueryRoleARN *string

	// The log groups to query. Each entry can be a log group name or ARN. Use the ARN
	// form when querying log groups in a different account (for example, when running
	// cross-account queries from a monitoring account). The list must contain between
	// 1 and 50 entries.
	LogGroupIdentifiers []string

	// The Amazon Resource Name (ARN) of the CloudWatch Logs scheduled query that the
	// alarm uses. This field is populated in DescribeAlarms responses.
	QueryARN *string

	// A list of key-value pairs to associate with the underlying scheduled query
	// resource.
	Tags []Tag

	noSmithyDocumentSerde
}

// Designates the CloudWatch metric and statistic that provides the time series
// the anomaly detector uses as input. If you have enabled unified cross-account
// observability, and this account is a monitoring account, the metric can be in
// the same account or a source account.
type SingleMetricAnomalyDetector struct {

	// If the CloudWatch metric that provides the time series that the anomaly
	// detector uses as input is in another account, specify that account ID here. If
	// you omit this parameter, the current account is used.
	AccountId *string

	// The metric dimensions to create the anomaly detection model for.
	Dimensions []Dimension

	// The name of the metric to create the anomaly detection model for.
	MetricName *string

	// The namespace of the metric to create the anomaly detection model for.
	Namespace *string

	// The statistic to use for the metric and anomaly detection model.
	Stat *string

	noSmithyDocumentSerde
}

// An evaluation window that advances each time the alarm is evaluated, forming a
// rolling time window. This is the default evaluation window. A sliding window has
// no additional configuration options.
//
// Choose a sliding window when you need the fastest detection and the calendar
// boundaries of the data don't matter, such as for continuous performance,
// latency, or resource-exhaustion monitoring.
type SlidingWindow struct {
	noSmithyDocumentSerde
}

// Represents a set of statistics that describes a specific metric.
type StatisticSet struct {

	// The maximum value of the sample set.
	//
	// This member is required.
	Maximum *float64

	// The minimum value of the sample set.
	//
	// This member is required.
	Minimum *float64

	// The number of samples used for the statistic set.
	//
	// This member is required.
	SampleCount *float64

	// The sum of values for the sample set.
	//
	// This member is required.
	Sum *float64

	noSmithyDocumentSerde
}

// A key-value pair associated with a CloudWatch resource.
type Tag struct {

	// 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.
	//
	// This member is required.
	Key *string

	// The value for the specified tag key.
	//
	// This member is required.
	Value *string

	noSmithyDocumentSerde
}

// An evaluation window that aligns the evaluated range to fixed clock boundaries
// that match the alarm's period, such as the top of the hour, midnight, or the
// start of the calendar week, optionally in a specific time zone.
//
// When you use a wall clock window, the alarm's period must be 1 minute (60
// seconds), 5 minutes (300 seconds), 1 hour (3,600 seconds), 1 day (86,400
// seconds), or 1 week (604,800 seconds). Other period values aren't supported with
// a wall clock window.
//
// Choose a wall clock window when your monitoring is tied to a business or
// calendar period, such as daily reports, batch jobs, or backups, or when you want
// alarm evaluations to match the periods shown on a metric dashboard.
type WallClockWindow struct {

	// The time zone to use when the alarm aligns the evaluation window to clock
	// boundaries. You can specify an IANA time zone name (for example,
	// America/New_York ), a fixed UTC offset (for example, +05:30 ), or an
	// offset-prefixed identifier (for example, UTC+05:30 ). The offset must be aligned
	// to a multiple of 5 minutes. If you don't specify a time zone, CloudWatch uses
	// UTC .
	//
	// The time zone affects window alignment for all periods, including periods of
	// one hour or shorter.
	Timezone *string

	noSmithyDocumentSerde
}

type noSmithyDocumentSerde = smithydocument.NoSerde

// UnknownUnionMember is returned when a union member is returned over the wire,
// but has an unknown tag.
type UnknownUnionMember struct {
	Tag   string
	Value []byte

	noSmithyDocumentSerde
}

func (*UnknownUnionMember) isEvaluationCriteria() {}
func (*UnknownUnionMember) isEvaluationWindow()   {}
