public void SendChildStatusMessageToParentApps(string appId, string status) { Component component = ComponentLogic.GetByAppId(appId); if (component != null) { var parentComponents = ComponentLogic.GetParentComponents(component); if (parentComponents != null && parentComponents.Count > 0) { foreach (var parent in parentComponents) { AppStatus AggregatedStatus = AppStatus.Up; if (status == "Down" || parent.HeartBeatStatus == HeartBeatStatus.Down) { AggregatedStatus = AppStatus.Down; } else { //check through health message status and other children component messages to determine final status //what of if the parent app is down, not sending heart beats this check would then not be sufficient var checkStatus = HealthMessageUtility.GetStatusBasedOnHealthChecks(parent.AppID); var appStatus = HealthMessageUtility.GetStatusBasedOnChildrenApps(parent); // AggregatedStatus = HealthMessageUtility.ReturnAggregateStatus(checkStatus, appStatus); } //Update the Status of the Application in the database parent.Status = AggregatedStatus; parent.LastUpdate = DateTime.Now; ComponentLogic.EditEntity(parent); Clients.All.reportAppStatus(parent.AppID, AggregatedStatus.ToString()); } } } }
public void LoadAllApplications() { List <Component> components = ComponentLogic.GetAllComponents(); foreach (var component in components) { List <AppStatus> replicaAppStatus = null; List <string> subComponentIPs = new HealthMessageLogic().GetIPAddressesForApp(component.AppID); var data = JsonConvert.SerializeObject(component); if (subComponentIPs == null || subComponentIPs.Count() == 0) { Clients.All.loadAllApllications(data, null, null); continue; } Trace.TraceInformation("About to Get Status based on Replica apps"); replicaAppStatus = HealthMessageUtility.GetStatusBasedOnReplicas(component, subComponentIPs); Trace.TraceInformation("Replica App Status Done "); //string data = JsonConvert.SerializeObject(component); Clients.All.loadAllApllications(data, JsonConvert.SerializeObject(subComponentIPs), replicaAppStatus); } }