示例#1
0
        private void SendProcessedImagesToKeplerService(object sender, ElapsedEventArgs eventArgs)
        {
            var processedImages = GetProcessedImages().ToList();

            if (processedImages.Count > 0)
            {
                try
                {
                    var client  = new RestClient(KeplerServiceUrl);
                    var request = new RestRequest("UpdateScreenShots", Method.POST);

                    var imageComparisonContract = new ImageComparisonContract()
                    {
                        ImageComparisonList = processedImages
                    };

                    request.RequestFormat = DataFormat.Json;
                    request.AddJsonBody(imageComparisonContract);

                    client.Execute(request);
                }
                catch (Exception ex)
                {
                    EventLog.WriteEntry("Kepler.ImageProcessor.Service", ex.Message);
                }
            }
        }
示例#2
0
        public void GenerateJsonListOfImageComparison()
        {
            var message = new ImageComparisonContract()
            {
                ImageComparisonList = new List <ImageComparisonInfo>()
            };

            var fileNames = Directory.GetFiles(@"e:\Temp\Screen\");
            var images    = new List <ImageComparisonInfo>();

            for (int index = 0; index < 10; index += 2)
            {
                var imageInfo = new ImageComparisonInfo()
                {
                    ScreenShotId    = index,
                    FirstImagePath  = fileNames[index],
                    SecondImagePath = fileNames[index + 1],
                    DiffImagePath   = outputFile + "_" + index + ".png"
                };

                images.Add(imageInfo);
            }

            message.ImageComparisonList.AddRange(images);

            var client  = new RestClient("http://localhost:8900/KeplerImageProcessorService/");
            var request = new RestRequest("AddImagesForDiffGeneration", Method.POST);

            request.RequestFormat = DataFormat.Json;
            request.AddJsonBody(message);

            client.Execute(request);
        }
示例#3
0
        public void UpdateScreenShots(ImageComparisonContract imageComparisonContract)
        {
            foreach (var imageComparisonInfo in imageComparisonContract.ImageComparisonList)
            {
                var screenShotRepo = ScreenShotRepository.Instance;

                var screenShot = screenShotRepo.Get(imageComparisonInfo.ScreenShotId);

                // if current screenshot status = Stopped, then just update diff image path field
                if (screenShot.Status == ObjectStatus.Stopped)
                {
                    screenShot.PreviewImagePath    = imageComparisonInfo.SecondPreviewPath;
                    screenShot.BaseLinePreviewPath = imageComparisonInfo.FirstPreviewPath;

                    // Generate Url paths
                    UrlPathGenerator.ReplaceFilePathWithUrl(screenShot);
                    screenShotRepo.Update(screenShot);
                    continue;
                }

                // if Failed
                if (imageComparisonInfo.IsImagesDifferent || imageComparisonInfo.ErrorMessage != "")
                {
                    screenShot.Status       = ObjectStatus.Failed;
                    screenShot.ErrorMessage = imageComparisonInfo.ErrorMessage;
                }
                else // if Passed
                {
                    if (imageComparisonInfo.LastPassedScreenShotId.HasValue)
                    {
                        var oldPassedScreenShot =
                            screenShotRepo.Get(imageComparisonInfo.LastPassedScreenShotId.Value);
                        oldPassedScreenShot.IsLastPassed = false;
                        screenShotRepo.Update(oldPassedScreenShot);
                    }

                    screenShot.Status       = ObjectStatus.Passed;
                    screenShot.IsLastPassed = true;
                }

                screenShot.DiffImagePath   = imageComparisonInfo.DiffImagePath;
                screenShot.DiffPreviewPath = imageComparisonInfo.DiffPreviewPath;

                screenShot.PreviewImagePath    = imageComparisonInfo.SecondPreviewPath;
                screenShot.BaseLinePreviewPath = imageComparisonInfo.FirstPreviewPath;

                // Generate Url paths
                UrlPathGenerator.ReplaceFilePathWithUrl(screenShot);

                screenShotRepo.Update(screenShot);
            }
        }
示例#4
0
 public void AddImagesForDiffGeneration(ImageComparisonContract imagesToProcess)
 {
     try
     {
         TaskGenerator.GetTaskGenerator.AddImagesForProcessing(imagesToProcess.ImageComparisonList);
     }
     catch (Exception ex)
     {
         throw new ErrorMessage()
               {
                   Code             = ErrorMessage.ErorCode.AddTaskToImageWorkerError,
                   ExceptionMessage = ex.Message
               }.ConvertToWebFaultException(HttpStatusCode.InternalServerError);
     }
 }
示例#5
0
 public void StopDiffGeneration(ImageComparisonContract imagesToStopProcessing)
 {
     TaskGenerator.GetTaskGenerator.RemoveImagesFromProcessing(imagesToStopProcessing.ImageComparisonList);
 }
示例#6
0
        private void SendComparisonInfoToWorkers(object sender, ElapsedEventArgs eventArgs)
        {
            // if there is already executing build
            if (BuildRepository.Instance.GetBuildsByStatus(ObjectStatus.InProgress).Any())
            {
                return;
            }

            var workers = ImageWorkerRepository.Instance.FindAll()
                          .Where(worker => worker.WorkerStatus == ImageWorker.StatusOfWorker.Available).ToList();

            if (workers.Count == 0)
            {
                return;
            }

            var buildInQueue = BuildRepository.Instance.GetBuildsByStatus(ObjectStatus.InQueue).FirstOrDefault();

            if (buildInQueue == null)
            {
                return;
            }

            var screenShots = ScreenShotRepository.Instance.GetInQueueScreenShotsForBuild(buildInQueue.Id);

            screenShots.Each(item => item.Status = ObjectStatus.InProgress);
            ScreenShotRepository.Instance.Update(screenShots);
            UpdateObjectStatusesScheduler.GetScheduler.Invoke();

            var imageComparisonContainers = ConvertScreenShotsToImageComparison(screenShots).ToList();

            // split all screenshots for comparison uniformly for all workers
            var imgComparisonPerWorker = imageComparisonContainers.Count() / workers.Count();

            if (imgComparisonPerWorker == 0)
            {
                imgComparisonPerWorker = imageComparisonContainers.Count();
            }


            var workerIndex = 0;

            while (imageComparisonContainers.Any())
            {
                var jsonMessage = new ImageComparisonContract()
                {
                    ImageComparisonList = imageComparisonContainers.Take(imgComparisonPerWorker).ToList()
                };

                var requestIsSuccessfull = true;
                try
                {
                    var client  = new RestClient(workers[workerIndex++].WorkerServiceUrl);
                    var request = new RestRequest("AddImagesForDiffGeneration", Method.POST);

                    request.RequestFormat = DataFormat.Json;
                    request.AddJsonBody(jsonMessage);

                    var response             = client.Execute(request);
                    var responseErrorMessage = RestImageProcessorClient.GetResponseErrorMessage(response);

                    if (!String.IsNullOrEmpty(responseErrorMessage))
                    {
                        throw new WebException(responseErrorMessage);
                    }
                }
                catch (Exception ex)
                {
                    requestIsSuccessfull = false;

                    ErrorMessageRepository.Instance.Insert(new ErrorMessage()
                    {
                        ExceptionMessage =
                            $"Error happend when process is tried to send images for comparison to worker: '{workers[workerIndex++].Name}'.  {ex.Message} {ex.StackTrace}"
                    });
                }

                if (requestIsSuccessfull)
                {
                    if (imageComparisonContainers.Count() < imgComparisonPerWorker)
                    {
                        imageComparisonContainers.Clear();
                    }
                    else
                    {
                        imageComparisonContainers.RemoveRange(0, imgComparisonPerWorker);
                    }
                }

                if (workerIndex == workers.Count)
                {
                    workerIndex = 0;
                }
            }
        }