Пример #1
0
        public void ShouldRemoveMonitoringRequest()
        {
            // Arrange
            var repository     = new MonitoringRequestRepository(_fixture.Context);
            var monitorRequest = new MonitorRequest()
            {
                MonitorId = Guid.NewGuid(), ResponseCode = 200
            };

            // Act
            repository.Add(monitorRequest);
            repository.Save();

            monitorRequest = new MonitorRequest()
            {
                MonitorId = Guid.NewGuid(), ResponseCode = 200
            };
            repository.Add(monitorRequest);
            repository.Save();

            repository.Delete(monitorRequest);


            var count = repository.GetAll();


            //Assert
            Assert.Single(count);
        }
Пример #2
0
        private void CheckForHighResponseTime(MonitorRequest request, RequestSummary requestSummary)
        {
            EventType type = Facade.EventTypeDomainController.GetTypeByName(StaticStrings.ResponseTimeHigh);

            if (request.RequestTimeMiliSeconds > type.PeakValue)
            {
                //Lav notification
                Notification notification = new Notification();
                notification.Seen    = false;
                notification.Created = DateTime.Now;
                notification         = Facade.NotificationDomainController.Create(notification);
                //request should have serverId SOMEDAY
                // Facade.ServerDetailDomainController.GetLatestServerDetail(request.ServerId);

                int serverInterval = Facade.SettingDomainController.GetValueByName(StaticStrings.ServerDetailInterval);
                //If interval = 10min -> check 15min back
                ServerDetail latestServerDetailSummary = Facade.ServerDetailDomainController.GetLatestServerDetailByInterval(serverInterval + (serverInterval / 2));

                Event e = new Event();
                e.Created          = DateTime.Now;
                e.Value            = Convert.ToInt32(request.RequestTimeMiliSeconds);
                e.EventTypeId      = type.Id;
                e.NotificationId   = notification.Id;
                e.RequestSummaryId = requestSummary == null ? 0 : requestSummary.Id;
                e.ServerDetailId   = latestServerDetailSummary == null ? 0 : latestServerDetailSummary.Id;

                Facade.EventDomainController.Create(e);
            }
        }
Пример #3
0
        public static void Execute(string ip, int port, bool human = false)
        {
            _pressedKey = "";
            var items = new[]
            {
                "B", "C", "D", "F", "G", "H", "J", "K", "L",
                "M", "N", "P", "Q", "R", "S", "T", "V", "W",
                "X", "Y", "Z"
            };

            using (var actr = new ActRClient(ip, port))
            {
                actr.StartTraceMonitoring();
                actr.LoadActrModel("ACT-R:tutorial;unit2;demo2-model.lisp");
                actr.Reset();

                var numberList = new List <dynamic>();
                for (var i = 0; i < items.Length; ++i)
                {
                    numberList.Add(i);
                }
                var indexes = actr.PermuteList(numberList.ToArray());

                var targetItem = items[(long)indexes[0]];

                var window = actr.OpenExpWindow("Letter difference", true);

                actr.AddTextToWindow(window, targetItem, 125, 150);

                AbstractAddCommandRequest addCommandRequest = new AddCommandRequest(KeyPressAction,
                                                                                    "unit2-key-press",
                                                                                    "unit2-key-press",
                                                                                    "Assignment 2 task output-key monitor");

                actr.AddDispatcherCommand(addCommandRequest);
                var modelDispatcherMonitor = new MonitorRequest("output-key", "unit2-key-press");
                actr.AddDispatcherMonitor(modelDispatcherMonitor);

                if (!human)
                {
                    actr.InstallDevice(window);
                    actr.Run(10, true);
                }
                else
                {
                    while (_pressedKey.Equals(""))
                    {
                        Thread.Sleep(1);
                    }
                }

                //actr.RemoveDispatcherMonitor("output-key", "unit2-key-press");
                actr.RemoveDispatcherMonitor(modelDispatcherMonitor);
                actr.RemoveDispatcherCommand("unit2-key-press");

                actr.StopTraceMonitoring();
                Console.WriteLine(targetItem.ToLower().Equals(_pressedKey.ToLower()));
            }
        }
Пример #4
0
 public async Task <Monitor> UpdateAsync(MonitorRequest entity, object id)
 {
     return(await DbQuerySingleAsync <Monitor>("[dbo].[usp_MonitorUpdate]", new
     {
         entity.UserName,
         entity.MonitorName,
         Id = id
     }).ConfigureAwait(false));
 }
