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); } } }
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); }
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); } }
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); } }
public void StopDiffGeneration(ImageComparisonContract imagesToStopProcessing) { TaskGenerator.GetTaskGenerator.RemoveImagesFromProcessing(imagesToStopProcessing.ImageComparisonList); }
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; } } }