Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- namespace ServerMonitorAlert
- {
- class Program
- {
- static void Main(string[] args)
- {
- Dictionary<string, string> Servers = new Dictionary<string, string>()
- {
- servers go here
- };
- Ping pingSender = new Ping();
- PingOptions options = new PingOptions();
- Servers nonRespondingServers = new Servers();
- List<Servers> failedServers = new List<Servers>();
- options.DontFragment = true;
- string data = "Please Respond";
- byte[] buffer = Encoding.ASCII.GetBytes(data);
- int timeout = 120;
- Console.WriteLine("Script Started: " + DateTime.Now);
- while (true)
- {
- try
- {
- if (!Directory.Exists(@"C:\ServerMonitor")) { Directory.CreateDirectory(@"C:\ServerMonitor"); }
- var currentDate = DateTime.Now.ToString("yyyy-MM-dd");
- StringBuilder sbLogName = new StringBuilder();
- sbLogName.Append(currentDate);
- sbLogName.Append(".txt");
- var file = File.Create(@"C:\ServerMonitor\" + sbLogName);
- file.Close();
- using (StreamWriter sw = new StreamWriter(@"C:\ServerMonitor\" + sbLogName))
- using (SmtpClient client = new SmtpClient())
- {
- {
- sw.WriteLine("Script Started: " + DateTime.Now + " (EST)");
- sw.Flush();
- client.Host = "smtp.office365.com";
- String userName = "";
- String password = ConfigurationManager.AppSettings["EmailPwd"];
- client.Credentials = new System.Net.NetworkCredential(userName, password);
- client.Port = 587;
- client.EnableSsl = true;
- foreach (KeyValuePair<string, string> server in pscServers)
- {
- PingReply reply = pingSender.Send(server.Value, timeout, buffer, options);
- sw.WriteLine(DateTime.Now + ": " + server.Key + " ping status: " + reply.Status.ToString());
- sw.Flush();
- Console.WriteLine(DateTime.Now + ": " + server.Key + " ping status: " + reply.Status.ToString());
- int count = 0;
- while (count < 3)
- {
- if (reply.Status == IPStatus.TimedOut || reply.Status == IPStatus.TimeExceeded || reply.Status == IPStatus.DestinationHostUnreachable)
- {
- sw.WriteLine(DateTime.Now + ": " + server.Key + " ping status: " + reply.Status.ToString() + " Redundant Check: " + count.ToString());
- sw.Flush();
- //Let's wait 15 seconds and try again just in case (false alert check)
- Thread.Sleep(15000);
- reply = pingSender.Send(server.Value, timeout, buffer, options);
- }
- count++;
- }
- if (reply.Status == IPStatus.Success)
- {
- sw.WriteLine(DateTime.Now + " Ping Reply: " + reply.Status.ToString() + " Server: " + server.Key);
- sw.Flush();
- nonRespondingServers.ComputerName = server.Key;
- nonRespondingServers.IPAddress = server.Value;
- failedServers.Add(nonRespondingServers);
- continue;
- }
- if (failedServers.Count > 0)
- {
- MailMessage msg = new MailMessage();
- msg.To.Add(new MailAddress("(email here)"));
- msg.From = new MailAddress(userName);
- msg.Subject = "(anything you want)";
- msg.IsBodyHtml = true;
- foreach (var fs in failedServers)
- {
- msg.Body =
- "<br>" + DateTime.Now + "</br>" +
- "<br> Affected Server: " + fs.ComputerName + "</br>" +
- "<br>" + " IP: " + fs.IPAddress + "</br>" +
- "<br>Ping Reply Status: " + reply.Status.ToString() + "</br>";
- client.Send(msg);
- SendSMSAlert("(twilio info)", "(twilio info)", fs.ComputerName, fs.IPAddress, reply.Status.ToString(), new string[] { "(phone numbers here)" });
- }
- failedServers.Clear();
- }
- }
- }
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex.Message);
- Console.ReadLine();
- }
- Thread.Sleep(60000);
- }
- }
- static void SendSMSAlert(string accountSID, string authToken, string serverName, string serverIP, string pingReplyStatus, string[] phoneNumbers)
- {
- foreach (var n in phoneNumbers)
- {
- TwilioClient.Init(accountSID, authToken);
- var smsMsg = MessageResource.Create(to: new PhoneNumber(n),
- from: new PhoneNumber("(twilio number goes here)"),
- body: DateTime.Now +
- " Affected Server: " + serverName +
- " IP: " + serverIP +
- " Ping Reply Status: " + pingReplyStatus);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement