Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions src/classes/public/Webhooks/GitHubWebhookRedelivery.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
class GitHubWebhookRedelivery : GitHubWebhook {
# Number of attempts to deliver the webhook.
[int] $Attempts

# Simple parameterless constructor
GitHubWebhookRedelivery() {}

# Creates a context object from a hashtable of key-vaule pairs.
GitHubWebhookRedelivery([hashtable]$Properties) {
foreach ($Property in $Properties.Keys) {
$this.$Property = $Properties.$Property
}
}

# Creates a context object from a PSCustomObject.
GitHubWebhookRedelivery([PSCustomObject]$Object) {
$Object.PSObject.Properties | ForEach-Object {
$this.($_.Name) = $_.Value
}
}
}
120 changes: 120 additions & 0 deletions src/formats/GitHubWebhookRedelivery.format.ps1xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<Configuration>
<ViewDefinitions>
<!-- Table View -->
<View>
<Name>GitHubWebhookRedeliveryTable</Name>
<ViewSelectedBy>
<TypeName>GitHubWebhookRedelivery</TypeName>
</ViewSelectedBy>
<TableControl>
<TableHeaders>
<TableColumnHeader>
<Label>A </Label>
</TableColumnHeader>
<TableColumnHeader>
<Label>ID</Label>
</TableColumnHeader>
<TableColumnHeader>
<Label>GUID</Label>
</TableColumnHeader>
<TableColumnHeader>
<Label>Event</Label>
</TableColumnHeader>
<TableColumnHeader>
<Label>StatusCode</Label>
</TableColumnHeader>
<TableColumnHeader>
<Label>DeliveredAt</Label>
</TableColumnHeader>
<TableColumnHeader>
<Label>Duration(s)</Label>
</TableColumnHeader>
</TableHeaders>
<TableRowEntries>
<TableRowEntry>
<TableColumnItems>
<TableColumnItem>
<PropertyName>Attempts</PropertyName>
</TableColumnItem>
<TableColumnItem>
<PropertyName>ID</PropertyName>
</TableColumnItem>
<TableColumnItem>
<PropertyName>GUID</PropertyName>
</TableColumnItem>
<TableColumnItem>
<PropertyName>Event</PropertyName>
</TableColumnItem>
<TableColumnItem>
<PropertyName>StatusCode</PropertyName>
</TableColumnItem>
<TableColumnItem>
<PropertyName>DeliveredAt</PropertyName>
</TableColumnItem>
<TableColumnItem>
<PropertyName>Duration</PropertyName>
</TableColumnItem>
</TableColumnItems>
</TableRowEntry>
</TableRowEntries>
</TableControl>
</View>

