private WebService.Proxy.MonitoringProxy.RmsReportMonitoringRaw MyTelnet(RmsClient client, RmsWebsiteMonitoring websiteMonitoring) { if (client == null) { throw new RMSWebException(this, "500", "MyTelnet failed. RmsClient cannot be null", true); } if (websiteMonitoring == null) { throw new RMSWebException(this, "500", "MyTelnet failed. RmsWebsiteMonitoring cannot be null", true); } try { RMS.Centralize.WebService.Proxy.MonitoringProxy.RmsReportMonitoringRaw rawMessage = new WebService.Proxy.MonitoringProxy.RmsReportMonitoringRaw(); rawMessage.ClientCode = client.ClientCode; rawMessage.MessageGroupCode = "W001"; //Uptime rawMessage.MessageDateTime = DateTime.Now; rawMessage.WebsiteMonitoringId = websiteMonitoring.WebsiteMonitoringId; using (var db = new MyDbContext()) { RmsTrnTelnetResult rmsTrn = db.RmsTrnTelnetResults.Create(); rmsTrn.ClientId = client.ClientId; rmsTrn.ClientCode = client.ClientCode; rmsTrn.HostName = client.IpAddress; rmsTrn.WebsiteMonitoringId = websiteMonitoring.WebsiteMonitoringId; rmsTrn.PortNumber = websiteMonitoring.PortNumber ?? 23; rawMessage.MessageRemark = "Telnet: " + client.IpAddress + ", Port: " + websiteMonitoring.PortNumber; try { using (TcpClient tcp = new TcpClient()) { int timeout = 2500; tcp.SendTimeout = timeout; tcp.ReceiveTimeout = timeout; int port = websiteMonitoring.PortNumber ?? 23; tcp.Connect(client.IpAddress, port); if (tcp.Connected) { //Logging rmsTrn.IsSuccess = true; rawMessage.Message = "OK"; } else { // Send Message to Sever : แจ้งว่า Ping ไม่ผ่าน rmsTrn.IsSuccess = false; rawMessage.Message = "TELNET_FAILED"; } tcp.Close(); } } catch (Exception e) { rawMessage.Message = "TELNET_FAILED"; rawMessage.MessageRemark += " Error: " + e.Message + (e.InnerException != null ? e.InnerException.Message : ""); rmsTrn.IsSuccess = false; rmsTrn.ErrorMessage = "Error: " + e.Message + (e.InnerException != null ? e.InnerException.Message : ""); } db.RmsTrnTelnetResults.Add(rmsTrn); db.SaveChanges(); return(rawMessage); } } catch (Exception ex) { throw new RMSWebException(this, "0500", "MyTelnet failed. " + ex.Message, ex, false); } }
private WebService.Proxy.MonitoringProxy.RmsReportMonitoringRaw MyHTTPStatus(RmsClient client, RmsWebsiteMonitoring websiteMonitoring) { if (client == null) { throw new RMSWebException(this, "500", "MyHTTPStatus failed. RmsClient cannot be null", true); } if (websiteMonitoring == null) { throw new RMSWebException(this, "500", "MyHTTPStatus failed. RmsWebsiteMonitoring cannot be null", true); } try { RMS.Centralize.WebService.Proxy.MonitoringProxy.RmsReportMonitoringRaw rawMessage = new WebService.Proxy.MonitoringProxy.RmsReportMonitoringRaw(); rawMessage.ClientCode = client.ClientCode; rawMessage.MessageGroupCode = "W001"; //Uptime rawMessage.MessageDateTime = DateTime.Now; rawMessage.WebsiteMonitoringId = websiteMonitoring.WebsiteMonitoringId; using (var db = new MyDbContext()) { RmsTrnHttpResult rmsTrn = db.RmsTrnHttpResults.Create(); rmsTrn.ClientId = client.ClientId; rmsTrn.ClientCode = client.ClientCode; rmsTrn.Url = websiteMonitoring.DomainName; rmsTrn.WebsiteMonitoringId = websiteMonitoring.WebsiteMonitoringId; rawMessage.MessageRemark = "URL: " + websiteMonitoring.DomainName; try { if (rmsTrn.Url == null) { throw new ArgumentNullException("rmsTrn.Url"); } if (rmsTrn.Url.ToLower().IndexOf("http:") < 0 && rmsTrn.Url.ToLower().IndexOf("https:") < 0) { // HTTP if (websiteMonitoring.WebsiteMonitoringProtocolId == "3") { rmsTrn.Url = "http://" + rmsTrn.Url.Trim(); } // HTTPS else if (websiteMonitoring.WebsiteMonitoringProtocolId == "4") { rmsTrn.Url = "https://" + rmsTrn.Url.Trim(); } } rawMessage.MessageRemark = "URL: " + rmsTrn.Url; if (!Uri.IsWellFormedUriString(rmsTrn.Url, UriKind.Absolute)) { throw new ArgumentException("rmsTrn.Url [" + rmsTrn.Url + "] is invalid format."); } var request = (HttpWebRequest)WebRequest.Create(rmsTrn.Url); request.Method = "HEAD"; request.Timeout = 5000; using (var response = (HttpWebResponse)request.GetResponse()) { rmsTrn.ResponseCode = (int)response.StatusCode; if (response.StatusCode == HttpStatusCode.OK) { rawMessage.Message = "OK"; } else { rawMessage.Message = "UPTIME_HTTP_FAILED"; rawMessage.MessageRemark += " HttpStatusCode: " + (int)response.StatusCode; } response.Close(); } } catch (WebException e) { if (e.Status == WebExceptionStatus.ProtocolError && e.Response != null) { var resp = (HttpWebResponse)e.Response; rmsTrn.ResponseCode = (int)resp.StatusCode; } rawMessage.Message = "UPTIME_HTTP_FAILED"; rawMessage.MessageRemark += " Error: " + e.Message + (e.InnerException != null ? e.InnerException.Message : ""); rmsTrn.IsSuccess = false; rmsTrn.ErrorMessage = "Error: " + e.Message + (e.InnerException != null ? e.InnerException.Message : ""); } catch (Exception e) { rawMessage.Message = "UPTIME_HTTP_FAILED"; rawMessage.MessageRemark += " Error: " + e.Message + (e.InnerException != null ? e.InnerException.Message : ""); rmsTrn.IsSuccess = false; rmsTrn.ErrorMessage = "Error: " + e.Message + (e.InnerException != null ? e.InnerException.Message : ""); } db.RmsTrnHttpResults.Add(rmsTrn); db.SaveChanges(); return(rawMessage); } } catch (Exception ex) { throw new RMSWebException(this, "0500", "MyHTTPStatus failed. " + ex.Message, ex, false); } }
private WebService.Proxy.MonitoringProxy.RmsReportMonitoringRaw MyPing(RmsClient client, RmsWebsiteMonitoring websiteMonitoring) { if (client == null) { throw new RMSWebException(this, "500", "MyPing failed. RmsClient cannot be null", true); } if (websiteMonitoring == null) { throw new RMSWebException(this, "500", "MyPing failed. RmsWebsiteMonitoring cannot be null", true); } try { RMS.Centralize.WebService.Proxy.MonitoringProxy.RmsReportMonitoringRaw rawMessage = new WebService.Proxy.MonitoringProxy.RmsReportMonitoringRaw(); rawMessage.ClientCode = client.ClientCode; rawMessage.MessageGroupCode = "W001"; //Uptime rawMessage.MessageDateTime = DateTime.Now; rawMessage.WebsiteMonitoringId = websiteMonitoring.WebsiteMonitoringId; using (var db = new MyDbContext()) { RmsTrnPingResult rmsTrnPing = db.RmsTrnPingResults.Create(); rmsTrnPing.ClientId = client.ClientId; rmsTrnPing.ClientCode = client.ClientCode; rmsTrnPing.HostName = client.IpAddress; rmsTrnPing.WebsiteMonitoringId = websiteMonitoring.WebsiteMonitoringId; rawMessage.MessageRemark = "Ping: " + client.IpAddress; int _sent = 0; int _received = 0; int _lost = 0; long?_min = null; long?_max = null; long?_avg = null; try { using (var ping = new Ping()) { // Create a buffer of 32 bytes of data to be transmitted. string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; byte[] buffer = Encoding.ASCII.GetBytes(data); // Wait 10 seconds for a reply. int timeout = 3000; // Set options for transmission: // The data can go through 64 gateways or routers // before it is destroyed, and the data packet // cannot be fragmented. PingOptions options = new PingOptions(64, true); int echoNum = 3; long totalTime = 0; for (int i = 0; i < echoNum; i++) { var reply = ping.Send(client.IpAddress, timeout, buffer, options); _sent++; if (reply != null && reply.Status == IPStatus.Success) { _received++; if (_max == null || reply.RoundtripTime > _max) { _max = reply.RoundtripTime; } if (_min == null || reply.RoundtripTime < _min) { _min = reply.RoundtripTime; } totalTime += reply.RoundtripTime; } else { _lost++; } if (reply != null && reply.Address != null) { rmsTrnPing.ReplyAddress = reply.Address.ToString(); } } if (_max != null) { _avg = totalTime / _sent; } } if (_sent == _lost) // ถ้าจำนวน lost เท่ากับ sent แสดงว่า ping ไม่ถึงทุก echo ถือว่าติดต่อ server ไม่ได้ { rawMessage.Message = "PING_FAILED"; } else { rawMessage.Message = "OK"; } } catch (Exception e) { rawMessage.Message = "PING_FAILED"; rawMessage.MessageRemark += " Error: " + e.Message + (e.InnerException != null ? e.InnerException.Message : ""); rmsTrnPing.ErrorMessage = "Error: " + e.Message + (e.InnerException != null ? e.InnerException.Message : ""); } rmsTrnPing.Sent = _sent; rmsTrnPing.Received = _received; rmsTrnPing.Lost = _lost; if (_max != null) { rmsTrnPing.MaximumValue = Convert.ToInt32(_max); } if (_max != null) { rmsTrnPing.MinimumValue = Convert.ToInt32(_min); } if (_avg != null) { rmsTrnPing.AverageValue = Convert.ToInt32(_avg); } db.RmsTrnPingResults.Add(rmsTrnPing); db.SaveChanges(); return(rawMessage); } } catch (Exception ex) { throw new RMSWebException(this, "0500", "MyPing failed [Host: " + client.IpAddress + "]. " + ex.Message, ex, true); } }