public async Task UpdatePageAndTaskResult(AppPage page, AppTask task, CbtScreenshot result) { // update page UpdateDefinition <AppPage> pageUpdate = null; var resultId = result.screenshot_test_id.ToString(); if (task.Type == AppTaskType.Desktop) { if (page.DesktopResultId != resultId) { pageUpdate = Builders <AppPage> .Update.Set(d => d.DesktopResultId, resultId); } } else { if (page.MobileResultId != resultId) { pageUpdate = Builders <AppPage> .Update.Set(d => d.MobileResultId, resultId); } } if (pageUpdate != null) { var pageFilter = Builders <AppPage> .Filter.Eq(d => d.Id, page.Id); await pageCollection.UpdateOneAsync(pageFilter, pageUpdate); } // update task var filter = Builders <AppTask> .Filter.Eq(d => d.Id, task.Id); var update = Builders <AppTask> .Update.Set(d => d.State, AppTaskState.Executed) .Set(d => d.FinishedAt, DateTime.UtcNow); await taskCollection.UpdateOneAsync(filter, update); }
public async Task <CbtScreenshot> TakeScreenshot(AppTask task) { var resultId = task.Type == AppTaskType.Desktop ? page.DesktopResultId : page.MobileResultId; var browsers = task.Type == AppTaskType.Desktop ? project.DesktopBrowsers : project.MobileBrowsers; string apiUri; if (string.IsNullOrWhiteSpace(resultId)) { // new one apiUri = CbtAPIBaseUri; } else { // update one var info = await GetScreenshotInfo(resultId); var version = info.versions.First(); apiUri = Url.Combine(CbtAPIBaseUri, resultId, version.version_id.ToString()); } var targetUrl = "https://" + Url.Combine(project.Domain, page.Path); var body = JsonConvert.SerializeObject(new { format = "json", url = targetUrl, browsers = browsers }); var content = new StringContent(body); content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json"); var tryCount = 0; LastError = null; Logger.Log($"Start taking {task.Type} screenshot of {targetUrl}"); START: HttpResponseMessage res = await client.PostAsync(apiUri, content); if (tryCount > 3) { Logger.Log($"Stop {task.Type} screenshot of {targetUrl} by retry 3 times"); return(null); } if (res.StatusCode != HttpStatusCode.OK) { LastError = await res.Content.ReadAsStringAsync(); Logger.Log($"{task.Type} screenshot of {targetUrl} failed, Error: {LastError}"); Thread.Sleep(10_000); tryCount++; goto START; } var json = await res.Content.ReadAsStringAsync(); var result = JsonConvert.DeserializeObject <CbtScreenshot>(json); return(result); }