Пример #5
0
        public async Task <ApiResponse> Post([FromBody] MonitorRequest request)
        {
            if (!ModelState.IsValid)
            {
                throw new ApiProblemDetailsException(ModelState);
            }
            var result = await _monitorManager.CreateAsync(request).ConfigureAwait(false);

            return(new ApiResponse("Record successfully created.", result, Status201Created));
        }
Пример #6
0
        public async Task <ApiResponse> Put(long id, [FromBody] MonitorRequest request)
        {
            if (!ModelState.IsValid)
            {
                throw new ApiException(ModelState.AllErrors());
            }
            var result = await _monitorManager.UpdateAsync(request, id).ConfigureAwait(false);

            return(new ApiResponse("Record successfully updated.", result, Status201Created));
        }
Пример #7
0
        public static async Task Run([OrchestrationTrigger] IDurableOrchestrationContext monitorContext, ILogger log)
        {
            MonitorRequest input = monitorContext.GetInput <MonitorRequest>();

            if (!monitorContext.IsReplaying)
            {
                log.LogInformation($"Received monitor request. Location: {input?.Location}. Phone: {input?.Phone}.");
            }

            VerifyRequest(input);

            DateTime endTime = monitorContext.CurrentUtcDateTime.AddHours(18);

            if (!monitorContext.IsReplaying)
            {
                log.LogInformation($"Instantiating monitor for {input.Location}. Expires: {endTime}.");
            }

            while (monitorContext.CurrentUtcDateTime < endTime)
            {
                // Check the weather
                if (!monitorContext.IsReplaying)
                {
                    log.LogInformation($"Checking current weather conditions for {input.Location} at {monitorContext.CurrentUtcDateTime}.");
                }

                bool isClear = await monitorContext.CallActivityAsync <bool>("GetIsClear", input.Location);

                if (isClear)
                {
                    // It's not raining! Or snowing. Or misting. Tell our user to take advantage of it.
                    if (!monitorContext.IsReplaying)
                    {
                        log.LogInformation($"Detected clear weather for {input.Location}. Notifying {input.Phone}.");
                    }

                    await monitorContext.CallActivityAsync("SendGoodWeatherAlert", input.Phone);

                    break;
                }
                else
                {
                    // Wait for the next checkpoint
                    var nextCheckpoint = monitorContext.CurrentUtcDateTime.AddMinutes(30);
                    if (!monitorContext.IsReplaying)
                    {
                        log.LogInformation($"Next check for {input.Location} at {nextCheckpoint}.");
                    }

                    await monitorContext.CreateTimer(nextCheckpoint, CancellationToken.None);
                }
            }

            log.LogInformation($"Monitor expiring.");
        }
Пример #8
0
 private void GetBolumName()
 {
     MonitorRequest.OnDataLoaded = (monitor) =>
     {
         this.Dispatcher.Invoke(DispatcherPriority.Background, new Action(() =>
         {
             MonitorNameText.Text = monitor.Name;
         }));
     };
     MonitorRequest.GetMonitor(Settings.MonitorId);
 }
        public void RequestMonitor(IInteractor monitor, MonitorRequest monitorRequest)
        {
            Log.Info($"Received monitor from {monitor} on \"{monitorRequest}\"");

            if (monitorRequest.IsAdd)
            {
                _repository.AddMonitor(monitor, monitorRequest.Feed);
            }
            else
            {
                _repository.RemoveMonitor(monitor, monitorRequest.Feed, false);
            }
        }
Пример #10
0
 public static void AddRequest(MonitorRequest req)
 {
     var requests = GetRequests();
     requests.AddOrUpdate(req.ResourceId, req, (key, oldReq) =>
     {
         if(req.IssuedAt > oldReq.IssuedAt)
         {
             oldReq.IssuedAt = req.IssuedAt;
             oldReq.AccessToken = req.AccessToken;
         }
         return oldReq;
     });
 }
