Advertisement
Guest User

Untitled

a guest
Aug 7th, 2018
652
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.61 KB | None | 0 0
  1. namespace ServerMonitorAlert
  2. {
  3.     class Program
  4.     {
  5.         static void Main(string[] args)
  6.         {
  7.  
  8.             Dictionary<string, string> Servers = new Dictionary<string, string>()
  9.             {
  10.                servers go here
  11.             };
  12.          
  13.  
  14.             Ping pingSender = new Ping();
  15.             PingOptions options = new PingOptions();
  16.             Servers nonRespondingServers = new Servers();
  17.             List<Servers> failedServers = new List<Servers>();
  18.  
  19.  
  20.             options.DontFragment = true;
  21.  
  22.             string data = "Please Respond";
  23.             byte[] buffer = Encoding.ASCII.GetBytes(data);
  24.             int timeout = 120;
  25.  
  26.             Console.WriteLine("Script Started: " + DateTime.Now);
  27.  
  28.             while (true)
  29.             {
  30.        
  31.                 try
  32.                 {
  33.                     if (!Directory.Exists(@"C:\ServerMonitor")) { Directory.CreateDirectory(@"C:\ServerMonitor"); }
  34.                     var currentDate = DateTime.Now.ToString("yyyy-MM-dd");
  35.                     StringBuilder sbLogName = new StringBuilder();
  36.                     sbLogName.Append(currentDate);
  37.                     sbLogName.Append(".txt");
  38.  
  39.                     var file = File.Create(@"C:\ServerMonitor\" + sbLogName);
  40.                     file.Close();
  41.  
  42.                     using (StreamWriter sw = new StreamWriter(@"C:\ServerMonitor\" + sbLogName))
  43.                     using (SmtpClient client = new SmtpClient())
  44.                     {
  45.                         {
  46.                             sw.WriteLine("Script Started: " + DateTime.Now + " (EST)");
  47.                             sw.Flush();
  48.                             client.Host = "smtp.office365.com";
  49.                             String userName = "";
  50.                             String password = ConfigurationManager.AppSettings["EmailPwd"];
  51.                             client.Credentials = new System.Net.NetworkCredential(userName, password);
  52.                             client.Port = 587;
  53.                             client.EnableSsl = true;
  54.  
  55.                             foreach (KeyValuePair<string, string> server in pscServers)
  56.                             {
  57.                                 PingReply reply = pingSender.Send(server.Value, timeout, buffer, options);
  58.  
  59.                                 sw.WriteLine(DateTime.Now + ": " + server.Key + " ping status: " + reply.Status.ToString());
  60.                                 sw.Flush();
  61.                                 Console.WriteLine(DateTime.Now + ": " + server.Key + " ping status: " + reply.Status.ToString());
  62.  
  63.                                 int count = 0;
  64.  
  65.                                 while (count < 3)
  66.                                 {
  67.                                     if (reply.Status == IPStatus.TimedOut || reply.Status == IPStatus.TimeExceeded || reply.Status == IPStatus.DestinationHostUnreachable)
  68.                                     {
  69.                                         sw.WriteLine(DateTime.Now + ": " + server.Key + " ping status: " + reply.Status.ToString() + " Redundant Check: " + count.ToString());
  70.                                         sw.Flush();
  71.                                         //Let's wait 15 seconds and try again just in case (false alert check)
  72.                                         Thread.Sleep(15000);
  73.                                         reply = pingSender.Send(server.Value, timeout, buffer, options);
  74.  
  75.                                     }
  76.                                     count++;
  77.                                 }
  78.                                
  79.                                 if (reply.Status == IPStatus.Success)
  80.                                 {
  81.                                     sw.WriteLine(DateTime.Now + " Ping Reply: " + reply.Status.ToString() + " Server: " + server.Key);
  82.                                     sw.Flush();
  83.  
  84.                                     nonRespondingServers.ComputerName = server.Key;
  85.                                     nonRespondingServers.IPAddress = server.Value;
  86.  
  87.                                     failedServers.Add(nonRespondingServers);
  88.                                     continue;
  89.  
  90.                                 }
  91.                                 if (failedServers.Count > 0)
  92.                                 {
  93.  
  94.                                     MailMessage msg = new MailMessage();
  95.                                     msg.To.Add(new MailAddress("(email here)"));
  96.                                     msg.From = new MailAddress(userName);
  97.                                     msg.Subject = "(anything you want)";
  98.                                     msg.IsBodyHtml = true;
  99.  
  100.                                     foreach (var fs in failedServers)
  101.                                     {
  102.                                         msg.Body =
  103.                                              "<br>" + DateTime.Now + "</br>" +
  104.                                             "<br> Affected Server: " + fs.ComputerName + "</br>" +
  105.                                             "<br>" + " IP: " + fs.IPAddress + "</br>" +
  106.                                             "<br>Ping Reply Status: " + reply.Status.ToString() + "</br>";
  107.  
  108.                                         client.Send(msg);
  109.                                         SendSMSAlert("(twilio info)", "(twilio info)", fs.ComputerName, fs.IPAddress, reply.Status.ToString(), new string[] { "(phone numbers here)" });
  110.                                        
  111.                                     }
  112.                                     failedServers.Clear();
  113.                                 }
  114.                                
  115.                             }
  116.                         }
  117.                     }
  118.                 }
  119.                 catch (Exception ex)
  120.                 {
  121.  
  122.                     Console.WriteLine(ex.Message);
  123.                     Console.ReadLine();
  124.                 }
  125.                 Thread.Sleep(60000);
  126.             }
  127.  
  128.         }
  129.         static void SendSMSAlert(string accountSID, string authToken, string serverName, string serverIP, string pingReplyStatus, string[] phoneNumbers)
  130.         {
  131.             foreach (var n in phoneNumbers)
  132.             {
  133.                 TwilioClient.Init(accountSID, authToken);
  134.                 var smsMsg = MessageResource.Create(to: new PhoneNumber(n),
  135.                     from: new PhoneNumber("(twilio number goes here)"),
  136.                     body: DateTime.Now +
  137.                            " Affected Server: " + serverName +
  138.                             " IP: " + serverIP +
  139.                             " Ping Reply Status: " + pingReplyStatus);
  140.             }
  141.  
  142.         }
  143.     }
  144. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement