Once again, I've developed PingMonitor for my own use. Some parameters or functions are surely missing but it already offers a lot of things... Ping was the first implemented check... This application is intended to easily and quickly replace some manual repetitive checks, not to replace professional software like Nagios.
Download, unzip and run PingMonitor.exe! Easy!
The sample will check if www.google.com is replying to ping...
Do not discard any parameter of this file.
Restart the application after editing this file.
Name | Description | Default (in bold) / Sample |
---|---|---|
CheckEveryMinutes | Number of minutes between two executions | 5.0 |
SMTP FromMail DestMails SMTPPort SMTPUser SMTPPass SMTPSSL |
Host of the mail server used for notifications From e-mail address To e-mail addresses, separated by '£' Server port User Password Enable SSL |
smtp.paludour.local |
AlertEveryHours | Number of hours between two same alerts | 24 |
JiraURL JiraUser JiraPass JiraProject |
URL of the Jira server Username Password Name of the Jira project |
https://support.paludour.local |
CheckNetwork | If True and network is down, don't execute the checks | True |
FoxBoxHost FoxBoxGsmID FoxBoxPass SMSNumber |
Host of the FoxBox device to send SMS Id of the SIM card slot Password Telephone number |
foxbox.paludour.local |
AllowedSSLHosts | Allowed SSL hosts with non-valid SSL certificate, separated by ',' | foxbox.paludour.local |
LogsViewer LogsViewerArgs |
Application to view logs files Arguments for the application |
C:\LogExpert\LogExpert.exe |
PushSaferPrivateKey | Private key to use for sending notifications with PushSafer. | PushSaferPrivateKey |
WirePusherPass | Password used to crypt notifications with Android WirePusher. Must be the same as the one in WirePusher | WirePusherPassword |
AlertSound | File of the alert sound to play (.wav format only). | D:\siren.wav |
Encryption | If True, passwords and connection strings are encrypted in the configuration files. PingMonitor will ask you the passwords and you'll have to paste the encrypted ones in the configuration file. | False |
DefaultConnectionString | Connection string used by default to connect to Oracle database | Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(COMMUNITY=tcp.world)(PROTOCOL=TCP)(Host=db.paludour.local)(Port=1526)))(CONNECT_DATA=(SID=palu)));Pooling=false;Persist Security Info=True;User ID=USER;Password=PASS |
bCheckForUpdate | If False, don't check for an update at startup (only registered version) | True |
WindowsNotification | If True, Windows tray notifications are enabled | True |
Common paramerers to all checks.
Name (bold if mandatory) | Description | Default (in bold) / Sample | |
---|---|---|---|
Name | Name of the check | "Name": "Name 1" |
|
FixedTimes | First check at fixed time. MinMinutesBetweenChecks must also be set (usually to 1440 for 24 hours). |
"FixedTimes": [ "2020-01-01T09:00:00", "2020-01-01T14:00:00" ], "MinMinutesBetweenChecks": 1440.0 | |
MinMinutesBetweenChecks | Minimum number of minutes between two checks. If 0.0: the general parameter CheckEveryMinutes is used If -1.0: the check is activated manually |
"MinMinutesBetweenChecks": 0.0 |
|
NbFailsToAlert | Number of consecutive fails/events to trigger the notifications | "NbFailsToAlert": 2 |
|
JiraID JiraAssignee |
ID of the Jira component Name of the Jira assignee |
"JiraID": "10153", "JiraAssignee": "INFRA" |
|
AlertBySMS | true to alert by SMS | "AlertBySMS": false |
|
WirePusherIDs | IDs of the WirePusher clients (shown in the Android application), separated by ',' | "WirePusherIDs": "ABCDEFGHI,JKLMNOPQR" |
|
PushSaferDevices | List of devices or groups (separated by '|') that will receive the notification with PushSafer (a for all) | "PushSaferDevices": "a" |
|
AlertBySound | true to alert by sound | "AlertBySound": false |
Tries to ping a hostname.
"$type": "PingMonitor.CheckPing, PingMonitor"
Name (bold if mandatory) | Description | Default (in bold) / Sample | |
---|---|---|---|
Host | Host to ping | "Host": "host0.paludour.local" |
|
Timeout | Timeout in milliseconds | "Timeout": 5000 |
Counts new suspended instances for some BizTalk applications (version 2010).
"$type": "PingMonitor.CheckBizTalk, PingMonitor"
Name (bold if mandatory) | Description | Default (in bold) / Sample | |
---|---|---|---|
DBServer | Host of BizTalk database | "DBServer": "host0.paludour.local" |
|
DBName | Name of BizTalk database | "DBName": "BzDatabaseName" |
|
Applications | List of applications to check (all if not set) | "Applications": ["App1", "App2"] | |
NBDays | Count within NBDays days | "NBDays": 2.0 |
Check if a certificate is valid or about to expire and optionally check the certificate thumprint.
"$type": "PingMonitor.CheckCertificate, PingMonitor"
Name (bold if mandatory) | Description | Default (in bold) / Sample |
---|---|---|
FileName | Filename of the certificate | "FileName": "C:\\certif.p12" |
Pass | Password | "Pass": "MyPassword" |
DaysLimit | Fails if certificate expires before DaysLimit days | "DaysLimit": 7 |
Thumbprint | If defined, fails if the hash of the certificate is different | "Thumbprint": "E77A08DF24E306C58A2209AEAE9F3AB03DDC104A" |
Call an Oracle database function and check the returned value.
"$type": "PingMonitor.CheckDBFnc, PingMonitor"
Name (bold if mandatory) | Description | Default (in bold) / Sample | |
---|---|---|---|
ConnectionString | Connection string, if different as the one defined as general parameter | ||
FncName | Name of the database function to call. | "FncName": "SCHEMA.PACKAGE.FUNCTIONNAME" | |
DBParams | Parameters to send to the function | "DBParams": [ { "$type": "PingMonitor.DBParamNumber, PingMonitor", "ParamName": "pNumParam", "ParamValue": 10.0 }, { "$type": "PingMonitor.DBParamString, PingMonitor", "ParamName": "pStrParam", "ParamValue": "Text" } ] |
|
Timeout | Timeout in milliseconds | "Timeout": 5000 | |
Type | Defines the behaviour: MINVAL (DB function returns NUMBER): fails if returned value is less than Param. MAXVAL (DB function returns NUMBER): fails if returned value is greater than Param. TXT (DB function returns VARCHAR2) and Param empty: fails if returned text is not empty. TXT (DB function returns VARCHAR2) and Param not empty: fails if returned text is different from Param. REGEX (DB function returns VARCHAR2) fails if returned text doesn't match Param pattern. DELTATIME (DB function returns DATE) fails if the difference of returned date and local date is greater than Param seconds (if Param > 0, the local date is corrected with SNTP offset). |
"Type": "MAXVAL" | |
Param | See Type | "Param": "9500" |
Check an Oracle scheduler job.
"$type": "PingMonitor.CheckDBScheduler, PingMonitor"
Name (bold if mandatory) | Description | Default (in bold) / Sample | |
---|---|---|---|
ConnectionString | Connection string, if different as the one defined as general parameter | ||
Owner | Name of the database owner of the job. | "Owner": "SCHEMA" | JobName | Name of the database job. | "JobName": "MYJOB" |
NbMinutesOK | Fails if no success for NbMinutesOK minutes | "NbMinutesOK": 1440 | |
NbMinutesKO | Fails if errors for NbMinutesKO minutes (without newer success) | "NbMinutesKO": 1440 |
Checks for a specific Windows Event in the last minutes.
"$type": "PingMonitor.CheckEventLog, PingMonitor"
Name (bold if mandatory) | Description | Default (in bold) / Sample |
---|---|---|
Host | Hostname of the computer | "Host": "host2.paludour.local" |
Path | Path of the event | "Path": "System" |
Query | Query to find the event $Time$ is replaced with current time minus NbMinutes |
"Query": "*[System[Provider[@Name='Service Control Manager'] and (Level=4 or Level=0) and (EventID=7036) and TimeCreated[@SystemTime>='$Time$']]] and *[EventData[Data[@Name='param1'] and (Data='My Service')]] and *[EventData[Data[@Name='param2'] and (Data='running')]]" |
NbMinutes | Find event in the last NbMinutes minutes | "NbMinutes": 2880 |
Run executable and check the exit code.
"$type": "PingMonitor.CheckExe, PingMonitor"
Name (bold if mandatory) | Description | Default (in bold) / Sample | |
---|---|---|---|
FileName | Filename of the executable to execute. | "FileName": "C:\\Strawberry\\perl\\bin\\perl.exe" | |
Arguments | Arguments for the executable | "Arguments": "\"C:\\PoolConnection.pl\" --host host3.paludour.local -w 90 -c 90" | |
WorkingDirectory | Working directory for the executable | "WorkingDirectory": "C:\\temp" | |
Timeout | Timeout in milliseconds | "Timeout": 5000 | |
Type | Defines the behaviour: EXITCODE: fails if exit code is different of Param. EXITCODEVIEWOUTPUT: fails if exit code is different of Param and copy output of the executable to log files. |
"Type": "EXITCODE" | |
Param | See Type | "Param": "0" |
Check for new or old files in a directory.
"$type": "PingMonitor.CheckFile, PingMonitor"
Name (bold if mandatory) | Description | Default (in bold) / Sample | |
---|---|---|---|
Directory | Directory to search files into | "Directory": "\\\\host4.paludour.local\\ERR" | |
SearchPattern | Search pattern for the files | "SearchPattern": "*.txt" | |
Type | Defines the behaviour: FILEEXISTS and NBDays = 0: fails if it exists at least NBFiles file(s). FILEEXISTS and NBDays > 0: fails if it exists at least NBFiles file(s) newer than NBDays days. FILEEXISTS and NBDays < 0: fails if it exists at least NBFiles file(s) older than NBDays days. FILENOTEXISTS and NBDays = 0: fails if there is less than NBFiles file(s). FILENOTEXISTS and NBDays > 0: fails if there is less than NBFiles file(s) newer than NBDays days. FILENOTEXISTS and NBDays < 0: fails if there is less than NBFiles file(s) older than NBDays days. |
"Type": "FILEEXISTS" | |
NBDays | See Type | "NBDays": 0.0 | |
NBFiles | See Type | "NBFiles": 1 | |
MinBytes | Count files with length ≥ MinBytes bytes. | "MinBytes": 0 | |
IncludeHidden | Also count hidden files. | "IncludeHidden": false | |
RecursiveDepth | Depth of recursive search. | "RecursiveDepth": 0 | |
MaxCount | If set, stop counting after MaxCount files found. | "MaxCount": 5 | |
KeepFileIfMatchContentRegex | If set, keep only files matching Regex. | "KeepFileIfMatchContentRegex": "Regex expression" | |
DiscardFileIfMatchContentRegex | If set, discard files matching Regex. | "DiscardFileIfMatchContentRegex": "Regex expression" | |
Charset | Charset to use to open file for RegEx. | "Charset": "UTF-8" |
Check the version of a file.
"$type": "PingMonitor.CheckFileVersion, PingMonitor"
Name (bold if mandatory) | Description | Default (in bold) / Sample | |
---|---|---|---|
FileName | File name to check | "FileName": "\\\\host5.paludour.local\\c$\\MyFile.exe" | Type | Defines the behaviour: MAXVERSION: fails if file version is greater than Version. MINVERSION: fails if file version is lower than Version. |
"Type": "MAXVERSION" |
Version | See Type | "Version": "86.0.99999.99999" | |
FailIfHostDown | If true, fails if remote host is not responding. | "FailIfHostDown": false |
|
Domain | To connect with another user: domain | "Domain": "paludour.local" |
|
UserName | To connect with another user: user name | "UserName": "MyUsername" |
|
Password | To connect with another user: password | "Password": "MyPassword" |
Group several checks. Possibility to skip next checks if a fail/event occurs. Only for registered users.
Check Microsoft Message Queuing.
"$type": "PingMonitor.CheckMSMQ, PingMonitor"
Name (bold if mandatory) | Description | Default (in bold) / Sample |
---|---|---|
Host | Hostname of the computer | "Host": "host6.paludour.local" |
QueueName | Name of the queue | "QueueName": "FormatName:Direct=OS:host6.paludour.local\\private$\\csout" |
MaxCount | Fails if number of messages is greater than MaxCount | "MaxCount": 50 |
Check Performance Monitor Counters.
"$type": "PingMonitor.CheckPerfMon, PingMonitor"
Name (bold if mandatory) | Description | Default (in bold) / Sample |
---|---|---|
Host | Hostname of the computer | "Host": "host7.paludour.local" |
Category | Name of the category | "Category": "Processor" |
Counter | Name of the counter | "Counter": "% Processor Time" |
Instance | Name of the instance. Don't set for single instance counters. Don't set to get maximum value for multi-instances counters. |
"Instance": "0" |
Threshold | Fails if the highest value returned is greater than Threshold | "Threshold": 90.0 |
Write your own .Net plugin. Only for registered users.
Check if a process is running.
"$type": "PingMonitor.CheckProcess, PingMonitor"
Name (bold if mandatory) | Description | Default (in bold) / Sample | |
---|---|---|---|
ProcessName | Name of the process | "ProcessName": "Notepad++" | |
Host | Hostname of the remote computer | "Host": "host8.paludour.local" | |
NBProc | Number of processes | "NBProc": 1 |
Check the response of an HTTP query.
"$type": "PingMonitor.CheckRest, PingMonitor"
Name (bold if mandatory) | Description | Default (in bold) / Sample | |
---|---|---|---|
URL | URL to query | "URL": "http://host9.paludour.local:8080" | |
Resource | Resource / Page / Queystring | "Resource": "/RestService.svc/Test?param=value" | |
Type | Defines the behaviour: STATUT: fails if HTTP status is different than Param. MAXVAL: fails if response content is greater than Param. REGEX: fails if response doesn't match reular expression pattern Param. |
"Type": "STATUT" | |
Param | See Type | "Param": "200" |
Check a Windows scheduled task.
"$type": "PingMonitor.CheckScheduler, PingMonitor"
Name (bold if mandatory) | Description | Default (in bold) / Sample | |
---|---|---|---|
Host | Hostname of the computer | "Host": "host10.paludour.local" |
|
TaskName | Task name | "TaskName": "\\PALUDOUR\\MyTask" |
|
NbMinutesOK | Fails if no success for NbMinutesOK minutes | "NbMinutesOK": 2880 | |
NbMinutesKO | Fails if errors for NbMinutesKO minutes (without newer success) | "NbMinutesKO": 30 | |
ExitCode | If defined, fails if application exit code is different than ExitCode | "ExitCode": 0 |
Check the state of a Windows service. Fails if the status is not Running.
"$type": "PingMonitor.CheckService, PingMonitor"
Name (bold if mandatory) | Description | Default (in bold) / Sample |
---|---|---|
Host | Hostname of the computer | "Host": "host11.paludour.local" |
ServiceName | Name of the service | "ServiceName": "MyService" |
Check the uptime of a server and the free disk space.
"$type": "PingMonitor.CheckSNMP, PingMonitor"
Name (bold if mandatory) | Description | Default (in bold) / Sample |
---|---|---|
Host | Hostname of the computer | "Host": "host12.paludour.local" |
Community | SNMP community | "Community": "CoMmUnItY" |
SNMPItems | Items to check : uptime in days and/or free disk(s) space in GB and/or system time and/or running process | "SNMPItems": [ { "$type": "PingMonitor.SNMPSysUpTime, PingMonitor", "DaysLimit": 15.0 }, { "$type": "PingMonitor.SNMPDiskSpace, PingMonitor", "DiskNumber": 1, "FreeGbLimit": 1.0 }, { "$type": "PingMonitor.SNMPSystemDate, PingMonitor", "SecondsLimit": 60, "WarnIfDecrease": false }, { "$type": "PingMonitor.SNMPProcess, PingMonitor", "ProcessName": "Myprocessname" } ] |
Check the time of the computer against a time server.
"$type": "PingMonitor.CheckSNTP, PingMonitor"
Name (bold if mandatory) | Description | Default (in bold) / Sample | |
---|---|---|---|
Host | Hostname of the computer | "Host": "host13.paludour.local" |
|
SecondsLimit | Fails if the difference of returned time and local time is greater than SecondsLimit seconds. | "SecondsLimit": 60 |
|
Timeout | Timeout in milliseconds | "Timeout": 5000 | |
KeepOffset | Keep the returned value to correct computer time in some other checks. | "KeepOffset": false |
Run SSH command and check the exit status code or the result.
"$type": "PingMonitor.CheckSSHCmd, PingMonitor"
Name (bold if mandatory) | Description | Default (in bold) / Sample | |
---|---|---|---|
Host | Hostname of the computer | "Host": "host14.paludour.local" |
|
User | Username | "User": "MyUsername" |
|
Pass | Password | "Pass": "MyPassword" |
|
Command | Command to execute | "Command": "find /tmp -maxdepth 1 -type f -ctime -1 | wc -l" | |
Timeout | Timeout in milliseconds | "Timeout": 5000 | |
Type | Defines the behaviour: EXITSTATUS: fails if exit status is different of Param. MINVAL: fails if returned value is less than Param. |
"Type": "MINVAL" | |
Param | See Type | "Param": "1" |
Check if a site's SSL certificate is valid or about to expire and optionally check the certificate thumprint.
"$type": "PingMonitor.CheckSSL, PingMonitor"
Name (bold if mandatory) | Description | Default (in bold) / Sample |
---|---|---|
URL | URL to check | "URL": "https://www.paludour.net" |
DaysLimit | Fails if certificate expires before DaysLimit days | "DaysLimit": 7 |
BypassDefaultProxy | True to bypass the default proxy | "BypassDefaultProxy": false |
Thumbprint | If defined, fails if the hash of the certificate is different | "Thumbprint": "E77A08DF24E306C58A2209AEAE9F3AB03DDC104A" |
Check if a server is listening to a specific TCP port.
"$type": "PingMonitor.CheckTCP, PingMonitor"
Name (bold if mandatory) | Description | Default (in bold) / Sample | |
---|---|---|---|
Host | Hostname of the computer | "Host": "host15.paludour.local" |
|
Port | Port number | "Port": 8088 |
|
Timeout | Timeout in milliseconds | "Timeout": 5000 |
Check if files exist on a (S)FTP server.
"$type": "PingMonitor.CheckWinSCP, PingMonitor"
Name (bold if mandatory) | Description | Default (in bold) / Sample | |
---|---|---|---|
Protocol | Protocol: Ftp or Sftp | "Protocol": "Sftp" |
|
FtpSecure | None, Explicit or Implicit | "FtpSecure": "None" |
|
Host | Hostname of the server | "Host": "host16.paludour.local" |
|
Port | Port number | "Port": 2222 |
|
User | Username | "User": "MyUsername" |
|
Pass | Password | "Pass": "MyPassword" |
|
FingerPrint | SSH or TLS certificate fingerprint | "FingerPrint": "ecdsa-sha2-nistp384 384 dmacFgrSsfREZc65PMD/eVffrdfGf7J6cT73FSZb7CS=" |
|
Directory | Directory where to find files | "Directory": "/MyFolder" |
|
OpenWinSCPSessionName | Name of the site to open in WinSCP UI | "OpenWinSCPSessionName": "MySessionToOpen" |
|
SearchPattern | Search pattern for the files | "SearchPattern": "*.txt" | |
Type | Defines the behaviour: FILEEXISTS and NBDays = 0: fails if it exists at least NBFiles file(s). FILEEXISTS and NBDays > 0: fails if it exists at least NBFiles file(s) newer than NBDays days. FILEEXISTS and NBDays < 0: fails if it exists at least NBFiles file(s) older than NBDays days. FILENOTEXISTS and NBDays = 0: fails if there is less than NBFiles file(s). FILENOTEXISTS and NBDays > 0: fails if there is less than NBFiles file(s) newer than NBDays days. FILENOTEXISTS and NBDays < 0: fails if there is less than NBFiles file(s) older than NBDays days. |
"Type": "FILEEXISTS" | |
NBDays | See Type | "NBDays": 0.0 | |
NBFiles | See Type | "NBFiles": 1 | |
MinBytes | Count files with length ≥ MinBytes bytes. | "MinBytes": 0 | |
RecursiveDepth | Depth of recursive search. | "RecursiveDepth": 0 | |
MaxCount | If set, stop counting after MaxCount files found. | "MaxCount": 5 | |
KeepFileIfMatchContentRegex | If set, keep only files matching Regex. | "KeepFileIfMatchContentRegex": "Regex expression" | |
DiscardFileIfMatchContentRegex | If set, discard files matching Regex. | "DiscardFileIfMatchContentRegex": "Regex expression" | |
Charset | Charset to use to open file for RegEx. | "Charset": "UTF-8" |
Check Windows Management Instrumentation, Performance Monitor Counters (with Wql query).
"$type": "PingMonitor.CheckWMI, PingMonitor"
Name (bold if mandatory) | Description | Default (in bold) / Sample | |
---|---|---|---|
Host | Hostname of the computer | "Host": "host17.paludour.local" |
|
Namespace | Namespace | "Namespace": "root\cimv2" |
|
Timeout | Timeout in milliseconds | "Timeout": 15000 | |
Wql | SQL for WMI | "Wql": "SELECT NumberOfPooledConnections FROM Win32_PerfFormattedData_ODPNETManagedDriver_ODPNETManagedDriver" |
|
Type | Defines the behaviour: MAX: fails if the highest value of the Property returned by Wql is greater than Threshold. COUNT: fails if number of returned records is different than Count. |
"Type": "MAX" |
|
Property | See Type | "Property": "NumberOfPooledConnections" |
|
Threshold | See Type | "Threshold": 90.0 |
|
Count | See Type | "Count": 3 |
Just to check that PingMonitor is still running and notifications are OK. This sends test notifications.
"$type": "PingMonitor.CheckNotifications, PingMonitor"
Remember to set MinMinutesBetweenChecks, eventually FixedTimes and, if desired, AlertBySMS, PushSaferDevices and WirePusherIDs.
Microsoft .Net Framework 4.7.2 must be installed.
PingMonitor may not be bundled with other software, included on CDs etc, linked to from other web sites or made available for download elsewhere. Link to this page instead.
Version 1.0
PingMonitor.zip (14 MB) for Windows 11, Windows 10.
If you have tried PingMonitor and want to support its development, make a donation; give what you wish (minimum 6 EUR or 9 USD for personal use). When I receive a donation, I send your registration key.
It's fast and easy. Just click on the 'PayPal' button below.
Thanks, Paludour.
Simonis Design
LogExpert
Jira
FoxBox
PushSafer
WirePusher