<!-- List View -->
<View>
<Name>GitHubWebhookRedeliveryList</Name>
<ViewSelectedBy>
<TypeName>GitHubWebhookRedelivery</TypeName>
</ViewSelectedBy>
<ListControl>
<ListEntries>
<ListEntry>
<ListItems>
<ListItem>
<Label>Attempts</Label>
<PropertyName>Attempts</PropertyName>
</ListItem>
<ListItem>
<Label>ID</Label>
<PropertyName>ID</PropertyName>
</ListItem>
<ListItem>
<Label>GUID</Label>
<PropertyName>GUID</PropertyName>
</ListItem>
<ListItem>
<Label>DeliveredAt</Label>
<PropertyName>DeliveredAt</PropertyName>
</ListItem>
<ListItem>
<Label>Redelivery</Label>
<PropertyName>Redelivery</PropertyName>
</ListItem>
<ListItem>
<Label>Duration (s)</Label>
<PropertyName>Duration</PropertyName>
</ListItem>
<ListItem>
<Label>Status</Label>
<PropertyName>Status</PropertyName>
</ListItem>
<ListItem>
<Label>StatusCode</Label>
<PropertyName>StatusCode</PropertyName>
</ListItem>
<ListItem>
<Label>Event</Label>
<PropertyName>Event</PropertyName>
</ListItem>
<ListItem>
<Label>Action</Label>
<PropertyName>Action</PropertyName>
</ListItem>
</ListItems>
</ListEntry>
</ListEntries>
</ListControl>
</View>
</ViewDefinitions>
</Configuration>
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
function Get-GitHubAppWebhookDeliveryToRedeliver {
<#
.SYNOPSIS
Short description

.DESCRIPTION
Long description

.EXAMPLE
An example

.NOTES
[Ttle](link)
#>
[CmdletBinding()]
param(
# The timespan to check for redeliveries in hours.
[Parameter()]
[int] $TimeSpan = -2,

# The number of results per page (max 100).
[Parameter()]
[ValidateRange(0, 100)]
[int] $PerPage,

# The context to run the command in. Used to get the details for the API call.
# Can be either a string or a GitHubContext object.
[Parameter()]
[object] $Context = (Get-GitHubContext)
)

begin {
$stackPath = Get-PSCallStackPath
Write-Debug "[$stackPath] - Start"
$Context = Resolve-GitHubContext -Context $Context
Assert-GitHubContext -Context $Context -AuthType APP
}

process {
try {
$checkPoint = (Get-Date).AddHours($TimeSpan)
Get-GitHubAppWebhookDeliveryByList -Context $Context -PerPage $PerPage | Where-Object { $_.DeliveredAt -gt $checkPoint } |
Group-Object -Property GUID | Where-Object { $_.Group.Status -notcontains 'OK' } | ForEach-Object {
$refObject = $_.Group | Sort-Object -Property DeliveredAt
[GitHubWebhookRedelivery]@{
Attempts = $_.Count
GUID = $_.Name
Status = $refObject.Status
StatusCode = $refObject.StatusCode
Event = $refObject.Event
Action = $refObject.Action
Duration = $_.Group.Duration | Measure-Object -Average | Select-Object -ExpandProperty Average
ID = $refObject.ID
DeliveredAt = $refObject.DeliveredAt
Redelivery = $refObject.Redelivery
InstallationID = $refObject.InstallationID
RepositoryID = $refObject.RepositoryID
ThrottledAt = $refObject.ThrottledAt
URL = $refObject.URL
Request = $refObject.Request
Response = $refObject.Response
}
}
} catch {
throw $_
}
}

end {
Write-Debug "[$commandName] - End"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,18 +24,32 @@
[Get a webhook configuration for an app](https://docs.github.com/rest/apps/webhooks#get-a-webhook-configuration-for-an-app)
#>
[OutputType([GitHubWebhook[]])]
[CmdletBinding(DefaultParameterSetName = '__AllParameterSets')]
[CmdletBinding(DefaultParameterSetName = 'ByList')]
param(
# The ID of the delivery.
[Parameter(
Mandatory,
ParameterSetName = 'ByID',
ValueFromPipeline,
ValueFromPipelineByPropertyName
ParameterSetName = 'ByID'
)]
[Alias('DeliveryID', 'delivery_id')]
[string] $ID,

# Only the ones to redeliver.
[Parameter(
Mandatory,
ParameterSetName = 'Redelivery')]
[switch] $NeedingRedelivery,

# The timespan to check for redeliveries in hours.
[Parameter(ParameterSetName = 'Redelivery')]
[int] $TimeSpan = -2,

# The number of results per page (max 100).
[Parameter(ParameterSetName = 'ByList')]
[Parameter(ParameterSetName = 'Redelivery')]
[ValidateRange(0, 100)]
[int] $PerPage,

# The context to run the command in. Used to get the details for the API call.
# Can be either a string or a GitHubContext object.
[Parameter()]
Expand All @@ -53,10 +67,16 @@
try {
switch ($PSCmdlet.ParameterSetName) {
'ByID' {
Write-Debug "ByID: [$ID]"
Get-GitHubAppWebhookDeliveryByID -ID $ID -Context $Context
}
'__AllParameterSets' {
Get-GitHubAppWebhookDeliveryByList -Context $Context
'Redelivery' {
Write-Debug "Redelivery: [$NeedingRedelivery]"
Get-GitHubAppWebhookDeliveryToRedeliver -Context $Context -PerPage $PerPage -TimeSpan $TimeSpan
}
'ByList' {
Write-Debug 'ByList'
Get-GitHubAppWebhookDeliveryByList -Context $Context -PerPage $PerPage
}
}
} catch {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
function Redeliver-GitHubAppWebhookDelivery {
function Invoke-GitHubAppWebhookReDelivery {
<#
.SYNOPSIS
Redeliver a delivery for an app webhook
Expand All @@ -10,14 +10,15 @@
to access this endpoint.

.EXAMPLE
Redeliver-GitHubAppWebhookDelivery -ID 12345
Invoke-GitHubAppWebhookReDelivery -ID 12345

Redelivers the delivery with the ID `12345`.

.NOTES
[Redeliver a delivery for an app webhook](https://docs.github.com/rest/apps/webhooks#redeliver-a-delivery-for-an-app-webhook)
#>
[OutputType([void])]
[Alias('Redeliver-GitHubAppWebhookDelivery')]
[CmdletBinding(SupportsShouldProcess)]
[Diagnostics.CodeAnalysis.SuppressMessageAttribute(
'PSUseApprovedVerbs', '', Scope = 'Function',
Expand Down
6 changes: 3 additions & 3 deletions tools/utilities/New-FunctionTemplate.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@
)

begin {
$commandName = $MyInvocation.MyCommand.Name
Write-Debug "[$commandName] - Start"
$stackPath = Get-PSCallStackPath
Write-Debug "[$stackPath] - Start"
$Context = Resolve-GitHubContext -Context $Context
Assert-GitHubContext -Context $Context -AuthType IAT, PAT, UAT

Expand Down Expand Up @@ -76,7 +76,7 @@
}

end {
Write-Debug "[$commandName] - End"
Write-Debug "[$stackPath] - End"
}

clean {
Expand Down