Skip to content

Commit bb36d78

Browse files
committed
Update Get-LMLogMessage.ps1
1 parent 6d2a441 commit bb36d78

File tree

1 file changed

+114
-72
lines changed

1 file changed

+114
-72
lines changed

Public/Get-LMLogMessage.ps1

Lines changed: 114 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,30 @@
11
Function Get-LMLogMessage {
22

3-
[CmdletBinding(DefaultParameterSetName = "Default")]
3+
[CmdletBinding(DefaultParameterSetName = "Range-Async")]
44
Param (
5+
[Parameter(Mandatory, ParameterSetName = 'Date-Sync')]
6+
[Parameter(Mandatory, ParameterSetName = 'Date-Async')]
57
[Datetime]$StartDate,
6-
8+
9+
[Parameter(Mandatory, ParameterSetName = 'Date-Sync')]
10+
[Parameter(Mandatory, ParameterSetName = 'Date-Async')]
711
[Datetime]$EndDate,
8-
9-
[Parameter(ParameterSetName = 'Query')]
12+
1013
[String]$Query,
11-
12-
[ValidateSet("15min", "30min", "1hour", "3hour", "6hour", "12hour", "24hour", "3day", "7day", "1month", "custom")]
14+
15+
[Parameter(ParameterSetName = 'Range-Sync')]
16+
[Parameter(ParameterSetName = 'Range-Async')]
17+
[ValidateSet("15min", "30min", "1hour", "3hour", "6hour", "12hour", "24hour", "3day", "7day", "1month")]
1318
[String]$Range = "15min",
14-
19+
1520
[Int]$BatchSize = 300,
16-
21+
22+
[Parameter(ParameterSetName = 'Date-Async')]
23+
[Parameter(ParameterSetName = 'Range-Async')]
24+
[Int]$MaxPages = 10,
25+
26+
[Parameter(ParameterSetName = 'Date-Async')]
27+
[Parameter(ParameterSetName = 'Range-Async')]
1728
[Switch]$Async
1829
)
1930
#Check if we are logged in and have valid api creds
@@ -27,70 +38,65 @@ Function Get-LMLogMessage {
2738

2839
#Convert to epoch, if not set use defaults
2940
$CurrentTime = Get-Date
30-
Switch ($Range) {
31-
"15min" {
32-
$StartTime = ([DateTimeOffset]$($CurrentTime.AddMinutes(-15))).ToUnixTimeMilliseconds()
33-
$EndTime = ([DateTimeOffset]$($CurrentTime)).ToUnixTimeMilliseconds()
34-
}
35-
"30min" {
36-
$StartTime = ([DateTimeOffset]$($CurrentTime.AddMinutes(-30))).ToUnixTimeMilliseconds()
37-
$EndTime = ([DateTimeOffset]$($CurrentTime)).ToUnixTimeMilliseconds()
38-
}
39-
"1hour" {
40-
$StartTime = ([DateTimeOffset]$($CurrentTime.AddHours(-1))).ToUnixTimeMilliseconds()
41-
$EndTime = ([DateTimeOffset]$($CurrentTime)).ToUnixTimeMilliseconds()
42-
}
43-
"3hour" {
44-
$StartTime = ([DateTimeOffset]$($CurrentTime.AddHours(-3))).ToUnixTimeMilliseconds()
45-
$EndTime = ([DateTimeOffset]$($CurrentTime)).ToUnixTimeMilliseconds()
46-
}
47-
"6hour" {
48-
$StartTime = ([DateTimeOffset]$($CurrentTime.AddHours(-6))).ToUnixTimeMilliseconds()
49-
$EndTime = ([DateTimeOffset]$($CurrentTime)).ToUnixTimeMilliseconds()
50-
}
51-
"12hour" {
52-
$StartTime = ([DateTimeOffset]$($CurrentTime.AddHours(-12))).ToUnixTimeMilliseconds()
53-
$EndTime = ([DateTimeOffset]$($CurrentTime)).ToUnixTimeMilliseconds()
54-
}
55-
"24hour" {
56-
$StartTime = ([DateTimeOffset]$($CurrentTime.AddDays(-1))).ToUnixTimeMilliseconds()
57-
$EndTime = ([DateTimeOffset]$($CurrentTime)).ToUnixTimeMilliseconds()
58-
}
59-
"3day" {
60-
$StartTime = ([DateTimeOffset]$($CurrentTime.AddDays(-3))).ToUnixTimeMilliseconds()
61-
$EndTime = ([DateTimeOffset]$($CurrentTime)).ToUnixTimeMilliseconds()
62-
}
63-
"7day" {
64-
$StartTime = ([DateTimeOffset]$($CurrentTime.AddDays(-7))).ToUnixTimeMilliseconds()
65-
$EndTime = ([DateTimeOffset]$($CurrentTime)).ToUnixTimeMilliseconds()
66-
}
67-
"1month" {
68-
$StartTime = ([DateTimeOffset]$($CurrentTime.AddDays(-30))).ToUnixTimeMilliseconds()
69-
$EndTime = ([DateTimeOffset]$($CurrentTime)).ToUnixTimeMilliseconds()
70-
}
71-
"custom" {
72-
$StartTime = ([DateTimeOffset]$($StartDate)).ToUnixTimeMilliseconds()
73-
$EndTime = ([DateTimeOffset]$($EndDate)).ToUnixTimeMilliseconds()
74-
}
75-
}
7641

77-
# Build the base query
78-
$BaseQuery = "_partition=default"
79-
80-
# Add additional query parameters if specified
81-
if ($Query) {
82-
$BaseQuery += " $Query"
42+
If ($StartDate -and $EndDate) {
43+
$StartTime = ([DateTimeOffset]$($StartDate)).ToUnixTimeMilliseconds()
44+
$EndTime = ([DateTimeOffset]$($EndDate)).ToUnixTimeMilliseconds()
45+
}
46+
Else {
47+
Switch ($Range) {
48+
"15min" {
49+
$StartTime = ([DateTimeOffset]$($CurrentTime.AddMinutes(-15))).ToUnixTimeMilliseconds()
50+
$EndTime = ([DateTimeOffset]$($CurrentTime)).ToUnixTimeMilliseconds()
51+
}
52+
"30min" {
53+
$StartTime = ([DateTimeOffset]$($CurrentTime.AddMinutes(-30))).ToUnixTimeMilliseconds()
54+
$EndTime = ([DateTimeOffset]$($CurrentTime)).ToUnixTimeMilliseconds()
55+
}
56+
"1hour" {
57+
$StartTime = ([DateTimeOffset]$($CurrentTime.AddHours(-1))).ToUnixTimeMilliseconds()
58+
$EndTime = ([DateTimeOffset]$($CurrentTime)).ToUnixTimeMilliseconds()
59+
}
60+
"3hour" {
61+
$StartTime = ([DateTimeOffset]$($CurrentTime.AddHours(-3))).ToUnixTimeMilliseconds()
62+
$EndTime = ([DateTimeOffset]$($CurrentTime)).ToUnixTimeMilliseconds()
63+
}
64+
"6hour" {
65+
$StartTime = ([DateTimeOffset]$($CurrentTime.AddHours(-6))).ToUnixTimeMilliseconds()
66+
$EndTime = ([DateTimeOffset]$($CurrentTime)).ToUnixTimeMilliseconds()
67+
}
68+
"12hour" {
69+
$StartTime = ([DateTimeOffset]$($CurrentTime.AddHours(-12))).ToUnixTimeMilliseconds()
70+
$EndTime = ([DateTimeOffset]$($CurrentTime)).ToUnixTimeMilliseconds()
71+
}
72+
"24hour" {
73+
$StartTime = ([DateTimeOffset]$($CurrentTime.AddDays(-1))).ToUnixTimeMilliseconds()
74+
$EndTime = ([DateTimeOffset]$($CurrentTime)).ToUnixTimeMilliseconds()
75+
}
76+
"3day" {
77+
$StartTime = ([DateTimeOffset]$($CurrentTime.AddDays(-3))).ToUnixTimeMilliseconds()
78+
$EndTime = ([DateTimeOffset]$($CurrentTime)).ToUnixTimeMilliseconds()
79+
}
80+
"7day" {
81+
$StartTime = ([DateTimeOffset]$($CurrentTime.AddDays(-7))).ToUnixTimeMilliseconds()
82+
$EndTime = ([DateTimeOffset]$($CurrentTime)).ToUnixTimeMilliseconds()
83+
}
84+
"1month" {
85+
$StartTime = ([DateTimeOffset]$($CurrentTime.AddDays(-30))).ToUnixTimeMilliseconds()
86+
$EndTime = ([DateTimeOffset]$($CurrentTime)).ToUnixTimeMilliseconds()
87+
}
88+
}
8389
}
84-
8590

8691
# Build the payload
8792
$Data = @{
8893
meta = @{
8994
isAsync = $Async.ToBool()
9095
perPageCount = $BatchSize
9196
queryId = $null
97+
queryType = $null
9298
filter = @{
93-
query = $BaseQuery
99+
query = $Query
94100
range = @{
95101
startAtMS = $StartTime
96102
endAtMS = $EndTime
@@ -110,29 +116,49 @@ Function Get-LMLogMessage {
110116
# Issue request
111117
$Response = Invoke-RestMethod -Uri $Uri -Method "POST" -Headers $Headers[0] -WebSession $Headers[1] -Body $Body
112118

113-
If(!$Async) {
114-
Return (Add-ObjectTypeInfo -InputObject $Response.data.byId.logs.PSObject.Properties.Value -TypeName "LogicMonitor.LMLogs")
119+
If (!$Async) {
120+
If ($Response.data.byId.logs.PSObject.Properties.Value) {
121+
Return (Add-ObjectTypeInfo -InputObject $Response.data.byId.logs.PSObject.Properties.Value -TypeName "LogicMonitor.LMLogs")
122+
}
123+
Else {
124+
Write-Information "No results found for query ($($Query))"
125+
Return
126+
}
115127
}
116128

117129
# Handle async response
118-
If ($Response.meta.queryId -and $Response.meta.progress -eq 0) {
130+
If ($Response.meta.queryId -and $Response.meta.progress -ne 1) {
119131
$QueryId = $Response.meta.queryId
120132
$Complete = $false
121133
$Results = @()
122-
134+
$Cursor = $null
135+
$Page = 0
123136
# Poll for completion
124137
While (!$Complete) {
138+
$CompletionPercentage = [Math]::Round($Response.meta.progress * 100, 2)
139+
Write-Information "Log message query ($($QueryId)) is running, this may take some time. First pass scan $CompletionPercentage% complete, working on page $($Page) of results."
125140
Start-Sleep -Seconds 2
126141

127142
# Build the payload
128143
$Data = @{
129144
meta = @{
130145
isAsync = $Async.ToBool()
131146
perPageCount = $BatchSize
132-
queryType = "raw"
147+
queryType = "raw"
133148
queryId = $QueryId
134149
}
135150
}
151+
#cursor is used to build the pagination, using the chunk path and index to build the cursor on the next bucket that needs to be scanned
152+
If ($Cursor) {
153+
$Data.meta.cursor = $Cursor
154+
$Data.meta.filter = @{
155+
query = $Query
156+
range = @{
157+
startAtMS = $StartTime
158+
endAtMS = $EndTime
159+
}
160+
}
161+
}
136162

137163
$Body = $Data | ConvertTo-Json -Depth 10
138164

@@ -144,13 +170,29 @@ Function Get-LMLogMessage {
144170
# Issue request
145171
$Response = Invoke-RestMethod -Uri $Uri -Method "POST" -Headers $Headers[0] -WebSession $Headers[1] -Body $Body
146172

147-
$Results += $Response.data.byId.logs.PSObject.Properties.Value
148-
149-
If($Response.meta.progress -eq 1) {
150-
$Complete = $true
173+
If ($Response.meta.progress -eq 1) {
174+
If ($Response.data.byId.logs.PSObject.Properties.Value) {
175+
$Results += $Response.data.byId.logs.PSObject.Properties.Value
176+
$Cursor = $Response.meta.cursor
177+
$Page++
178+
}
179+
If ($Response.meta.isLastPage -eq $true -or $Page -ge $MaxPages) {
180+
$Complete = $true
181+
}
182+
}
183+
}
184+
If ($Results) {
185+
If ($Page -eq $MaxPages) {
186+
Write-Information "Max pages reached, stopping query. If you need more results, try increasing the MaxPages parameter."
151187
}
188+
Return (Add-ObjectTypeInfo -InputObject $Results -TypeName "LogicMonitor.LMLogs")
152189
}
153-
Return (Add-ObjectTypeInfo -InputObject $Results -TypeName "LogicMonitor.LMLogs")
190+
Else {
191+
Write-Information "No results found for query ($($QueryId))"
192+
}
193+
}
194+
Else {
195+
Write-Error "Error getting log messages: $($Response)"
154196
}
155197
}
156198
Catch [Exception] {

0 commit comments

Comments
 (0)