Skip to content

Commit 1b7a3b8

Browse files
🩹 [Patch]: Add a function to get webhook deliveries for an app that should be redelivered (#233)
## Description - Fixes 🩹 [Patch]: Add a function to get webhook deliveries for an app that should be redelivered #231 ## Type of change <!-- Use the check-boxes [x] on the options that are relevant. --> - [ ] 📖 [Docs] - [ ] 🪲 [Fix] - [x] 🩹 [Patch] - [ ] ⚠️ [Security fix] - [ ] 🚀 [Feature] - [ ] 🌟 [Breaking change] ## Checklist <!-- Use the check-boxes [x] on the options that are relevant. --> - [x] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas
1 parent a52f3d2 commit 1b7a3b8

File tree

6 files changed

+245
-11
lines changed

6 files changed

+245
-11
lines changed
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class GitHubWebhookRedelivery : GitHubWebhook {
2+
# Number of attempts to deliver the webhook.
3+
[int] $Attempts
4+
5+
# Simple parameterless constructor
6+
GitHubWebhookRedelivery() {}
7+
8+
# Creates a context object from a hashtable of key-vaule pairs.
9+
GitHubWebhookRedelivery([hashtable]$Properties) {
10+
foreach ($Property in $Properties.Keys) {
11+
$this.$Property = $Properties.$Property
12+
}
13+
}
14+
15+
# Creates a context object from a PSCustomObject.
16+
GitHubWebhookRedelivery([PSCustomObject]$Object) {
17+
$Object.PSObject.Properties | ForEach-Object {
18+
$this.($_.Name) = $_.Value
19+
}
20+
}
21+
}
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Configuration>
3+
<ViewDefinitions>
4+
<!-- Table View -->
5+
<View>
6+
<Name>GitHubWebhookRedeliveryTable</Name>
7+
<ViewSelectedBy>
8+
<TypeName>GitHubWebhookRedelivery</TypeName>
9+
</ViewSelectedBy>
10+
<TableControl>
11+
<TableHeaders>
12+
<TableColumnHeader>
13+
<Label>A </Label>
14+
</TableColumnHeader>
15+
<TableColumnHeader>
16+
<Label>ID</Label>
17+
</TableColumnHeader>
18+
<TableColumnHeader>
19+
<Label>GUID</Label>
20+
</TableColumnHeader>
21+
<TableColumnHeader>
22+
<Label>Event</Label>
23+
</TableColumnHeader>
24+
<TableColumnHeader>
25+
<Label>StatusCode</Label>
26+
</TableColumnHeader>
27+
<TableColumnHeader>
28+
<Label>DeliveredAt</Label>
29+
</TableColumnHeader>
30+
<TableColumnHeader>
31+
<Label>Duration(s)</Label>
32+
</TableColumnHeader>
33+
</TableHeaders>
34+
<TableRowEntries>
35+
<TableRowEntry>
36+
<TableColumnItems>
37+
<TableColumnItem>
38+
<PropertyName>Attempts</PropertyName>
39+
</TableColumnItem>
40+
<TableColumnItem>
41+
<PropertyName>ID</PropertyName>
42+
</TableColumnItem>
43+
<TableColumnItem>
44+
<PropertyName>GUID</PropertyName>
45+
</TableColumnItem>
46+
<TableColumnItem>
47+
<PropertyName>Event</PropertyName>
48+
</TableColumnItem>
49+
<TableColumnItem>
50+
<PropertyName>StatusCode</PropertyName>
51+
</TableColumnItem>
52+
<TableColumnItem>
53+
<PropertyName>DeliveredAt</PropertyName>
54+
</TableColumnItem>
55+
<TableColumnItem>
56+
<PropertyName>Duration</PropertyName>
57+
</TableColumnItem>
58+
</TableColumnItems>
59+
</TableRowEntry>
60+
</TableRowEntries>
61+
</TableControl>
62+
</View>
63+
64+
<!-- List View -->
65+
<View>
66+
<Name>GitHubWebhookRedeliveryList</Name>
67+
<ViewSelectedBy>
68+
<TypeName>GitHubWebhookRedelivery</TypeName>
69+
</ViewSelectedBy>
70+
<ListControl>
71+
<ListEntries>
72+
<ListEntry>
73+
<ListItems>
74+
<ListItem>
75+
<Label>Attempts</Label>
76+
<PropertyName>Attempts</PropertyName>
77+
</ListItem>
78+
<ListItem>
79+
<Label>ID</Label>
80+
<PropertyName>ID</PropertyName>
81+
</ListItem>
82+
<ListItem>
83+
<Label>GUID</Label>
84+
<PropertyName>GUID</PropertyName>
85+
</ListItem>
86+
<ListItem>
87+
<Label>DeliveredAt</Label>
88+
<PropertyName>DeliveredAt</PropertyName>
89+
</ListItem>
90+
<ListItem>
91+
<Label>Redelivery</Label>
92+
<PropertyName>Redelivery</PropertyName>
93+
</ListItem>
94+
<ListItem>
95+
<Label>Duration (s)</Label>
96+
<PropertyName>Duration</PropertyName>
97+
</ListItem>
98+
<ListItem>
99+
<Label>Status</Label>
100+
<PropertyName>Status</PropertyName>
101+
</ListItem>
102+
<ListItem>
103+
<Label>StatusCode</Label>
104+
<PropertyName>StatusCode</PropertyName>
105+
</ListItem>
106+
<ListItem>
107+
<Label>Event</Label>
108+
<PropertyName>Event</PropertyName>
109+
</ListItem>
110+
<ListItem>
111+
<Label>Action</Label>
112+
<PropertyName>Action</PropertyName>
113+
</ListItem>
114+
</ListItems>
115+
</ListEntry>
116+
</ListEntries>
117+
</ListControl>
118+
</View>
119+
</ViewDefinitions>
120+
</Configuration>
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
function Get-GitHubAppWebhookDeliveryToRedeliver {
2+
<#
3+
.SYNOPSIS
4+
Short description
5+
6+
.DESCRIPTION
7+
Long description
8+
9+
.EXAMPLE
10+
An example
11+
12+
.NOTES
13+
[Ttle](link)
14+
#>
15+
[CmdletBinding()]
16+
param(
17+
# The timespan to check for redeliveries in hours.
18+
[Parameter()]
19+
[int] $TimeSpan = -2,
20+
21+
# The number of results per page (max 100).
22+
[Parameter()]
23+
[ValidateRange(0, 100)]
24+
[int] $PerPage,
25+
26+
# The context to run the command in. Used to get the details for the API call.
27+
# Can be either a string or a GitHubContext object.
28+
[Parameter()]
29+
[object] $Context = (Get-GitHubContext)
30+
)
31+
32+
begin {
33+
$stackPath = Get-PSCallStackPath
34+
Write-Debug "[$stackPath] - Start"
35+
$Context = Resolve-GitHubContext -Context $Context
36+
Assert-GitHubContext -Context $Context -AuthType APP
37+
}
38+
39+
process {
40+
try {
41+
$checkPoint = (Get-Date).AddHours($TimeSpan)
42+
Get-GitHubAppWebhookDeliveryByList -Context $Context -PerPage $PerPage | Where-Object { $_.DeliveredAt -gt $checkPoint } |
43+
Group-Object -Property GUID | Where-Object { $_.Group.Status -notcontains 'OK' } | ForEach-Object {
44+
$refObject = $_.Group | Sort-Object -Property DeliveredAt
45+
[GitHubWebhookRedelivery]@{
46+
Attempts = $_.Count
47+
GUID = $_.Name
48+
Status = $refObject.Status
49+
StatusCode = $refObject.StatusCode
50+
Event = $refObject.Event
51+
Action = $refObject.Action
52+
Duration = $_.Group.Duration | Measure-Object -Average | Select-Object -ExpandProperty Average
53+
ID = $refObject.ID
54+
DeliveredAt = $refObject.DeliveredAt
55+
Redelivery = $refObject.Redelivery
56+
InstallationID = $refObject.InstallationID
57+
RepositoryID = $refObject.RepositoryID
58+
ThrottledAt = $refObject.ThrottledAt
59+
URL = $refObject.URL
60+
Request = $refObject.Request
61+
Response = $refObject.Response
62+
}
63+
}
64+
} catch {
65+
throw $_
66+
}
67+
}
68+
69+
end {
70+
Write-Debug "[$commandName] - End"
71+
}
72+
}

src/functions/public/Apps/Webhooks/Get-GitHubAppWebhookDelivery.ps1

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,32 @@
2424
[Get a webhook configuration for an app](https://docs.github.com/rest/apps/webhooks#get-a-webhook-configuration-for-an-app)
2525
#>
2626
[OutputType([GitHubWebhook[]])]
27-
[CmdletBinding(DefaultParameterSetName = '__AllParameterSets')]
27+
[CmdletBinding(DefaultParameterSetName = 'ByList')]
2828
param(
2929
# The ID of the delivery.
3030
[Parameter(
3131
Mandatory,
32-
ParameterSetName = 'ByID',
33-
ValueFromPipeline,
34-
ValueFromPipelineByPropertyName
32+
ParameterSetName = 'ByID'
3533
)]
3634
[Alias('DeliveryID', 'delivery_id')]
3735
[string] $ID,
3836

37+
# Only the ones to redeliver.
38+
[Parameter(
39+
Mandatory,
40+
ParameterSetName = 'Redelivery')]
41+
[switch] $NeedingRedelivery,
42+
43+
# The timespan to check for redeliveries in hours.
44+
[Parameter(ParameterSetName = 'Redelivery')]
45+
[int] $TimeSpan = -2,
46+
47+
# The number of results per page (max 100).
48+
[Parameter(ParameterSetName = 'ByList')]
49+
[Parameter(ParameterSetName = 'Redelivery')]
50+
[ValidateRange(0, 100)]
51+
[int] $PerPage,
52+
3953
# The context to run the command in. Used to get the details for the API call.
4054
# Can be either a string or a GitHubContext object.
4155
[Parameter()]
@@ -53,10 +67,16 @@
5367
try {
5468
switch ($PSCmdlet.ParameterSetName) {
5569
'ByID' {
70+
Write-Debug "ByID: [$ID]"
5671
Get-GitHubAppWebhookDeliveryByID -ID $ID -Context $Context
5772
}
58-
'__AllParameterSets' {
59-
Get-GitHubAppWebhookDeliveryByList -Context $Context
73+
'Redelivery' {
74+
Write-Debug "Redelivery: [$NeedingRedelivery]"
75+
Get-GitHubAppWebhookDeliveryToRedeliver -Context $Context -PerPage $PerPage -TimeSpan $TimeSpan
76+
}
77+
'ByList' {
78+
Write-Debug 'ByList'
79+
Get-GitHubAppWebhookDeliveryByList -Context $Context -PerPage $PerPage
6080
}
6181
}
6282
} catch {

src/functions/public/Apps/Webhooks/Redeliver-GitHubAppWebhookDelivery.ps1

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
function Redeliver-GitHubAppWebhookDelivery {
1+
function Invoke-GitHubAppWebhookReDelivery {
22
<#
33
.SYNOPSIS
44
Redeliver a delivery for an app webhook
@@ -10,14 +10,15 @@
1010
to access this endpoint.
1111
1212
.EXAMPLE
13-
Redeliver-GitHubAppWebhookDelivery -ID 12345
13+
Invoke-GitHubAppWebhookReDelivery -ID 12345
1414
1515
Redelivers the delivery with the ID `12345`.
1616
1717
.NOTES
1818
[Redeliver a delivery for an app webhook](https://docs.github.com/rest/apps/webhooks#redeliver-a-delivery-for-an-app-webhook)
1919
#>
2020
[OutputType([void])]
21+
[Alias('Redeliver-GitHubAppWebhookDelivery')]
2122
[CmdletBinding(SupportsShouldProcess)]
2223
[Diagnostics.CodeAnalysis.SuppressMessageAttribute(
2324
'PSUseApprovedVerbs', '', Scope = 'Function',

tools/utilities/New-FunctionTemplate.ps1

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@
2929
)
3030

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

@@ -76,7 +76,7 @@
7676
}
7777

7878
end {
79-
Write-Debug "[$commandName] - End"
79+
Write-Debug "[$stackPath] - End"
8080
}
8181

8282
clean {

0 commit comments

Comments
 (0)