Skip to content

Commit 8c2faf0

Browse files
committed
Fix DeviceData bug
1 parent 43038a3 commit 8c2faf0

File tree

3 files changed

+225
-5
lines changed

3 files changed

+225
-5
lines changed

Logic.Monitor.Format.ps1xml

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,59 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Configuration>
33
<ViewDefinitions>
4+
<!-- New View LogicMonitor.LMLogs-->
5+
<View>
6+
<Name>LogicMonitorLMLogs</Name>
7+
<ViewSelectedBy>
8+
<TypeName>LogicMonitor.LMLogs</TypeName>
9+
</ViewSelectedBy>
10+
<TableControl>
11+
<TableHeaders>
12+
<TableColumnHeader>
13+
<Label>id</Label>
14+
</TableColumnHeader>
15+
<TableColumnHeader>
16+
<Label>time</Label>
17+
</TableColumnHeader>
18+
<TableColumnHeader>
19+
<Label>message</Label>
20+
</TableColumnHeader>
21+
<TableColumnHeader>
22+
<Label>device</Label>
23+
</TableColumnHeader>
24+
<TableColumnHeader>
25+
<Label>_anomaly.type</Label>
26+
</TableColumnHeader>
27+
<TableColumnHeader>
28+
<Label>metadata</Label>
29+
</TableColumnHeader>
30+
</TableHeaders>
31+
<TableRowEntries>
32+
<TableRowEntry>
33+
<TableColumnItems>
34+
<TableColumnItem>
35+
<PropertyName>id</PropertyName>
36+
</TableColumnItem>
37+
<TableColumnItem>
38+
<PropertyName>time</PropertyName>
39+
</TableColumnItem>
40+
<TableColumnItem>
41+
<PropertyName>message</PropertyName>
42+
</TableColumnItem>
43+
<TableColumnItem>
44+
<PropertyName>device</PropertyName>
45+
</TableColumnItem>
46+
<TableColumnItem>
47+
<PropertyName>_anomaly.type</PropertyName>
48+
</TableColumnItem>
49+
<TableColumnItem>
50+
<PropertyName>metadata</PropertyName>
51+
</TableColumnItem>
52+
</TableColumnItems>
53+
</TableRowEntry>
54+
</TableRowEntries>
55+
</TableControl>
56+
</View>
457
<!-- New View LogicMonitor.Alert-->
558
<View>
659
<Name>LogicMonitorAlert</Name>