Пример #11
0
        /// <summary>
        /// Making http request for monitoring url and save response results into database
        /// </summary>
        /// <param name="monitor"></param>
        /// <returns></returns>
        public async Task RequestUrlAndSaveDb(Monitor monitor)
        {
            try {
                HttpResponseMessage request = null;
                var monitorRequest          = new MonitorRequest()
                {
                    MonitorId = monitor.Id
                };

                try {
                    var client = new HttpClient();
                    client.Timeout = TimeSpan.FromSeconds(15);
                    request        = await client.GetAsync(monitor.Url);

                    monitorRequest.ResponseCode    = (short)request.StatusCode;
                    monitorRequest.ResponseMessage = request.StatusCode.ToString();
                    monitorRequest.IsSuccess       = request.IsSuccessStatusCode;
                }
                catch (HttpRequestException requestException) {
                    monitorRequest.ResponseCode    = 500;
                    monitorRequest.ResponseMessage = "ServerError";
                    monitorRequest.IsSuccess       = false;
                }

                //Notification
                if (!monitorRequest.IsSuccess)
                {
                    var notificationModel = new NotificationModel {
                        DisplayName           = "Down Time Alerter",
                        Subject               = $"The Site Named {monitor.Name} Is Unreachable",
                        Message               = $"The site named {monitor.Name} ({monitor.Url}) is unreachable. Response Code: {monitorRequest.ResponseCode}, Response Message: {monitorRequest.ResponseMessage}",
                        NotificationUserModel = new NotificationUserModel {
                            Mail = monitor.User.Email
                        }
                    };

                    NotificationService.Notify(notificationModel);
                }


                //Monitor Request Save
                MonitoringRequestService.Add(monitorRequest);
                MonitoringRequestService.Save();

                //Monitor Update
                UpdateMonitoringLastStatusAndLastCheckDate(monitor, monitorRequest.IsSuccess);
            }
            catch (Exception ex) {
                Logger.LogError($"Error occured at HangfireService.RequestUrlAndSaveDb(Monitor monitor), {ex}");
            }
        }
Пример #12
0
        private static void VerifyRequest(MonitorRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request), "An input object is required.");
            }

            if (request.Location == null)
            {
                throw new ArgumentNullException(nameof(request.Location), "A location input is required.");
            }

            if (string.IsNullOrEmpty(request.Phone))
            {
                throw new ArgumentNullException(nameof(request.Phone), "A phone number input is required.");
            }
        }
Пример #13
0
        public void ShouldUpdateMonitoringRequest()
        {
            // Arrange
            var repository     = new MonitoringRequestRepository(_fixture.Context);
            var monitorRequest = new MonitorRequest()
            {
                MonitorId = Guid.NewGuid(), ResponseCode = 200
            };

            // Act
            repository.Add(monitorRequest);
            repository.Save();

            monitorRequest.ResponseCode = 500;

            repository.Edit(monitorRequest);
            repository.Save();

            var result = repository.GetById(monitorRequest.Id);

            //Assert
            Assert.Equal(500, result.ResponseCode);
        }
Пример #14
0
 public static void RemoveRequest(MonitorRequest req)
 {
     var outVar = new MonitorRequest();
     GetRequests().TryRemove(req.ResourceId, out outVar);
 }
Пример #15
0
 public async Task <Monitor> CreateAsync(MonitorRequest entity)
 {
     return(await DbQuerySingleAsync <Monitor>("[dbo].[usp_MonitorInsert]", entity).ConfigureAwait(false));
 }
Пример #16
0
 public static void Enqueue(MonitorRequest req)
 {
     GetInstance().requestQueue.Enqueue(req);
 }
