Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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);
        }