Public/Get-LMDeviceData.ps1

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,17 +52,18 @@ Function Get-LMDeviceData {
5252
If ($Script:LMAuth.Valid) {
5353

5454
#Convert to epoch, if not set use defaults
55-
If ($StartDate) {
55+
If ($StartDate) { #If start date is provided, convert to epoch
5656
[int]$StartDate = ([DateTimeOffset]$($StartDate)).ToUnixTimeSeconds()
57+
} Else { #If no start date is provided, use 7 days ago
58+
[int]$StartDate = ([DateTimeOffset]$(Get-Date).AddDays(-7)).ToUnixTimeSeconds()
5759
}
5860

59-
If (!$EndDate -and $StartDate) {
61+
If ($EndDate) { #If end date is provided, convert to epoch
62+
[int]$EndDate = ([DateTimeOffset]$($EndDate)).ToUnixTimeSeconds()
63+
} Else { #If no end date is provided, use current date
6064
[int]$EndDate = ([DateTimeOffset]$(Get-Date)).ToUnixTimeSeconds()
6165
}
6266

63-
If ($EndDate -and $StartDate) {
64-
[int]$EndDate = ([DateTimeOffset]$($EndDate)).ToUnixTimeSeconds()
65-
}
6667

6768
#Lookup Device Id
6869
If ($DeviceName) {

Public/Get-LMLogMessage.ps1

Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
Function Get-LMLogMessage {
2+
3+
[CmdletBinding(DefaultParameterSetName = "Default")]
4+
Param (
5+
[Datetime]$StartDate,
6+
7+
[Datetime]$EndDate,
8+
9+
[Parameter(ParameterSetName = 'Query')]
10+
[String]$Query,
11+
12+
[ValidateSet("15min", "30min", "1hour", "3hour", "6hour", "12hour", "24hour", "3day", "7day", "1month", "custom")]
13+
[String]$Range = "15min",
14+
15+
[Int]$BatchSize = 300,
16+
17+
[Switch]$Async
18+
)
19+
#Check if we are logged in and have valid api creds
20+
If ($Script:LMAuth.Valid) {
21+
22+
#Build header and uri
23+
$ResourcePath = "/log/search"
24+
25+
#Initialize vars
26+
$Results = @()
27+
28+
#Convert to epoch, if not set use defaults
29+
$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+
}
76+
77+
# Build the base query
78+
$BaseQuery = "_partition=default"
79+
80+
# Add additional query parameters if specified
81+
if ($Query) {
82+
$BaseQuery += " $Query"
83+
}
84+
85+
86+
# Build the payload
87+
$Data = @{
88+
meta = @{
89+
isAsync = $Async.ToBool()
90+
perPageCount = $BatchSize
91+
queryId = $null
92+
filter = @{
93+
query = $BaseQuery
94+
range = @{
95+
startAtMS = $StartTime
96+
endAtMS = $EndTime
97+
}
98+
}
99+
}
100+
}
101+
102+
$Body = $Data | ConvertTo-Json -Depth 10
103+
104+
Try {
105+
$Headers = New-LMHeader -Auth $Script:LMAuth -Method "POST" -ResourcePath $ResourcePath -Version 4
106+
$Uri = "https://$($Script:LMAuth.Portal).logicmonitor.com/santaba/rest" + $ResourcePath
107+
108+
Resolve-LMDebugInfo -Url $Uri -Headers $Headers[0] -Command $MyInvocation -Payload $Body
109+
110+
# Issue request
111+
$Response = Invoke-RestMethod -Uri $Uri -Method "POST" -Headers $Headers[0] -WebSession $Headers[1] -Body $Body
112+
113+
If(!$Async) {
114+
Return (Add-ObjectTypeInfo -InputObject $Response.data.byId.logs.PSObject.Properties.Value -TypeName "LogicMonitor.LMLogs")
115+
}
116+
117+
# Handle async response
118+
If ($Response.meta.queryId -and $Response.meta.progress -eq 0) {
119+
$QueryId = $Response.meta.queryId
120+
$Complete = $false
121+
$Results = @()
122+
123+
# Poll for completion
124+
While (!$Complete) {
125+
Start-Sleep -Seconds 2
126+
127+
# Build the payload
128+
$Data = @{
129+
meta = @{
130+
isAsync = $Async.ToBool()
131+
perPageCount = $BatchSize
132+
queryType = "raw"
133+
queryId = $QueryId
134+
}
135+
}
136+
137+
$Body = $Data | ConvertTo-Json -Depth 10
138+
139+
$Headers = New-LMHeader -Auth $Script:LMAuth -Method "POST" -ResourcePath $ResourcePath -Version 4
140+
$Uri = "https://$($Script:LMAuth.Portal).logicmonitor.com/santaba/rest" + $ResourcePath
141+
142+
Resolve-LMDebugInfo -Url $Uri -Headers $Headers[0] -Command $MyInvocation -Payload $Body
143+
144+
# Issue request
145+
$Response = Invoke-RestMethod -Uri $Uri -Method "POST" -Headers $Headers[0] -WebSession $Headers[1] -Body $Body
146+
147+
$Results += $Response.data.byId.logs.PSObject.Properties.Value
148+
149+
If($Response.meta.progress -eq 1) {
150+
$Complete = $true
151+
}
152+
}
153+
Return (Add-ObjectTypeInfo -InputObject $Results -TypeName "LogicMonitor.LMLogs")
154+
}
155+
}
156+
Catch [Exception] {
157+
$Proceed = Resolve-LMException -LMException $PSItem
158+
If (!$Proceed) {
159+
Return
160+
}
161+
}
162+
}
163+
Else {
164+
Write-Error "Please ensure you are logged in before running any commands, use Connect-LMAccount to login and try again."
165+
}
166+
}

0 commit comments

Comments
 (0)