/*******************************************************************************
* Copyright 2012-2019 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.
* *****************************************************************************
*
* AWS Tools for Windows (TM) PowerShell (TM)
*
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Management.Automation;
using System.Text;
using Amazon.PowerShell.Common;
using Amazon.Runtime;
using Amazon.Neptune;
using Amazon.Neptune.Model;
namespace Amazon.PowerShell.Cmdlets.NPT
{
///
/// Returns events related to DB instances, DB security groups, DB snapshots, and DB parameter
/// groups for the past 14 days. Events specific to a particular DB instance, DB security
/// group, database snapshot, or DB parameter group can be obtained by providing the name
/// as a parameter. By default, the past hour of events are returned.
This cmdlet automatically pages all available results to the pipeline - parameters related to iteration are only needed if you want to manually control the paginated output. To disable autopagination, use -NoAutoIteration.
///
[Cmdlet("Get", "NPTEvent")]
[OutputType("Amazon.Neptune.Model.Event")]
[AWSCmdlet("Calls the Amazon Neptune DescribeEvents API operation.", Operation = new[] {"DescribeEvents"}, SelectReturnType = typeof(Amazon.Neptune.Model.DescribeEventsResponse))]
[AWSCmdletOutput("Amazon.Neptune.Model.Event or Amazon.Neptune.Model.DescribeEventsResponse",
"This cmdlet returns a collection of Amazon.Neptune.Model.Event objects.",
"The service call response (type Amazon.Neptune.Model.DescribeEventsResponse) can also be referenced from properties attached to the cmdlet entry in the $AWSHistory stack."
)]
public partial class GetNPTEventCmdlet : AmazonNeptuneClientCmdlet, IExecutor
{
#region Parameter Duration
///
///
/// The number of minutes to retrieve events for.Default: 60
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
public System.Int32? Duration { get; set; }
#endregion
#region Parameter EndTimeUtc
///
///
/// The end of the time interval for which to retrieve events, specified in ISO 8601
/// format. For more information about ISO 8601, go to the ISO8601
/// Wikipedia page.Example: 2009-07-08T18:00Z
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
public System.DateTime? EndTimeUtc { get; set; }
#endregion
#region Parameter EventCategory
///
///
/// A list of event categories that trigger notifications for a event notification subscription.
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
[Alias("EventCategories")]
public System.String[] EventCategory { get; set; }
#endregion
#region Parameter Filter
///
///
/// This parameter is not currently supported.
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
[Alias("Filters")]
public Amazon.Neptune.Model.Filter[] Filter { get; set; }
#endregion
#region Parameter SourceIdentifier
///
///
/// The identifier of the event source for which events are returned. If not specified,
/// then all sources are included in the response.Constraints:- If SourceIdentifier is supplied, SourceType must also be provided.
- If the source type is
DBInstance
, then a DBInstanceIdentifier
/// must be supplied. - If the source type is
DBSecurityGroup
, a DBSecurityGroupName
/// must be supplied. - If the source type is
DBParameterGroup
, a DBParameterGroupName
/// must be supplied. - If the source type is
DBSnapshot
, a DBSnapshotIdentifier
/// must be supplied. - Cannot end with a hyphen or contain two consecutive hyphens.
///
///
[System.Management.Automation.Parameter(Position = 0, ValueFromPipelineByPropertyName = true, ValueFromPipeline = true)]
public System.String SourceIdentifier { get; set; }
#endregion
#region Parameter SourceType
///
///
/// The event source to retrieve events for. If no value is specified, all events are
/// returned.
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
[AWSConstantClassSource("Amazon.Neptune.SourceType")]
public Amazon.Neptune.SourceType SourceType { get; set; }
#endregion
#region Parameter StartTimeUtc
///
///
/// The beginning of the time interval to retrieve events for, specified in ISO 8601
/// format. For more information about ISO 8601, go to the ISO8601
/// Wikipedia page.Example: 2009-07-08T18:00Z
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
public System.DateTime? StartTimeUtc { get; set; }
#endregion
#region Parameter EndTime
///
///
/// This property is deprecated. Setting this property results in non-UTC DateTimes not
/// being marshalled correctly. Use EndTimeUtc instead. Setting either EndTime or EndTimeUtc
/// results in both EndTime and EndTimeUtc being assigned, the latest assignment to either
/// one of the two property is reflected in the value of both. EndTime is provided for
/// backwards compatibility only and assigning a non-Utc DateTime to it results in the
/// wrong timestamp being passed to the service. The end of the time interval for which to retrieve events, specified in ISO 8601
/// format. For more information about ISO 8601, go to the ISO8601
/// Wikipedia page.Example: 2009-07-08T18:00Z
///
/// This parameter is deprecated.
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
[System.ObsoleteAttribute("Setting this property results in non-UTC DateTimes not being marshalled correctly. Use EndTimeUtc instead. Setting either EndTime or EndTimeUtc results in both EndTime and EndTimeUtc being assigned, the latest assignment to either one of the two property is reflected in the value of both. EndTime is provided for backwards compatibility only and assigning a non-Utc DateTime to it results in the wrong timestamp being passed to the service.")]
public System.DateTime? EndTime { get; set; }
#endregion
#region Parameter Marker
///
///
/// An optional pagination token provided by a previous DescribeEvents request. If this
/// parameter is specified, the response includes only records beyond the marker, up to
/// the value specified by MaxRecords
.
///
///
///
Note: This parameter is only used if you are manually controlling output pagination of the service API call.
///
In order to manually control output pagination, use '-Marker $null' for the first call and '-Marker $AWSHistory.LastServiceResponse.Marker' for subsequent calls.
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
[Alias("NextToken")]
public System.String Marker { get; set; }
#endregion
#region Parameter MaxRecord
///
///
/// The maximum number of records to include in the response. If more records exist than
/// the specified MaxRecords
value, a pagination token called a marker is
/// included in the response so that the remaining results can be retrieved.Default: 100Constraints: Minimum 20, maximum 100.
///
///
///
Note: In AWSPowerShell and AWSPowerShell.NetCore this parameter is used to limit the total number of items returned by the cmdlet.
///
In AWS.Tools this parameter is simply passed to the service to specify how many items should be returned by each service call.
///
Pipe the output of this cmdlet into Select-Object -First to terminate retrieving data pages early and control the number of items returned.
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
[Alias("MaxItems","MaxRecords")]
public int? MaxRecord { get; set; }
#endregion
#region Parameter StartTime
///
///
/// This property is deprecated. Setting this property results in non-UTC DateTimes not
/// being marshalled correctly. Use StartTimeUtc instead. Setting either StartTime or
/// StartTimeUtc results in both StartTime and StartTimeUtc being assigned, the latest
/// assignment to either one of the two property is reflected in the value of both. StartTime
/// is provided for backwards compatibility only and assigning a non-Utc DateTime to it
/// results in the wrong timestamp being passed to the service. The beginning of the time interval to retrieve events for, specified in ISO 8601
/// format. For more information about ISO 8601, go to the ISO8601
/// Wikipedia page.Example: 2009-07-08T18:00Z
///
/// This parameter is deprecated.
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
[System.ObsoleteAttribute("Setting this property results in non-UTC DateTimes not being marshalled correctly. Use StartTimeUtc instead. Setting either StartTime or StartTimeUtc results in both StartTime and StartTimeUtc being assigned, the latest assignment to either one of the two property is reflected in the value of both. StartTime is provided for backwards compatibility only and assigning a non-Utc DateTime to it results in the wrong timestamp being passed to the service.")]
public System.DateTime? StartTime { get; set; }
#endregion
#region Parameter Select
///
/// Use the -Select parameter to control the cmdlet output. The default value is 'Events'.
/// Specifying -Select '*' will result in the cmdlet returning the whole service response (Amazon.Neptune.Model.DescribeEventsResponse).
/// Specifying the name of a property of type Amazon.Neptune.Model.DescribeEventsResponse will result in that property being returned.
/// Specifying -Select '^ParameterName' will result in the cmdlet returning the selected cmdlet parameter value.
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
public string Select { get; set; } = "Events";
#endregion
#region Parameter PassThru
///
/// Changes the cmdlet behavior to return the value passed to the SourceIdentifier parameter.
/// The -PassThru parameter is deprecated, use -Select '^SourceIdentifier' instead. This parameter will be removed in a future version.
///
[System.Obsolete("The -PassThru parameter is deprecated, use -Select '^SourceIdentifier' instead. This parameter will be removed in a future version.")]
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
public SwitchParameter PassThru { get; set; }
#endregion
#region Parameter NoAutoIteration
///
/// By default the cmdlet will auto-iterate and retrieve all results to the pipeline by performing multiple
/// service calls. If set, the cmdlet will retrieve only the next 'page' of results using the value of Marker
/// as the start point.
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
public SwitchParameter NoAutoIteration { get; set; }
#endregion
protected override void ProcessRecord()
{
this._AWSSignerType = "v4";
base.ProcessRecord();
var context = new CmdletContext();
// allow for manipulation of parameters prior to loading into context
PreExecutionContextLoad(context);
#pragma warning disable CS0618, CS0612 //A class member was marked with the Obsolete attribute
if (ParameterWasBound(nameof(this.Select)))
{
context.Select = CreateSelectDelegate(Select) ??
throw new System.ArgumentException("Invalid value for -Select parameter.", nameof(this.Select));
if (this.PassThru.IsPresent)
{
throw new System.ArgumentException("-PassThru cannot be used when -Select is specified.", nameof(this.Select));
}
}
else if (this.PassThru.IsPresent)
{
context.Select = (response, cmdlet) => this.SourceIdentifier;
}
#pragma warning restore CS0618, CS0612 //A class member was marked with the Obsolete attribute
context.Duration = this.Duration;
context.EndTimeUtc = this.EndTimeUtc;
if (this.EventCategory != null)
{
context.EventCategory = new List(this.EventCategory);
}
if (this.Filter != null)
{
context.Filter = new List(this.Filter);
}
context.Marker = this.Marker;
context.MaxRecord = this.MaxRecord;
#if !MODULAR
if (ParameterWasBound(nameof(this.MaxRecord)) && this.MaxRecord.HasValue)
{
WriteWarning("AWSPowerShell and AWSPowerShell.NetCore use the MaxRecord parameter to limit the total number of items returned by the cmdlet." +
" This behavior is obsolete and will be removed in a future version of these modules. Pipe the output of this cmdlet into Select-Object -First to terminate" +
" retrieving data pages early and control the number of items returned. AWS.Tools already implements the new behavior of simply passing MaxRecord" +
" to the service to specify how many items should be returned by each service call.");
}
#endif
context.SourceIdentifier = this.SourceIdentifier;
context.SourceType = this.SourceType;
context.StartTimeUtc = this.StartTimeUtc;
#pragma warning disable CS0618, CS0612 //A class member was marked with the Obsolete attribute
context.EndTime = this.EndTime;
#pragma warning restore CS0618, CS0612 //A class member was marked with the Obsolete attribute
#pragma warning disable CS0618, CS0612 //A class member was marked with the Obsolete attribute
context.StartTime = this.StartTime;
#pragma warning restore CS0618, CS0612 //A class member was marked with the Obsolete attribute
// allow further manipulation of loaded context prior to processing
PostExecutionContextLoad(context);
var output = Execute(context) as CmdletOutput;
ProcessOutput(output);
}
#region IExecutor Members
#if MODULAR
public object Execute(ExecutorContext context)
{
var cmdletContext = context as CmdletContext;
#pragma warning disable CS0618, CS0612 //A class member was marked with the Obsolete attribute
var useParameterSelect = this.Select.StartsWith("^") || this.PassThru.IsPresent;
#pragma warning restore CS0618, CS0612 //A class member was marked with the Obsolete attribute
// create request and set iteration invariants
var request = new Amazon.Neptune.Model.DescribeEventsRequest();
if (cmdletContext.Duration != null)
{
request.Duration = cmdletContext.Duration.Value;
}
if (cmdletContext.EndTimeUtc != null)
{
request.EndTimeUtc = cmdletContext.EndTimeUtc.Value;
}
if (cmdletContext.EventCategory != null)
{
request.EventCategories = cmdletContext.EventCategory;
}
if (cmdletContext.Filter != null)
{
request.Filters = cmdletContext.Filter;
}
if (cmdletContext.MaxRecord != null)
{
request.MaxRecords = AutoIterationHelpers.ConvertEmitLimitToServiceTypeInt32(cmdletContext.MaxRecord.Value);
}
if (cmdletContext.SourceIdentifier != null)
{
request.SourceIdentifier = cmdletContext.SourceIdentifier;
}
if (cmdletContext.SourceType != null)
{
request.SourceType = cmdletContext.SourceType;
}
if (cmdletContext.StartTimeUtc != null)
{
request.StartTimeUtc = cmdletContext.StartTimeUtc.Value;
}
#pragma warning disable CS0618, CS0612 //A class member was marked with the Obsolete attribute
if (cmdletContext.EndTime != null)
{
request.EndTime = cmdletContext.EndTime.Value;
}
#pragma warning restore CS0618, CS0612 //A class member was marked with the Obsolete attribute
#pragma warning disable CS0618, CS0612 //A class member was marked with the Obsolete attribute
if (cmdletContext.StartTime != null)
{
request.StartTime = cmdletContext.StartTime.Value;
}
#pragma warning restore CS0618, CS0612 //A class member was marked with the Obsolete attribute
// Initialize loop variant and commence piping
var _nextToken = cmdletContext.Marker;
var _userControllingPaging = this.NoAutoIteration.IsPresent || ParameterWasBound(nameof(this.Marker));
var client = Client ?? CreateClient(_CurrentCredentials, _RegionEndpoint);
do
{
request.Marker = _nextToken;
CmdletOutput output;
try
{
var response = CallAWSServiceOperation(client, request);
object pipelineOutput = null;
if (!useParameterSelect)
{
pipelineOutput = cmdletContext.Select(response, this);
}
output = new CmdletOutput
{
PipelineOutput = pipelineOutput,
ServiceResponse = response
};
_nextToken = response.Marker;
}
catch (Exception e)
{
output = new CmdletOutput { ErrorResponse = e };
}
ProcessOutput(output);
} while (!_userControllingPaging && AutoIterationHelpers.HasValue(_nextToken));
if (useParameterSelect)
{
WriteObject(cmdletContext.Select(null, this));
}
return null;
}
#else
public object Execute(ExecutorContext context)
{
var cmdletContext = context as CmdletContext;
var useParameterSelect = this.Select.StartsWith("^") || this.PassThru.IsPresent;
// create request and set iteration invariants
var request = new Amazon.Neptune.Model.DescribeEventsRequest();
if (cmdletContext.Duration != null)
{
request.Duration = cmdletContext.Duration.Value;
}
if (cmdletContext.EndTimeUtc != null)
{
request.EndTimeUtc = cmdletContext.EndTimeUtc.Value;
}
if (cmdletContext.EventCategory != null)
{
request.EventCategories = cmdletContext.EventCategory;
}
if (cmdletContext.Filter != null)
{
request.Filters = cmdletContext.Filter;
}
if (cmdletContext.SourceIdentifier != null)
{
request.SourceIdentifier = cmdletContext.SourceIdentifier;
}
if (cmdletContext.SourceType != null)
{
request.SourceType = cmdletContext.SourceType;
}
if (cmdletContext.StartTimeUtc != null)
{
request.StartTimeUtc = cmdletContext.StartTimeUtc.Value;
}
#pragma warning disable CS0618, CS0612 //A class member was marked with the Obsolete attribute
if (cmdletContext.EndTime != null)
{
request.EndTime = cmdletContext.EndTime.Value;
}
#pragma warning restore CS0618, CS0612 //A class member was marked with the Obsolete attribute
#pragma warning disable CS0618, CS0612 //A class member was marked with the Obsolete attribute
if (cmdletContext.StartTime != null)
{
request.StartTime = cmdletContext.StartTime.Value;
}
#pragma warning restore CS0618, CS0612 //A class member was marked with the Obsolete attribute
// Initialize loop variants and commence piping
System.String _nextToken = null;
int? _emitLimit = null;
int _retrievedSoFar = 0;
if (AutoIterationHelpers.HasValue(cmdletContext.Marker))
{
_nextToken = cmdletContext.Marker;
}
if (cmdletContext.MaxRecord.HasValue)
{
// The service has a maximum page size of 100. If the user has
// asked for more items than page max, and there is no page size
// configured, we rely on the service ignoring the set maximum
// and giving us 100 items back. If a page size is set, that will
// be used to configure the pagination.
// We'll make further calls to satisfy the user's request.
_emitLimit = cmdletContext.MaxRecord;
}
var _userControllingPaging = this.NoAutoIteration.IsPresent || ParameterWasBound(nameof(this.Marker));
var client = Client ?? CreateClient(_CurrentCredentials, _RegionEndpoint);
do
{
request.Marker = _nextToken;
if (_emitLimit.HasValue)
{
int correctPageSize = Math.Min(100, _emitLimit.Value);
request.MaxRecords = AutoIterationHelpers.ConvertEmitLimitToInt32(correctPageSize);
}
CmdletOutput output;
try
{
var response = CallAWSServiceOperation(client, request);
object pipelineOutput = null;
if (!useParameterSelect)
{
pipelineOutput = cmdletContext.Select(response, this);
}
output = new CmdletOutput
{
PipelineOutput = pipelineOutput,
ServiceResponse = response
};
int _receivedThisCall = response.Events.Count;
_nextToken = response.Marker;
_retrievedSoFar += _receivedThisCall;
if (_emitLimit.HasValue)
{
_emitLimit -= _receivedThisCall;
}
}
catch (Exception e)
{
if (_retrievedSoFar == 0 || !_emitLimit.HasValue)
{
output = new CmdletOutput { ErrorResponse = e };
}
else
{
break;
}
}
ProcessOutput(output);
} while (!_userControllingPaging && AutoIterationHelpers.HasValue(_nextToken) && (!_emitLimit.HasValue || _emitLimit.Value >= 1));
if (useParameterSelect)
{
WriteObject(cmdletContext.Select(null, this));
}
return null;
}
#endif
public ExecutorContext CreateContext()
{
return new CmdletContext();
}
#endregion
#region AWS Service Operation Call
private Amazon.Neptune.Model.DescribeEventsResponse CallAWSServiceOperation(IAmazonNeptune client, Amazon.Neptune.Model.DescribeEventsRequest request)
{
Utils.Common.WriteVerboseEndpointMessage(this, client.Config, "Amazon Neptune", "DescribeEvents");
try
{
#if DESKTOP
return client.DescribeEvents(request);
#elif CORECLR
return client.DescribeEventsAsync(request).GetAwaiter().GetResult();
#else
#error "Unknown build edition"
#endif
}
catch (AmazonServiceException exc)
{
var webException = exc.InnerException as System.Net.WebException;
if (webException != null)
{
throw new Exception(Utils.Common.FormatNameResolutionFailureMessage(client.Config, webException.Message), webException);
}
throw;
}
}
#endregion
internal partial class CmdletContext : ExecutorContext
{
public System.Int32? Duration { get; set; }
public System.DateTime? EndTimeUtc { get; set; }
public List EventCategory { get; set; }
public List Filter { get; set; }
public System.String Marker { get; set; }
public int? MaxRecord { get; set; }
public System.String SourceIdentifier { get; set; }
public Amazon.Neptune.SourceType SourceType { get; set; }
public System.DateTime? StartTimeUtc { get; set; }
[System.ObsoleteAttribute]
public System.DateTime? EndTime { get; set; }
[System.ObsoleteAttribute]
public System.DateTime? StartTime { get; set; }
public System.Func Select { get; set; } =
(response, cmdlet) => response.Events;
}
}
}