Tutorial: Real Time Process Monitoring using PubNub
Time is essential in a server environment. And when it comes to a possible failure we need to act fast!
In this tutorial, we will build a Windows service application that monitors server processing load and memory consumption, sending alerts to a Windows Phone 8.1, with all communication through PubNub's Data Stream Network.
The service starts a thread that will get CPU consumption and available memory and compares to parameters. If the CPU usage is greater than a threshold (MaxCPUUsage) for a certain length of time (Period) then send a message with the type AlertType.PROCESS_ALERT to the channel.
Likewise, if available memory is less than a threshold (MinRAMAvailable) then it will send a message with the type AlertType.RAM_ALERT to the channel.
Real Time Process Monitoring Service
First is a Windows service project in the created using Visual Studio 2015 and .Net Framework 4. This service will send alert messages to the **PNRTPM** channel.
Configuring parameters
Next use RegEdit to configure the service parameters.
You can use RegEdit to configure tree parameters at HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PubnubRTPM
MaxCPUUsage
The max CPU usage to alert in % (default=50)
MinRAMAvailable
The min RAM available to alert in % (default=10)
Period
The period of time to watch continue CPU usage in seconds (default=60)
Edit imagePath and configure your parameters
Example: "C:\Directory_OF_Application\PubnubRTPM.exe" 60 20 60
OnStart Service Method
The OnStart method in the service.cs file is triggered when Windows starts the service.
It subscribes to the PNRTPM channel and creates a thread to monitor the server while the service is running.
Process Thread
The Process thread is in the service.cs file and is also started from the OnStart service method.
This thread uses a PerformanceCounter class to get the CPU usage and available memory and compares with parameters. If the CPU usage is greater than a threshold (MaxCPUUsage) for a certain length of time (Period) then it sends a message with the type AlertType.PROCESS_ALERT to the channel.
Likewise, if available memory is less than a threshold (MinRAMAvailable) then it sends a message with the type AlertType.RAM_ALERT to the channel.
Sending Alert Message
The SendAlertMessage method is in the service.cs file and is started by the process thread.
To compose an alert message, a list of RTPMProcess objects is created getting CPU usage and memory of each process.
After that, a RTPMServer class is created with the alert type, date, server name, CPU usage, RAM available, RTPMProcessList and then sent to the channel.
OnStop Service Method
The OnStop method is in the service.cs file and is triggered when Windows stops the service.
This method unsubscribes from the PNRTPM channel and finalizes the thread that was created to monitor the server.
Real Time Process Monitoring Windows Phone 8.1
The second part of our project is a Windows Phone 8.1 app created using Visual Studio 2015 and Windows Phone 8.1 SDK
This app will receive alert messages from the Real Time Process Monitoring service. It can handle messages from more than one server, each over the PNRTPM channel.
 
The mainpage.xaml file below creates the app seen above using XAML notation. It creates a grid for messages and a button to start and stop monitoring.
Start Monitoring
When you click on the Start Monitoring button, it will subscribe to the PNRTPM channel and wait for an alert message.
Stop Monitoring
If you click on the Stop Monitoring button it will unsubscribe from the PNRTPM channel.
Alert Message Received
The ReceivedMessageCallbackWhenSubscribed method is in the mainpage.xaml.cs file and is triggered when there is a message on PNRTPM channel.
Conclusion
This tutorial showed you how to create a Windows service, collecting CPU and memory information, Windows Phone 8.1 SDK and send/receive messages using PubNub C# SDK. We collected CPU and memory information using the PerformanceCounter class and send messages using publish function.
In the future you could add an e-mail notification and SMS message on the service project to notify the administrator about CPU and memory consumption. You could also improve the Windows Phone 8.1 project by adding a window where the user could see all server processes and find out which is consuming the CPU or memory.
You can download the Real Time Process Monitoring service project [here]
You can download the Real Time Process Monitoring Windows Phone 8.1 project [here]