Пример #17
0
        public HttpResponseMessage PostRequest(MonitorRequest request)
        {
            if (request == null)
            {
                return(new HttpResponseMessage(HttpStatusCode.BadRequest));
            }
            int            interval       = Facade.SettingDomainController.GetValueByName(StaticStrings.ResponseTimeInterval);
            RequestSummary requestSummary = Facade.RequestSummaryDomainController.GetRequestSummaryLastMinutes(interval);

            if (requestSummary == null)
            {
                requestSummary = Facade.RequestSummaryDomainController.CreateRequestSummary(requestSummary, interval);
            }
            //System.Configuration.ConfigurationManager.AppSettings["RequestTimeWatchUrl"];
            if (request.Url.Contains(Model.Properties.Settings.Default["RequestTimeWatchUrl"].ToString()))
            {
                //total requests
                var totalRequests = requestSummary.Requests;
                //Current average time
                var averageTime = requestSummary.ResponseTime;
                //total request time
                var totalRequestsTime = averageTime * totalRequests;
                totalRequests++;
                //the new average = total time + the requests time split by totalrequest + 1
                var newAverageTime = (totalRequestsTime + (int)request.RequestTimeMiliSeconds) / totalRequests;
                requestSummary.ResponseTime = newAverageTime;

                requestSummary.Requests = totalRequests;

                CheckForHighResponseTime(request, requestSummary);

                Facade.RequestSummaryDomainController.UpdateRequestSummary(requestSummary);
            }


            UserSummary userSummary = Facade.UserSummaryDomainController.GetUserSummeryByUserAndRequestSummary(request.UserId, request.Device, requestSummary.Id);

            if (userSummary != null)
            {
                userSummary.Request++;
                Facade.UserSummaryDomainController.UpdateUserSummary(userSummary);
            }
            else
            {
                UserSummary newUserSummary = new UserSummary();
                newUserSummary.UserId           = request.UserId;
                newUserSummary.DateTimeCreated  = DateTime.Now;
                newUserSummary.Device           = request.Device;
                newUserSummary.RequestSummaryId = requestSummary.Id;
                newUserSummary.Request          = 1;
                Facade.UserSummaryDomainController.CreateUserSummary(newUserSummary);
                if (request.Device == (int)MyEnums.DeviceTypes.Mobile)
                {
                    requestSummary.MobileUsers++;
                }
                if (request.Device == (int)MyEnums.DeviceTypes.Web)
                {
                    requestSummary.WebUsers++;
                }
                Facade.RequestSummaryDomainController.UpdateRequestSummary(requestSummary);
            }

            try
            {
                Request r = new Request();
                r.DateCreated            = DateTime.Now;
                r.RequestTimeMiliSeconds = Convert.ToInt32(request.RequestTimeMiliSeconds);
                r.Url    = request.Url;
                r.UserId = request.UserId;
                r.Device = request.Device;
                Facade.RequestDomainController.Create(r);
            }
            catch (Exception e)
            {
                log.Error("Error in request api controller. Request Part: " + e);
            }
            return(new HttpResponseMessage(HttpStatusCode.OK));
        }
 private Task <HttpResponseMessage> Monitor(MonitorRequest request)
 {
     return(_sut.Monitor(request)
            .ExecuteAsync(It.IsAny <CancellationToken>()));
 }
Пример #19
0
        private static double Trial(ActRClient actr, bool runInRealTime, double onset)
        {
            _answers   = new List <string>();
            _responses = new List <string>();

            actr.Reset();

            int freq;

            var row = actr.ActrRandom(3);

            var window = actr.OpenExpWindow("Sperling Experiment", runInRealTime);

            var letters = new dynamic[]
            {
                "B",
                "C",
                "D",
                "F",
                "G",
                "H",
                "J",
                "K",
                "L",
                "M",
                "N",
                "P",
                "Q",
                "R",
                "S",
                "T",
                "V",
                "W",
                "X",
                "Y",
                "Z"
            };

            letters = actr.PermuteList(letters);
            for (var i = 0; i < 3; ++i)
            {
                for (var j = 0; j < 4; ++j)
                {
                    var txt = letters[i + j * 4];
                    if (i == row)
                    {
                        _answers.Add((string)txt);
                    }
                    actr.AddTextToWindow(window, (string)txt, 75 + j * 50, 101 + i * 50);
                }
            }

            actr.InstallDevice(window);
            switch (row)
            {
            case 0:
                freq = 2000;
                break;

            case 1:
                freq = 1000;
                break;

            default:
                freq = 500;
                break;
            }

            actr.NewToneSound(freq, 0.5, onset);
            actr.ScheduleEventRelative(
                900 + actr.ActrRandom(200), "clear-exp-window",
                new dynamic[] { window.Title });

            AbstractAddCommandRequest addCommandRequest = new AddCommandRequest(list => KeyPressAction(list),
                                                                                "sperling-response",
                                                                                "KeyPressAction",
                                                                                "Sperling task key press response monitor");

            actr.AddDispatcherCommand(addCommandRequest);
            var modelDispatcherMonitor = new MonitorRequest("output-key", "sperling-response");

            actr.AddDispatcherMonitor(modelDispatcherMonitor);

            actr.Run(30, runInRealTime);

            actr.RemoveDispatcherMonitor("output-key", "sperling-response");
            actr.RemoveDispatcherCommand("KeyPressAction");

            var score = 0;

            foreach (var s in _responses)
            {
                if (_answers.Contains(s.ToUpper()))
                {
                    ++score;
                }
            }

            Console.Write("answers: [");
            foreach (var a in _answers)
            {
                Console.Write("'" + a + "'");
            }
            Console.Write("]\n");
            Console.Write("responses: [");
            foreach (var r in _responses)
            {
                Console.Write("'" + r + "'");
            }
            Console.Write("]\n");
            return(score);
        }