Greetings mates,
I have not been back here for a long time.
I have written a script that monitors six (6) apps on our DMZ servers.
The script is scheduled to run three times a day.
Each time it runs, it sends email notifications to our Executive team advising them of whether any or all of the apps are either down or up.
The script works very well.
However, management has asked that I modify the script to add foreground color of red and background color of yellow to any URL of the app that is down along with the text indicating down.
For instance, when app sends out email notifications, it lists the apps and their status as follows:
Please find the status of the DMZ servers below:
WORKING
WORKING
DOWN
WORKING
They would like any app that is down to display as follows:
Please find the status of the DMZ servers below:
WORKING
WORKING
[highlight #EF2929] DOWN[/highlight]
WORKING
It's weird but I could not get this to work.
Any thought on I could get this to work?
I recognize the send mail bit has body (isbodyHtml) set to false but I can change this to true if I can the color thing to work.
Below is the working code.
Thanks much in advance.
I have not been back here for a long time.
I have written a script that monitors six (6) apps on our DMZ servers.
The script is scheduled to run three times a day.
Each time it runs, it sends email notifications to our Executive team advising them of whether any or all of the apps are either down or up.
The script works very well.
However, management has asked that I modify the script to add foreground color of red and background color of yellow to any URL of the app that is down along with the text indicating down.
For instance, when app sends out email notifications, it lists the apps and their status as follows:
Please find the status of the DMZ servers below:
WORKING
WORKING
DOWN
WORKING
They would like any app that is down to display as follows:
Please find the status of the DMZ servers below:
WORKING
WORKING
[highlight #EF2929] DOWN[/highlight]
WORKING
It's weird but I could not get this to work.
Any thought on I could get this to work?
I recognize the send mail bit has body (isbodyHtml) set to false but I can change this to true if I can the color thing to work.
Below is the working code.
Code:
using System;
using System.IO;
using System.Net;
using System.Net.Mail;
using System.Net.NetworkInformation;
using System.Text;
using System.Configuration;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Net.Http;
using System.Linq;
namespace showserverstatus
{
class Program
{
static async Task<int> Main(string[] args)
{
System.Collections.Concurrent.ConcurrentDictionary<string, string> urlToStatus = new();
IEnumerable < Task<bool> > tasks = args.Select(async url =>
{
bool result = await ServerStatusByAsync(url);
return urlToStatus.TryAdd(url, result ? "WORKING" : "DOWN");
});
bool[] results = await Task.WhenAll(tasks);
StringBuilder body = new("Please find the status of the DMZ servers below:");
foreach (var kvp in urlToStatus)
{
body.AppendLine();
body.AppendFormat("{0}: {1}", kvp.Key, kvp.Value);
}
await SendEmailAsync("DMZ Server Status", body.ToString());
await Task.Delay(3000);
// Return the number of servers which were down:
return results.Count(result => !result);
}
static async Task<bool> ServerStatusByAsync(string url)
{
HttpClient http = new();
using (HttpResponseMessage response = await http.GetAsync(url))
{
Console.WriteLine("GET {0}: {1}", url, response.StatusCode);
if (response.IsSuccessStatusCode)
{
await SendEmailAsync($"{url} WORKING", $"GET {url} returned {response.StatusCode}");
return true;
}
await SendEmailAsync($"{url} DOWN", $"GET {url} returned {response.StatusCode}");
return false;
}
}
static async Task SendEmailAsync(string subject, string body)
{
using MailMessage mm = new(ConfigurationManager.AppSettings["FromEmail"], "joeblow@gmail.com");
mm.To.Add("janeblow@yahoo.com");
mm.CC.Add("kevin.bruiner@hotmail.com");
mm.Subject = subject;
mm.Body = body;
mm.IsBodyHtml = false;
SmtpClient smtp = new()
{
Host = ConfigurationManager.AppSettings["Host"],
Port = int.Parse(ConfigurationManager.AppSettings["Port"]),
EnableSsl = true,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(ConfigurationManager.AppSettings["Username"], ConfigurationManager.AppSettings["Password"]),
};
await smtp.SendMailAsync(mm);
}
}
}
Thanks much in advance.