public HttpResponseMessage PostServerDetailCurrent(ServerDetailModel serverDetails) { try { if (serverDetails == null || serverDetails.ServerName == null) { return(new HttpResponseMessage(HttpStatusCode.BadRequest)); } //Server regonized? Server s = Facade.ServerDomainController.GetServerByName(serverDetails.ServerName); if (s == null) { s = new Server(); s.Name = serverDetails.ServerName; s = Facade.ServerDomainController.CreateServer(s); } //Create everytime! ServerDetailCurrent currentServerDetail = new ServerDetailCurrent(); currentServerDetail.Handles = serverDetails.Handles; currentServerDetail.Utilization = serverDetails.Utilization; currentServerDetail.Thread = serverDetails.Thread; currentServerDetail.Processes = serverDetails.Processes; currentServerDetail.UpTime = serverDetails.Uptime; currentServerDetail.RAMUtilization = serverDetails.RAMUtilization; currentServerDetail.RAMAvailable = serverDetails.RAMAvailable; currentServerDetail.RAMTotal = serverDetails.RAMTotal; currentServerDetail.BytesReceived = serverDetails.BytesReceived; currentServerDetail.BytesSent = serverDetails.BytesSent; currentServerDetail.NetworkUtilization = serverDetails.NetworkUtilization; currentServerDetail.ServerId = s.Id; Facade.ServerDetailCurrentDomainController.CreateServerDetailCurrent(currentServerDetail); //Styrer den sidste del af grafen (Bliver slettet løbende) //ServerSummary hvert interval! //der gemmes et summary hvert interval (10 MIN). DVS 13:35, består af data fra 13:30-13:40 //ved 13:30, kan vi gemme (summary 13:45) //ved 13:40, kan vi gemme (summary 13:35) OSV //KL 13:50:01, tjekker vi 15minutter tilbage (1,5 interval) //Get the interval int serverInterval = Facade.SettingDomainController.GetValueByName(StaticStrings.ServerDetailInterval); //If interval = 10min -> check 15min back ServerDetail latestServerDetailSummary = Facade.ServerDetailDomainController.GetLatestServerDetailByInterval(serverInterval + (serverInterval / 2)); //If null, create new if (latestServerDetailSummary == null) { //get all servercurrent List <ServerDetailCurrent> currentServerDetailsList = Facade.ServerDetailCurrentDomainController.GetAll(); //create new serverdetailSummary with the averages from all servercurrent ServerDetail serverDetailSummary = new ServerDetail(); serverDetailSummary.Handles = Convert.ToInt32(currentServerDetailsList.Average(x => x.Handles)); serverDetailSummary.RAMAvailable = Convert.ToInt32(currentServerDetailsList.Average(x => x.RAMAvailable)); serverDetailSummary.RAMTotal = Convert.ToInt32(currentServerDetailsList.Average(x => x.RAMTotal)); serverDetailSummary.Thread = Convert.ToInt32(currentServerDetailsList.Average(x => x.Thread)); serverDetailSummary.Processes = Convert.ToInt32(currentServerDetailsList.Average(x => x.Processes)); serverDetailSummary.Utilization = Convert.ToInt32(currentServerDetailsList.Average(x => x.Utilization)); serverDetailSummary.ServerId = currentServerDetailsList.FirstOrDefault().ServerId; serverDetailSummary.UpTime = currentServerDetailsList.LastOrDefault().UpTime; serverDetailSummary.Created = GetStartOfInterval(DateTime.Now, serverInterval); serverDetailSummary.BytesSent = currentServerDetailsList.Sum(x => x.BytesSent); serverDetailSummary.BytesReceived = currentServerDetailsList.Sum(x => x.BytesReceived); serverDetailSummary.NetworkUtilization = Convert.ToInt32(currentServerDetailsList.Average(x => x.NetworkUtilization)); latestServerDetailSummary = Facade.ServerDetailDomainController.Create(serverDetailSummary); } //Events - Could add more RequestSummary requestSummary = Facade.RequestSummaryDomainController.GetRequestSummaryLastMinutes(serverInterval); EventLogic ev = new EventLogic(); //Move most logic to this. Maybe make generic method for creating events? Model.EventType cpuEventType = Facade.EventTypeDomainController.GetTypeByName(StaticStrings.CpuUsageHigh); if (currentServerDetail.Utilization > cpuEventType.PeakValue) { //Notification Notification n = Facade.NotificationDomainController.Create(new Notification()); //Event Model.Event e = new Model.Event(); //ServerDetail -> tage nuværende snapshot, eller tage summary eller begge? e.ServerDetailId = latestServerDetailSummary.Id; //Server summary // requestSummary i dette tidsrum e.RequestSummaryId = requestSummary == null ? 0 : requestSummary.Id; e.Created = DateTime.Now; e.EventTypeId = cpuEventType.Id; e.NotificationId = n.Id; e.Value = serverDetails.Utilization; Model.Event createdEvent = Facade.EventDomainController.Create(e); //Notify by email? if (cpuEventType.Notify) { EmailManager emailManager = new EmailManager(); } } Model.EventType ramEventType = Facade.EventTypeDomainController.GetTypeByName(StaticStrings.LowMemory); if (currentServerDetail.RAMAvailable < ramEventType.PeakValue) { //Notification Notification n = Facade.NotificationDomainController.Create(new Notification()); //Event Model.Event e = new Model.Event(); e.ServerDetailId = latestServerDetailSummary.Id; e.RequestSummaryId = requestSummary == null ? 0 : requestSummary.Id; e.Created = DateTime.Now; e.EventTypeId = ramEventType.Id; e.NotificationId = n.Id; e.Value = serverDetails.RAMAvailable; Model.Event createdEvent = Facade.EventDomainController.Create(e); //Notify by email? if (ramEventType.Notify) { EmailManager emailManager = new EmailManager(); } } } catch (Exception e) { var response = new HttpResponseMessage(HttpStatusCode.BadRequest); response.Content = new StringContent("Error: " + e); return(response); } //Slet Dem her? int setupInterval = Facade.SettingDomainController.GetValueByName(StaticStrings.ServerDetailInterval); Facade.ServerDetailCurrentDomainController.DeleteAllOlderThanInterval(setupInterval); return(new HttpResponseMessage(HttpStatusCode.OK)); }
public ServerDataViewModel GetServerData(int serverId) { ServerDataViewModel sdvm = new ServerDataViewModel(); try { sdvm.NetworkViewModel = new NetworkViewModel(); //Graph data sdvm.CPUUtilizationGraphData = GenerateGraphData(serverId); //Servers available (for dropdown) sdvm.Servers = GetServers(); // USER ID LATER sdvm.Created = DateTime.Now; //SHOW SUMMARY - USE THIS CODE //int serverInterval = Facade.SettingDomainController.GetValueByName(StaticStrings.ServerDetailInterval); //ServerDetail latestServerDetails = Facade.ServerDetailDomainController.GetLatestServerDetailByInterval(serverInterval); ServerDetailCurrent latestServerDetails = Facade.ServerDetailCurrentDomainController.GetLatest(); if (latestServerDetails != null) { sdvm.CurrentStatus = true; sdvm.Handles = latestServerDetails.Handles; sdvm.Threads = latestServerDetails.Thread; // sdvm.Uptime = CalculateUpTime(latestServerDetails.UpTime); The computer uptime, sdvm.RAMAvailable = Convert.ToInt32(latestServerDetails.RAMAvailable); sdvm.Processes = latestServerDetails.Processes; sdvm.RAMTotal = Convert.ToInt32(latestServerDetails.RAMTotal); sdvm.NetworkViewModel.NetworkUtilization = latestServerDetails.NetworkUtilization; } //Should refactors int interval = Facade.SettingDomainController.GetValueByName(StaticStrings.ServerDetailInterval); List <ServerDetail> serverDetail = Facade.ServerDetailDomainController.GetOneDayServerDetail(serverId); if (serverDetail != null && serverDetail.Count > 0) { sdvm.NetworkViewModel.Download = serverDetail.Sum(x => x.BytesReceived); sdvm.NetworkViewModel.Upload = serverDetail.Sum(x => x.BytesSent); int totalReceived = serverDetail.Max(x => x.BytesReceived); int totalSent = serverDetail.Max(x => x.BytesSent); string totalReceivedFormatted = SizeSuffix(totalReceived, 1) + "/S"; string totalSentFormatted = SizeSuffix(totalSent, 1) + "/S"; sdvm.NetworkViewModel.PeakDownloadString = totalReceivedFormatted; sdvm.NetworkViewModel.PeakUploadString = totalSentFormatted; sdvm.NetworkViewModel.NetworkUtilization = Convert.ToInt32(serverDetail.Average(x => x.NetworkUtilization)); } bool dataLastMinut = Facade.ServerDetailCurrentDomainController.HasAchievedDataLastFifteenSeconds(); //get last up/down event and assign ServerStatus to this. var lastDown = Facade.EventDomainController.GetLatestServerDownEvent(); var lastUp = Facade.EventDomainController.GetLatestServerUpEvent(); bool ServerStatus = dataLastMinut; if (lastUp != null && lastDown != null) { if (lastDown.Created > lastUp.Created) { ServerStatus = false; } else { ServerStatus = true; } } if (!dataLastMinut) //Server considered down { if (ServerStatus) // If serverstatus was up, then it just went down and should create event { ServerStatus = false; CreateServerDownEvent(sdvm); //Create event, and finish last server up event Model.Event lastUpEvent = Facade.EventDomainController.GetLatestServerUpEvent(); if (lastUpEvent != null) { TimeSpan ts = DateTime.Now.Subtract(lastUpEvent.Created); lastUpEvent.Value = Convert.ToInt32(ts.TotalMinutes); Facade.EventDomainController.UpdateEvent(lastUpEvent); } else { CreateServerUpEvent(sdvm); } } else //Server down and last serverstatus was false, we just update the last downevents value, and the "downtime" { Model.Event lastDownEvent = Facade.EventDomainController.GetLatestServerDownEvent(); if (lastDownEvent != null) { UpdateValueAndUptime(sdvm, lastDownEvent); } else { CreateServerDownEvent(sdvm); } } } else //Server is up { if (!ServerStatus) // If serverstatus was down, then it just went up and should create event { ServerStatus = true; CreateServerUpEvent(sdvm); //Create event, and finish last server up event Model.Event lastDownEvent = Facade.EventDomainController.GetLatestServerDownEvent(); if (lastDownEvent != null) { TimeSpan ts = DateTime.Now.Subtract(lastDownEvent.Created); lastDownEvent.Value = Convert.ToInt32(ts.TotalMinutes); Facade.EventDomainController.UpdateEvent(lastDownEvent); } else { CreateServerDownEvent(sdvm); } } else { //just update the value Model.Event lastUpEvent = Facade.EventDomainController.GetLatestServerUpEvent(); if (lastUpEvent != null) { UpdateValueAndUptime(sdvm, lastUpEvent); } else { CreateServerUpEvent(sdvm); } } } sdvm.CurrentStatus = ServerStatus; } catch (Exception e) { log.Error("ServerLogic - GetServerData: " + e); } return(sdvm); }