Example #1
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
        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();
        }
Example #5
0
        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);
        }
Example #6
0
 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));
     }
 }
Example #7
0
        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 ");
        }
Example #9
0
        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));
            }
        }
Example #10
0
        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));
 }