public void Save(SelfHealthMessage message) { var sqlQuery = String.Format("Insert into dbo.SelfHealthMessages([AppID],[Title],[DateChecked],[OverallStatus],[TimeElasped],[AdditionalInformation]) values('{0}','{1}','{2}','{3}','{4}','{5}') SELECT SCOPE_IDENTITY();", message.AppID, message.Results[0].Title, message.DateChecked, message.OverallStatus, message.Results[0].TimeElasped, message.Results[0].AdditionalInformation); try { using (var connection = new SqlConnection(ConnectionString)) { using (var sCommand = new SqlCommand(sqlQuery, connection)) { if (connection.State == ConnectionState.Closed) { connection.Open(); } sCommand.ExecuteScalar(); } }; } catch (Exception ex) { throw ex; } }
public static void SendHealthMessage(SelfHealthMessage healthMessage) { AppStatus AggregatedStatus = AppStatus.Up; string failedMessagesJson = string.Empty; //Step 1: Get Aggregate Status of AppID depeding on status of related health messages var checkStatus = GetStatusBasedOnHealthChecks(healthMessage.AppID); //Step 2: Check if there is a App set up with this ID if there is, get agg status of APP depending on status of Child Apps. Component component = ComponentLogic.GetByAppId(healthMessage.AppID); if (component != null) { var appStatus = GetStatusBasedOnChildrenApps(component, AggregatedStatus); AggregatedStatus = ReturnAggregateStatus(checkStatus, appStatus); //Update the Status of the Application in the database component.Status = AggregatedStatus; component.LastUpdate = DateTime.Now; ComponentLogic.EditEntity(component); } string status = AggregatedStatus.ToString(); GlobalHost.ConnectionManager.GetHubContext <HealthMessageHub>().Clients.All.addHealthMessage(healthMessage.AppID, healthMessage.Results[0].Title, String.Format("{0:d/M/yyyy HH:mm:ss}", healthMessage.DateChecked), String.Format("{0:HH:mm:ss}", healthMessage.DateChecked), Convert.ToString(healthMessage.OverallStatus), healthMessage.Results[0].TimeElasped, healthMessage.Results[0].AdditionalInformation, AggregatedStatus.ToString(), failedMessagesJson); }
private void SendContinualHealthBeat(object state) { var msg = new SelfHealthMessage() { DateChecked = DateTime.Now, AppID = _SelfHealthCheckConfiguration.AppID, IPAddress = _SelfHealthCheckConfiguration.IPAddress, Results = null, OverallStatus = CheckResultStatus.HealthBeat }; SendMessage(msg); heartBeatTimer.Change(5000, Timeout.Infinite); }
static void Main(string[] args) { SelfHealthMessage demo = new SelfHealthMessage(); demo.AdditionalInformation = "Just Received A Health Check"; demo.AppID = "3"; demo.DateChecked = DateTime.Now; demo.Title = "This is a demo health message"; demo.OverallStatus = CheckResultStatus.Up; demo.TimeElapsed = 3; new HealthMessageDAO().Save(demo); HealthMessageUtility.SendHealthMessage(demo); Console.ReadLine(); }
public List <SelfHealthMessage> ReturnLastUniqueMessagesWithStatusNotUp(string appID) { List <SelfHealthMessage> messages = new List <SelfHealthMessage>(); var sqlQuery = String.Format(@"WITH CTE AS ( SELECT * , ROW_NUMBER() OVER ( PARTITION BY TITLE ORDER BY Id DESC) AS rownumber FROM [dbo].[SelfHealthMessages] WHERE (AppID ='{0}') ) SELECT * FROM CTE WHERE rownumber = 1 AND OverallStatus != 'Up'", appID); try { using (var connection = new SqlConnection(ConnectionString)) { using (var sCommand = new SqlCommand(sqlQuery, connection)) { if (connection.State == ConnectionState.Closed) { connection.Open(); } SqlDataReader reader = sCommand.ExecuteReader(); if (reader.HasRows) { while (reader.Read()) { SelfHealthMessage message = new SelfHealthMessage(); message.AppID = reader["AppID"].ToString(); message.DateChecked = Convert.ToDateTime(reader["DateChecked"]); message.OverallStatus = (Contracts.CheckResultStatus)Enum.Parse(typeof(Contracts.CheckResultStatus), reader["OverallStatus"].ToString()); messages.Add(message); } } else { messages = null; } reader.Close(); } }; } catch (Exception ex) { throw ex; } return(messages); }
void SendMessage(SelfHealthMessage msg) { try { HttpResponseMessage response = client.PostAsJsonAsync <SelfHealthMessage>("SelfHealthCheck/api/HealthMessage/ReceiveMessage", msg).Result; if (!response.IsSuccessStatusCode) { new LogWriter(string.Format("Error while posting- {0}", response.Content.ReadAsStringAsync().Result)); } } catch (Exception ex) { new LogWriter(string.Format("Error Message- {0}: Stack Trace- {1} :Inner Exception- {2}", ex.Message, ex.StackTrace, ex.InnerException == null ? "" : ex.InnerException.Message)); } }
public void SaveOrUpdateHealthStatus(SelfHealthMessage healthMessage) { HealthMessageDAO dao = new HealthMessageDAO(); SelfHealthMessage healthStatus = dao.GetCheckTypeForApp(healthMessage); if (healthStatus == null) { Trace.TraceInformation("Health Status about to save"); dao.SaveHealthStatus(healthMessage); Trace.TraceInformation("Health Status Saved Succesfully"); } else { Trace.TraceInformation("Health Status about to update"); dao.UpdateHealthStatus(healthMessage); Trace.TraceInformation("Health Status Updated Succesfully"); } }
public static void SendHealthMessage(SelfHealthMessage healthMessage) { // new HealthMessageLogic().SaveOrUpdateHealthStatus(healthMessage); Trace.TraceInformation("Health Messaged Received " + healthMessage.AppID + "Status is " + healthMessage.OverallStatus); AppStatus AggregatedStatus = AppStatus.Up; string failedMessagesJson = string.Empty; Trace.TraceInformation("About to get status based on health checks " + healthMessage.AppID); //Step 1: Get Aggregate Status of AppID depeding on status of related health messages var checkStatus = GetStatusBasedOnHealthChecks(healthMessage.AppID, healthMessage.IPAddress); Trace.TraceInformation("Check Status is " + checkStatus); Trace.TraceInformation("About to get Component " + healthMessage.AppID); //Step 2: Check if there is an App set up with this ID if there is, get agg status of APP depending on status of Child Apps. Component component = ComponentLogic.GetByAppId(healthMessage.AppID); if (component != null) { var appStatus = GetStatusBasedOnChildrenApps(component, AggregatedStatus); AggregatedStatus = ReturnAggregateStatus(checkStatus, appStatus); //Update the Status of the Application in the database component.Status = AggregatedStatus; component.LastUpdate = DateTime.Now; ComponentLogic.EditEntity(component); } Trace.TraceInformation("About to send info to client " + healthMessage.AppID); string status = AggregatedStatus.ToString(); var connect = GlobalHost.ConnectionManager.GetHubContext <HealthMessageHub>(); connect.Clients.All.test(); var message = JsonConvert.SerializeObject(healthMessage); connect.Clients.All.sendHealthMessage(message); // to health message ui connect.Clients.All.sendHealthStatus(message, AggregatedStatus.ToString()); //to monitor ui Trace.TraceInformation("Health Info has been sent to client "); }
public void Process([FromBody] SelfHealthMessage message) { var connectionString = System.Configuration.ConfigurationManager.AppSettings["ConnectionString"]; HealthMessageDAO messageDao = new HealthMessageDAO(connectionString); try { if (message.OverallStatus == CheckResultStatus.HealthBeat) { Console.WriteLine("It's an heart Beat"); HealthMessageUtility.SendHeartBeat(message); } else { Trace.TraceInformation("Health Messaged Received {0} , IP Address {1}", message.AppID, message.IPAddress); messageDao.Save(message); Trace.TraceInformation("Health Messaged Saved....Proceeding to save or update status " + message.AppID); //if u are configured as an app then save in the second table and send health message if (new ComponentLogic().isAppIDExist(message.AppID)) { new HealthMessageLogic().SaveOrUpdateHealthStatus(message); Trace.TraceInformation("About to Send Health Message "); HealthMessageUtility.SendHealthMessage(message); Trace.TraceInformation("Health Message Sent "); } } } catch (Exception ex) { new LogWriter(string.Format("Error Message- {0}: Stack Trace- {1} :Inner Exception- {2}", ex.Message, ex.StackTrace, ex.InnerException == null ? "" : ex.InnerException.Message)); } }
private void RunChecksMulti(object state) { var check = state as ICheckConfiguration; try { //Run all checks List <ICheckResult> checkResults = new List <ICheckResult>(); var checkRunnerProxy = (CheckRunnerAttribute)Attribute.GetCustomAttribute(check.GetType(), typeof(CheckRunnerAttribute)); if (checkRunnerProxy != null) { var checkRunner = (ICheckRunner)Activator.CreateInstance(checkRunnerProxy.CheckRunnerType); if (checkRunner != null) { try { checkResults.Add(checkRunner.Check(check)); } catch (Exception ex) { Trace.TraceInformation("Exception Occured while running check" + ex.Message + ex.StackTrace); //TODO: Log Exception and return failed result checkResults.Add(new CheckResult() { Title = check.Title, Status = CheckResultStatus.Unknown, AdditionalInformation = string.Format("Error: {0}", ex.Message) }); } } else { //TODO: Log Check Runner specified not valid checkResults.Add(new CheckResult() { Title = check.Title, Status = CheckResultStatus.Unknown, AdditionalInformation = "Check Runner specified is not valid" }); } } else { //TODO: Log No Check Runner Attribute found checkResults.Add(new CheckResult() { Title = check.Title, Status = CheckResultStatus.Unknown, AdditionalInformation = "Check Runner Attribute not found" }); } //Send Results to the BUS //Global.Bus.Send("DejaVu.SelfHealthCheck", new SelfHealthMessage() //{ // DateChecked = DateTime.Now, // AppID = _SelfHealthCheckConfiguration.AppID, // Results = checkResults, // OverallStatus = checkResults[0].Status // //TODO: Compute overall status based on Check results //}); DateTime currentTime = DateTime.Now; double val = _SelfHealthCheckConfiguration.CheckInterval / 1000; this._SelfHealthCheckConfiguration.NextCheckTime = DateTime.Now.AddSeconds(_SelfHealthCheckConfiguration.CheckInterval / 1000); var msg = new SelfHealthMessage() { DateChecked = DateTime.Now, AppID = _SelfHealthCheckConfiguration.AppID, Results = checkResults, OverallStatus = checkResults[0].Status, Title = checkResults[0].Title, AdditionalInformation = checkResults[0].AdditionalInformation, TimeElapsed = checkResults[0].TimeElasped, IPAddress = _SelfHealthCheckConfiguration.IPAddress, NextCheckTime = _SelfHealthCheckConfiguration.NextCheckTime, //TODO: Compute overall status based on Check results }; SendMessage(msg); } finally { if (_checkTimers.ContainsKey(check) && _checkTimers[check] != null) { _checkTimers[check].Change((long)this._SelfHealthCheckConfiguration.CheckInterval, Timeout.Infinite); } } }
public static void SendHeartBeat(SelfHealthMessage healthMessage) { GlobalHost.ConnectionManager.GetHubContext <HealthMessageHub>().Clients.All.sendHealthBeat(healthMessage.AppID, String.Format("{0:d/M/yyyy HH:mm:ss}", healthMessage.DateChecked)); }