Inside system I'm developing I have several Windows Services, couple of applications running in Scheduler and COM+ application that is running my custom DLL's.
Some of them are running on same PC, but most of them on different machines but in same local network.
I'd like to monitor status of tasks each element does. For example one of Windows Services in checking if there are files in specific folder, if so then starts to process them.
I need to know when each element starts and stops and have info about status (for example "processing files 2/300").
I want to have one place (single application) that will display list of services/applications/COM+ DLL's and their status. I don't need to control those elements (restart them, start, stop) I want to see their status.
I've searched over the internet and found several options, but before I start to implement one of them I must pick one that will be most suitable for my case.
Below are options I fond:
1. store everything in database, for example in table:
Name | Status | Date | Error message
---------------------------------------------------------------
Print server | Working| 2016-06-18 21:20:11|
Backup service | Failed | 2016-06-18 20:17:49| Not enough space
and using for example https://tabledependency.codeplex.com/ display everything in my app as grid, this way when something changes in sql table my app will auto update.
Write everything to event log and then read all logs in my C# app. This way I must configure every new element in my app, because my app would have to know location of event log for each service/application.
Use NamedPipes/Sockets/ UDP message to broadcast messages from every application/service I want to monitor. I'm not sure if this will work if I'd have 2 applications sending messages on same port from same pc. I can't do standard server-clients approach, because I won't have my monitoring application running all the time, so clients (services/applications) won't be able to connect to it, besides that I can have multiple monitoring applications running.
Basically I need a way to send (broadcast) messages from multiple places (standard application/windows service/custom DLL) without knowing if someone is listening for them. Also I'd like to be able to start multiple applications and have messages displayed in all of them.
First solution is the easiest for me to create, but easiest solution isn't always the best.