/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
/*
* Do not modify this file. This file is generated from the rum-2018-05-10.normal.json service model.
*/
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
using System.Text;
using System.IO;
using System.Net;
using Amazon.Runtime;
using Amazon.Runtime.Internal;
namespace Amazon.CloudWatchRUM.Model
{
///
/// Use this structure to define one extended metric or custom metric that RUM will send
/// to CloudWatch or CloudWatch Evidently. For more information, see
/// Additional metrics that you can send to CloudWatch and CloudWatch Evidently.
///
///
///
/// This structure is validated differently for extended metrics and custom metrics. For
/// extended metrics that are sent to the AWS/RUM
namespace, the following
/// validations apply:
///
/// -
///
/// The
Namespace
parameter must be omitted or set to AWS/RUM
.
///
/// -
///
/// Only certain combinations of values for
Name
, ValueKey
,
/// and EventPattern
are valid. In addition to what is displayed in the list
/// below, the EventPattern
can also include information used by the DimensionKeys
/// field.
///
/// -
///
/// If
Name
is PerformanceNavigationDuration
, then ValueKey
must
/// be event_details.duration
and the EventPattern
must include
/// {"event_type":["com.amazon.rum.performance_navigation_event"]}
///
/// -
///
/// If
Name
is PerformanceResourceDuration
, then ValueKey
must
/// be event_details.duration
and the EventPattern
must include
/// {"event_type":["com.amazon.rum.performance_resource_event"]}
///
/// -
///
/// If
Name
is NavigationSatisfiedTransaction
, then ValueKey
must
/// be null and the EventPattern
must include { "event_type": ["com.amazon.rum.performance_navigation_event"],
/// "event_details": { "duration": [{ "numeric": [">",2000] }] } }
///
/// -
///
/// If
Name
is NavigationToleratedTransaction
, then ValueKey
must
/// be null and the EventPattern
must include { "event_type": ["com.amazon.rum.performance_navigation_event"],
/// "event_details": { "duration": [{ "numeric": [">=",2000,"<"8000] }] } }
///
///
/// -
///
/// If
Name
is NavigationFrustratedTransaction
, then ValueKey
must
/// be null and the EventPattern
must include { "event_type": ["com.amazon.rum.performance_navigation_event"],
/// "event_details": { "duration": [{ "numeric": [">=",8000] }] } }
///
/// -
///
/// If
Name
is WebVitalsCumulativeLayoutShift
, then ValueKey
must
/// be event_details.value
and the EventPattern
must include
/// {"event_type":["com.amazon.rum.cumulative_layout_shift_event"]}
///
/// -
///
/// If
Name
is WebVitalsFirstInputDelay
, then ValueKey
must
/// be event_details.value
and the EventPattern
must include
/// {"event_type":["com.amazon.rum.first_input_delay_event"]}
///
/// -
///
/// If
Name
is WebVitalsLargestContentfulPaint
, then ValueKey
must
/// be event_details.value
and the EventPattern
must include
/// {"event_type":["com.amazon.rum.largest_contentful_paint_event"]}
///
/// -
///
/// If
Name
is JsErrorCount
, then ValueKey
must
/// be null and the EventPattern
must include {"event_type":["com.amazon.rum.js_error_event"]}
///
///
/// -
///
/// If
Name
is HttpErrorCount
, then ValueKey
must
/// be null and the EventPattern
must include {"event_type":["com.amazon.rum.http_event"]}
///
///
/// -
///
/// If
Name
is SessionCount
, then ValueKey
must
/// be null and the EventPattern
must include {"event_type":["com.amazon.rum.session_start_event"]}
///
///
///
///
/// For custom metrics, the following validation rules apply:
///
/// -
///
/// The namespace can't be omitted and can't be
AWS/RUM
. You can use the
/// AWS/RUM
namespace only for extended metrics.
///
/// -
///
/// All dimensions listed in the
DimensionKeys
field must be present in the
/// value of EventPattern
.
///
/// -
///
/// The values that you specify for
ValueKey
, EventPattern
,
/// and DimensionKeys
must be fields in RUM events, so all first-level keys
/// in these fields must be one of the keys in the list later in this section.
///
/// -
///
/// If you set a value for
EventPattern
, it must be a JSON object.
///
/// -
///
/// For every non-empty
event_details
, there must be a non-empty event_type
.
///
/// -
///
/// If
EventPattern
contains an event_details
field, it must
/// also contain an event_type
. For every built-in event_type
/// that you use, you must use a value for event_details
that corresponds
/// to that event_type
. For information about event details that correspond
/// to event types, see
/// RUM event details.
///
/// -
///
/// In
EventPattern
, any JSON array must contain only one value.
///
///
///
/// Valid key values for first-level keys in the ValueKey
, EventPattern
,
/// and DimensionKeys
fields:
///
/// -
///
///
account_id
///
/// -
///
///
application_Id
///
/// -
///
///
application_version
///
/// -
///
///
application_name
///
/// -
///
///
batch_id
///
/// -
///
///
event_details
///
/// -
///
///
event_id
///
/// -
///
///
event_interaction
///
/// -
///
///
event_timestamp
///
/// -
///
///
event_type
///
/// -
///
///
event_version
///
/// -
///
///
log_stream
///
/// -
///
///
metadata
///
/// -
///
///
sessionId
///
/// -
///
///
user_details
///
/// -
///
///
userId
///
///
///
public partial class MetricDefinitionRequest
{
private Dictionary _dimensionKeys = new Dictionary();
private string _eventPattern;
private string _name;
private string _awsNamespace;
private string _unitLabel;
private string _valueKey;
///
/// Gets and sets the property DimensionKeys.
///
/// Use this field only if you are sending the metric to CloudWatch.
///
///
///
/// This field is a map of field paths to dimension names. It defines the dimensions to
/// associate with this metric in CloudWatch. For extended metrics, valid values for the
/// entries in this field are the following:
///
/// -
///
///
"metadata.pageId": "PageId"
///
/// -
///
///
"metadata.browserName": "BrowserName"
///
/// -
///
///
"metadata.deviceType": "DeviceType"
///
/// -
///
///
"metadata.osName": "OSName"
///
/// -
///
///
"metadata.countryCode": "CountryCode"
///
/// -
///
///
"event_details.fileType": "FileType"
///
///
///
/// For both extended metrics and custom metrics, all dimensions listed in this field
/// must also be included in EventPattern
.
///
///
[AWSProperty(Min=0, Max=29)]
public Dictionary DimensionKeys
{
get { return this._dimensionKeys; }
set { this._dimensionKeys = value; }
}
// Check to see if DimensionKeys property is set
internal bool IsSetDimensionKeys()
{
return this._dimensionKeys != null && this._dimensionKeys.Count > 0;
}
///
/// Gets and sets the property EventPattern.
///
/// The pattern that defines the metric, specified as a JSON object. RUM checks events
/// that happen in a user's session against the pattern, and events that match the pattern
/// are sent to the metric destination.
///
///
///
/// When you define extended metrics, the metric definition is not valid if EventPattern
/// is omitted.
///
///
///
/// Example event patterns:
///
/// -
///
///
'{ "event_type": ["com.amazon.rum.js_error_event"], "metadata": { "browserName":
/// [ "Chrome", "Safari" ], } }'
///
/// -
///
///
'{ "event_type": ["com.amazon.rum.performance_navigation_event"], "metadata":
/// { "browserName": [ "Chrome", "Firefox" ] }, "event_details": { "duration": [{ "numeric":
/// [ "<", 2000 ] }] } }'
///
/// -
///
///
'{ "event_type": ["com.amazon.rum.performance_navigation_event"], "metadata":
/// { "browserName": [ "Chrome", "Safari" ], "countryCode": [ "US" ] }, "event_details":
/// { "duration": [{ "numeric": [ ">=", 2000, "<", 8000 ] }] } }'
///
///
///
/// If the metrics destination' is CloudWatch
and the event also matches
/// a value in DimensionKeys
, then the metric is published with the specified
/// dimensions.
///
///
[AWSProperty(Min=0, Max=4000)]
public string EventPattern
{
get { return this._eventPattern; }
set { this._eventPattern = value; }
}
// Check to see if EventPattern property is set
internal bool IsSetEventPattern()
{
return this._eventPattern != null;
}
///
/// Gets and sets the property Name.
///
/// The name for the metric that is defined in this structure. For custom metrics, you
/// can specify any name that you like. For extended metrics, valid values are the following:
///
/// -
///
///
PerformanceNavigationDuration
///
/// -
///
///
PerformanceResourceDuration
///
/// -
///
///
NavigationSatisfiedTransaction
///
/// -
///
///
NavigationToleratedTransaction
///
/// -
///
///
NavigationFrustratedTransaction
///
/// -
///
///
WebVitalsCumulativeLayoutShift
///
/// -
///
///
WebVitalsFirstInputDelay
///
/// -
///
///
WebVitalsLargestContentfulPaint
///
/// -
///
///
JsErrorCount
///
/// -
///
///
HttpErrorCount
///
/// -
///
///
SessionCount
///
///
///
[AWSProperty(Required=true, Min=1, Max=255)]
public string Name
{
get { return this._name; }
set { this._name = value; }
}
// Check to see if Name property is set
internal bool IsSetName()
{
return this._name != null;
}
///
/// Gets and sets the property Namespace.
///
/// If this structure is for a custom metric instead of an extended metrics, use this
/// parameter to define the metric namespace for that custom metric. Do not specify this
/// parameter if this structure is for an extended metric.
///
///
///
/// You cannot use any string that starts with AWS/
for your namespace.
///
///
[AWSProperty(Min=1, Max=237)]
public string Namespace
{
get { return this._awsNamespace; }
set { this._awsNamespace = value; }
}
// Check to see if Namespace property is set
internal bool IsSetNamespace()
{
return this._awsNamespace != null;
}
///
/// Gets and sets the property UnitLabel.
///
/// The CloudWatch metric unit to use for this metric. If you omit this field, the metric
/// is recorded with no unit.
///
///
[AWSProperty(Min=1, Max=256)]
public string UnitLabel
{
get { return this._unitLabel; }
set { this._unitLabel = value; }
}
// Check to see if UnitLabel property is set
internal bool IsSetUnitLabel()
{
return this._unitLabel != null;
}
///
/// Gets and sets the property ValueKey.
///
/// The field within the event object that the metric value is sourced from.
///
///
///
/// If you omit this field, a hardcoded value of 1 is pushed as the metric value. This
/// is useful if you just want to count the number of events that the filter catches.
///
///
///
///
/// If this metric is sent to CloudWatch Evidently, this field will be passed to Evidently
/// raw and Evidently will handle data extraction from the event.
///
///
[AWSProperty(Min=1, Max=280)]
public string ValueKey
{
get { return this._valueKey; }
set { this._valueKey = value; }
}
// Check to see if ValueKey property is set
internal bool IsSetValueKey()
{
return this._valueKey != null;
}
}
}