/// <summary> /// StartCheckingUrl method receives a separate stream for each site and checks it for availability. /// </summary> /// <param name="obj"> An object with all information about the checked site. </param> private void StartCheckingUrl(object obj) { SettingsWebSiteMonitoring.SettingsWebSiteMonitoring webSite = (SettingsWebSiteMonitoring.SettingsWebSiteMonitoring)obj; try { DateTime start = DateTime.Now; WebClient wc = new WebClient(); string HTMLSource = wc.DownloadString(webSite.UrlSiteForCheck); DateTime finish = DateTime.Now; int leadTime = (int)finish.Second - (int)start.Second; string message = "Attention! Method CheckUrl has checked "; if (leadTime < webSite.MaxExpectedServerResponseTimeSeconds) { lock (Locker) { Logger.WriteMessage($"WebSite {webSite.DataAdministrator.siteName} with addres {webSite.UrlSiteForCheck} has been opened successfully."); } } else { SendMessageAdmin(webSite, message + $"{webSite.DataAdministrator.siteName} webSite with addres {webSite.UrlSiteForCheck}. This webSite is not available."); } } catch (Exception e) { Console.WriteLine(e.Message); } Thread.Sleep(webSite.IntervalBetweenChecksSeconds * 1000); }
/// <summary> /// UpdateThreadsSitesDict method updates the data in the dictionary of key (site) - value pairs (separate thread). /// </summary> /// <param name="threadsSitesDict"> Dictionary of key (site) - value (separate thread). </param> private void UpdateThreadsSitesDict(Dictionary <string, Thread> threadsSitesDict) { if (ListWebSiteSettings.Count > threadsSitesDict.Count) { foreach (var webSite in ListWebSiteSettings) { if (!threadsSitesDict.ContainsKey(webSite.UrlSiteForCheck)) { threadsSitesDict[webSite.UrlSiteForCheck] = null; } } } if (ListWebSiteSettings.Count < threadsSitesDict.Count) { SettingsWebSiteMonitoring.SettingsWebSiteMonitoring result = null; List <string> keys = new List <string>(threadsSitesDict.Keys); foreach (var webSite in keys) { result = ListWebSiteSettings.Find((_webSite) => _webSite.UrlSiteForCheck == webSite); if (result == null) { threadsSitesDict.Remove(webSite); } } } }
/// <summary> /// SendMessage Admin method sends a letter to the administrator of the checked site if his site is unavailable. /// </summary> /// <param name="webSite"> Website with information about it. </param> /// <param name="message"> Text for message. </param> private async void SendMessageAdmin(SettingsWebSiteMonitoring.SettingsWebSiteMonitoring webSite, string message) { MailAddress from = new MailAddress("*****@*****.**"); MailAddress to = new MailAddress(webSite.DataAdministrator.adminEmailAddress); MailMessage m = new MailMessage(from, to); m.Subject = "Notification."; m.Body = message; SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587); smtp.Credentials = new NetworkCredential("*****@*****.**", ""); smtp.EnableSsl = true; await smtp.SendMailAsync(m); }