This article applies to PRTG 17 or later


Can I monitor the status of important notifications in PRTG to ensure they aren't paused or deleted?


Monitor the Status of a Notification within PRTG (Active/Paused/Deleted)

If you want to monitor the status of a notification added to PRTG (Setup | Account Settings | Notifications), then use the following PowerShell (.ps1) script. This script basically

  • Queries the settings of a certain notification
  • Checks via RegEx if the Status is set to Active or Paused
  • Searches for the notification ID and displays a corresponding error message if the ID cannot be found (for example, if the notification was deleted)

Requirements

  • A locally (within PRTG) created user with access to the notifications
  • Set the Execution Policy of PowerShell to at least RemoteSigned.

Important Notice

Please use the script at your own risk! Additionally, note that we officially cannot support this script so any Support-Case regarding this ticket will most likely be disregarded.


How to Use the Script

  • Save the script as a .ps1 file in the \Custom Sensors\EXEXML\ subdirectory of the PRTG program directory on the probe machine from where you want to check the access point.
#    ____  ____  ____________
#   / __ \/ __ \/_  __/ ____/
#  / /_/ / /_/ / / / / / __  
# / ____/ _, _/ / / / /_/ /  
#/_/   /_/ |_| /_/  \____/                         
#    NETWORK MONITOR
#-------------------
#(c) 2018 Dariusz Gorka, Paessler AG
#
# This script checks if a certain notification within PRTG is paused,active or deleted.
#

# Parameter "-username" - Username from within PRTG (User that can access Notification-Settings)
# Parameter "-passhash" - The Passhash of the User ("Show Passhash" in the User Settings Page)
# Parameter "-prtghost" - The URL for PRTG !!! Please without an ending "/" !!!
# Parameter "-notifid" - The ID of the notification - displayed in the URL of the Notification
# copy paste for the Parameters field in PRTG:
# -username "MyUser" -passhash "12345678910" -prtghost "http(s)://PRTGServer" -notifid "300"
#

param(
    [string] $username = "prtgadmin",
    [string] $passhash = "1278894095",
    [string] $prtghost = "http://server",
    [String] $notifid = "4085"
)

# Check URL
$prtgserverlength = $prtghost.Length - 1
$prtgserverlastch = $prtghost.Substring($prtgserverlength)
if ($prtgserverlastch -eq "/"){
$prtghost = $prtghost.Substring(0,$prtghost.Length - 1)
} 

# Check connectivity
$conerror = 0
try{
        $conurl = [String]::Format("{0}/api/status.json?username={1}&passhash={2}",$prtghost,$username,$passhash)
        Invoke-WebRequest -Uri $conurl -UseBasicParsing | Out-Null
    } catch {
        $conerror = 1
}


if ($conerror -eq 0) {

    # Check if Notification is there
    $notification_site_url = ([String]::Format("{0}/controls/editnotification.htm?id={1}&username={2}&passhash={3}",$prtghost,$notifid,$username,$passhash))
    $notification_site = Invoke-WebRequest -uri $notification_site_url -UseBasicParsing

    $notif_id_found = $notification_site -match '<div\s+class="errormsg">'

    if (!$notif_id_found) {

    $notif_result = $notification_site -match 'name="active_"\s+value="1"\s+checked\s+id="active1"'

    if ($notif_result) {
        $notification_site -match '(name="name_"\s+id="name_"\s+autocomplete="off"\s+value=")(.*)("\s+><\/div>)' | Out-Null
        $notification_name = $Matches[2]
        
        Write-Host @"
        <PRTG>
            <result>
                <channel>Notification</channel>
                <value>1</value>
                <showChart>1</showChart>
                <showTable>1</showTable>
                <Float>1</Float>
                <unit>CustomUnit</unit>
                <customunit>Active</customunit>
                <mode>Absolute</mode>
                <LimitMode>1</LimitMode>
                <LimitMinError>1</LimitMinError>
            </result>
            <text>
                The Notification '$($notification_name)' is active!
            </text>
        </PRTG>
"@

    } else {
        $notification_site -match '(name="name_"\s+id="name_"\s+autocomplete="off"\s+value=")(.*)("\s+><\/div>)' | Out-Null
        $notification_name = $Matches[2]

        Write-Host @"
        <PRTG>
            <result>
                <channel>Notification</channel>
                <value>0</value>
                <showChart>1</showChart>
                <showTable>1</showTable>
                <Float>1</Float>
                <unit>CustomUnit</unit>
                <customunit>Active</customunit>
                <mode>Absolute</mode>
                <LimitMode>1</LimitMode>
                <LimitMinError>1</LimitMinError>
            </result>
            <text>
                The Notification '$($notification_name)' is paused!
            </text>
        </PRTG>
"@
    }
} else {
    # Notification not found

    Write-Host @"
    <PRTG>
        <error>1</error>
        <text>
            The Notification-ID '$($notifid)' was not found! Maybe it is deleted?
        </text>
    </PRTG>
"@
}
} else {
    # Connection Error

    Write-Host @"
    <PRTG>
        <error>1</error>
        <text>
            Something went wrong with the connection! Please check the parameters!
        </text>
    </PRTG>
"@
}
  • Add an EXE/Script Advanced sensor.
  • In the sensor settings, select the above script from the dropdown list and provide the following under Parameters:
-username "<USER>" -passhash "<PASSHASH>" -prtghost "<PRTGServer>" -notifid "<ID>"
  • Adjust the <USER>, <PASSHASH>, <PRTGServer> and <ID>parameters like in the examples below, depending on your scenario:
    • <USER>: prtg-api
    • <PASSHASH>: 12345678910 (You can find the passhash under Setup | Account Settings | My Account, section User Account)
    • <PRTGServer>: http://myprtg.com
    • <ID>: 300
  • Click Continue to save your settings.

Check Notification Status

You can now monitor the status of a notification in PRTG.