From 2806b5566e1cf7f8099eac770031c37c9e6f89a6 Mon Sep 17 00:00:00 2001 From: Aaron Axvig Date: Tue, 2 Mar 2021 16:14:33 -0600 Subject: [PATCH] Add Check-FileRecency --- .gitignore | 1 + .../Check-FileRecency-SettingsExample.ps1 | 16 +++++++ FileRecency/Check-FileRecency.ps1 | 42 +++++++++++++++++++ 3 files changed, 59 insertions(+) create mode 100644 FileRecency/Check-FileRecency-SettingsExample.ps1 create mode 100644 FileRecency/Check-FileRecency.ps1 diff --git a/.gitignore b/.gitignore index ba1a00b..9c9474c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ SnmpCredentials.ps1 SnmpV2Credentials.ps1 +Check-FileRecency-Settings.ps1 diff --git a/FileRecency/Check-FileRecency-SettingsExample.ps1 b/FileRecency/Check-FileRecency-SettingsExample.ps1 new file mode 100644 index 0000000..ae3d73d --- /dev/null +++ b/FileRecency/Check-FileRecency-SettingsExample.ps1 @@ -0,0 +1,16 @@ +[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("UseDeclaredVarsMoreThanAssignments", "SnmpInfo")] +$filesToCheck = @( + @{ + NameForChannel = "Server1 DB_dump" + FileSearchString = "\\backups\Server1\DB_dump_*" + MinimumSize = 800MB + MaximumAge = New-TimeSpan -Hours 30 + } + + @{ + NameForChannel = "Server2 DB_dump" + FileSearchString = "\\backups\Server2\DB_dump_*" + MinimumSize = 10GB + MaximumAge = New-TimeSpan -Hours 30 + } +) \ No newline at end of file diff --git a/FileRecency/Check-FileRecency.ps1 b/FileRecency/Check-FileRecency.ps1 new file mode 100644 index 0000000..2c64c7e --- /dev/null +++ b/FileRecency/Check-FileRecency.ps1 @@ -0,0 +1,42 @@ +#Requires -Modules PrtgXml +# Install-Module PrtgXml +# https://www.powershellgallery.com/packages/PrtgXml +# https://github.com/lordmilko/PrtgXml + +Param( + [Parameter(Mandatory=$false)] + [string] + $CheckFileRecencySettings = 'Check-FileRecency-Settings.ps1' +) + +$path = Join-Path $PSScriptRoot $CheckFileRecencySettings +. $path + +Prtg { + foreach ($fileToCheck in $filesToCheck) { + if (Test-Path -Path $fileToCheck.FileSearchString) { + $files = Get-Item -Path $fileToCheck.FileSearchString + $newest = $files | Sort-Object LastWriteTime -Descending | Select-Object -First 1 + $age = New-TimeSpan -Start $newest.LastWriteTime + + Result { + Channel "$($fileToCheck.NameForChannel) age OK" + Value ([int]($age -lt $fileToCheck.MaximumAge)) + Unit 'Custom' + ValueLookup "prtg.standardlookups.boolean.statetrueok" + } + + Result { + Channel "$($fileToCheck.NameForChannel) size OK" + Value ([int]($newest.Length -gt $fileToCheck.MinimumSize)) + Unit 'Custom' + ValueLookup "prtg.standardlookups.boolean.statetrueok" + } + } + else { + Error 1 + Text "No $($fileToCheck.NameForChannel) files found with search string $($fileToCheck.FileSearchString). Aborting further checks." + break + } + } +} \ No newline at end of file