Greetings again,
Sorry that I have to come back for help for this script.
Each time this script 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 thanks entirely to the great Richard Deeming.
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:
https://www.link1: WORKING
https://www.link2.com WORKING
https://www.link3.com DOWN
https://www.link4.com WORKING
They would like any app that is down to display as follows:
Please find the status of the DMZ servers below:
link 1: https://www.link1 WORKING
Link 2 https://www.link2.com WORKING
Link 3 https://www.link3.com DOWN
Link 4 https://www.link4.com WORKING
In this example, Link 3 https://www.link3.com DOWN
They would like the entire row of the URL that is down to be color coded, background color of yellow and text color of red.
Link 1 corresponds to the first URL, Link 2 to second URL, etc.
If it is only possible to just color code just the URL and the DOWN text without the link #, that would be fine too.
I am not sure if this is possible.
I could not figure a way to do this.
Any thought on how 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.
As always, many thanks in advance
Sorry that I have to come back for help for this script.
Each time this script 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 thanks entirely to the great Richard Deeming.
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:
https://www.link1: WORKING
https://www.link2.com WORKING
https://www.link3.com DOWN
https://www.link4.com WORKING
They would like any app that is down to display as follows:
Please find the status of the DMZ servers below:
link 1: https://www.link1 WORKING
Link 2 https://www.link2.com WORKING
Link 3 https://www.link3.com DOWN
Link 4 https://www.link4.com WORKING
In this example, Link 3 https://www.link3.com DOWN
They would like the entire row of the URL that is down to be color coded, background color of yellow and text color of red.
Link 1 corresponds to the first URL, Link 2 to second URL, etc.
If it is only possible to just color code just the URL and the DOWN text without the link #, that would be fine too.
I am not sure if this is possible.
I could not figure a way to do this.
Any thought on how 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.
Copy 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 {staticasync 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); }staticasync 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}");returntrue; }await SendEmailAsync($"{url} DOWN", $"GET {url} returned {response.StatusCode}");returnfalse; } }staticasync 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); } } }
As always, many thanks in advance