public async Task RegisterCheckProcessor(CheckSettings check, IRequest <CommandResult> command) { if (_handlersDict.ContainsKey(check.Type)) { throw new ArgumentException("Handler for check type" + check.Type + " already declared!"); } _handlersDict.TryAdd(check.Type, command); }
public async Task <Check> RunVsUnitTest(CheckSettings checkSettings, string testName, string path) { var checkState = await _processor.ExecuteVsTest(testName, path); return(new Check { Settings = checkSettings, State = checkState }); }
public void RemoveFromSchedule(CheckSettings check) { if (_cancellationTokensMap.ContainsKey(check.Type)) { var cancellationToken = _cancellationTokensMap[check.Type]; cancellationToken.Cancel(); } }
public async Task AddToSchedule(CheckSettings check) { var cancellationTokenSource = new CancellationTokenSource(); _cancellationTokensMap.TryAdd(check.Type, cancellationTokenSource); _schedulesMap.TryAdd(check.Type, check.NormalSchedule); var checkProcessor = new ScheduledTask(_processor); await checkProcessor.ProcessCheck(check.Type, check.NormalSchedule, cancellationTokenSource.Token); }
public async Task <Check> CheckApi(CheckSettings settings, CityRequest requestModel) { var result = new Check { Settings = settings }; result.State.LastCheckTime = DateTime.Now; return(await PerformCheck(settings.EnvironmentId, result, requestModel)); }
public async Task <Check> CheckApiSearch(CheckSettings settings) { var result = new Check { Settings = settings }; result.State.LastCheckTime = DateTime.Now; return(await PerformSearchCheck(settings.EnvironmentId, result)); }
private string GetSchedule(CheckSettings settings, StatusesEnum status) { switch (status) { case StatusesEnum.CRITICAL: return(settings.CriticalSchedule); case StatusesEnum.WARNING: return(settings.WarningSchedule); case StatusesEnum.OK: default: return(settings.NormalSchedule); } }
public ActionResult UserSettings() { //check the settings for the Dashboard view var checkSettings = new CheckSettings(); var settings = checkSettings.GetSettings(User.Identity.Name); ViewBag.SettingsHideClosed = checkSettings.HideClosed; ViewBag.SettingsIconType = checkSettings.IconType; ViewBag.SettingsMiniMenu = checkSettings.MiniMenu; ViewBag.SettingsQuickLinks = checkSettings.QuickLinks; ViewBag.SettingsShowDashStages = checkSettings.ShowDashStages; return(PartialView("_layOutSettings")); }
public void PathToCsProjFileIsNotSet() { var app = new CommandAppTester(); app.Configure(config => { config.PropagateExceptions(); config.AddCommand <CheckCommand>("check"); }); CommandAppResult result = app.Run(new[] { "check" }); // No .csproj file is given or can be found, so we expect -1 Assert.Equal(-1, result.ExitCode); Assert.NotNull(result.Settings); Assert.IsType <CheckSettings>(result.Settings); CheckSettings settings = result.Settings as CheckSettings; Assert.Null(settings !.PathToCsProjFile); }
public async Task <Check> CheckWebUISearch(CheckSettings settings) { var result = new Check { Settings = settings }; result.State.LastCheckTime = DateTime.Now; var errorMessages = new List <string>(); var baseUrl = new EnvironmentHelper().GetEnvironmentUrl(settings.EnvironmentId); using (var driver = _driversFactory.GetChromeDriver()) { driver.Navigate().GoToUrl(baseUrl); var searchInput = driver.FindElementById("search-autocomplete"); searchInput.SendKeys("oc90"); var searchBtn = driver.FindElementByClassName("search-form__submit"); searchBtn.Click(); await Task.Delay(1000); var currentUrl = driver.Url; if (currentUrl != baseUrl + "/search-result?searchPhrase=oc90") { errorMessages.Add("URL отличается от ожидаемого. Результат: " + currentUrl); } } if (errorMessages.Count > 0) { result.State.Status = StatusesEnum.CRITICAL; result.State.Description = "Обнаружены следующие проблемы: " + string.Join(", ", errorMessages); return(result); } result.State.Status = StatusesEnum.OK; result.State.Description = "Проблем не обнаружено"; return(result); }
public static async Task <RepoReference[]> DiscoverReferences(IOperationContext monitor, string url, string rev, Git.IGitRepositoryManager repositoryManager = null) { var repo = new SeriesRepo { Location = RepositoryLocation.FromUrl(url), TargetRevision = rev }; repo.BeginUpdate(); try { var settings = new CheckSettings(); settings.RepoContext = new RepoContext(); if (repositoryManager != null) { settings.GitRepositoryManager = repositoryManager; } repo.CalculateCurrentRevision(monitor, settings); await FillReferences(monitor, settings, repo, false); } finally { repo.EndUpdate(); } return(repo.References.ToArray()); }
public async Task <Check> CheckHomePageLoad(CheckSettings settings) { var result = new Check { Settings = settings }; result.State.LastCheckTime = DateTime.Now; string address = new EnvironmentHelper().GetEnvironmentUrl(settings.EnvironmentId); try { var loadResult = await _httpService.GetPageLoadResult(address, TimeSpan.FromSeconds(30)); if (loadResult.ResponseStatus != HttpStatusCode.OK) { result.State.Status = StatusesEnum.CRITICAL; result.State.Description = "Сайт недоступен"; return(result); } if (loadResult.LoadTime > TimeSpan.FromSeconds(3)) { result.State.Status = StatusesEnum.WARNING; result.State.Description = "Время загрузки более 3 сек: " + loadResult.LoadTime.Seconds; return(result); } result.State.Status = StatusesEnum.OK; result.State.Description = "Проблем не обнаружено"; } catch (Exception ex) { result.State.Status = StatusesEnum.CRITICAL; result.State.Description = "Исключение во время проверки: " + ex.Message; } return(result); }
public async Task ReSchedule(CheckSettings settings, StatusesEnum status) { var newSchedule = GetSchedule(settings, status); var currentSchedule = ""; _schedulesMap.TryGetValue(settings.Type, out currentSchedule); if (currentSchedule == newSchedule) { return; } CancellationTokenSource cts = null; _cancellationTokensMap.TryGetValue(settings.Type, out cts); cts.Cancel(); var cancellationTokenSource = new CancellationTokenSource(); var ctsUpd = _cancellationTokensMap.TryUpdate(settings.Type, cancellationTokenSource, cts); var schUpd = _schedulesMap.TryUpdate(settings.Type, newSchedule, currentSchedule); var checkProcessor = new ScheduledTask(_processor); await checkProcessor.ProcessCheck(settings.Type, newSchedule, cancellationTokenSource.Token); }
public ActionResult DisplayMenu() { ViewBag.PassportOver = 0; ViewBag.PassportNearly = 0; //check if there are any Staff Passports coming up for renewal. var staffPassportModels = db.StaffPassportModels.ToList(); foreach (var passport in staffPassportModels) { var today = DateTime.Today; var monthsDiff = (passport.ResearchPassportRenewal - today).Days; if (monthsDiff <= 90) { ViewBag.PassportOver++; } else { if (monthsDiff <= 180) { ViewBag.PassportNearly++; } } } //check the settings for the Dashboard view var checkSettings = new CheckSettings(); var settings = checkSettings.GetSettings(User.Identity.Name); ViewBag.SettingsHideClosed = checkSettings.HideClosed; ViewBag.SettingsIconType = checkSettings.IconType; ViewBag.SettingsMiniMenu = checkSettings.MiniMenu; ViewBag.SettingsQuickLinks = checkSettings.QuickLinks; ViewBag.SettingsShowDashStages = checkSettings.ShowDashStages; return(PartialView("_layOutSideBar")); }
public async Task <Check> PerformCheck(CheckSettings settings, bool isMobile = false) { var expectedMarker = isMobile ? "MOBILE" : "DESKTOP"; var result = new Check { Settings = settings }; result.State.LastCheckTime = DateTime.Now; var requestTimeout = TimeSpan.FromSeconds(30); string address = new EnvironmentHelper().GetEnvironmentUrl(settings.EnvironmentId); try { var warningThreshold = 3; var errors = new List <string>(); var startTime = DateTime.Now; var htmlResult = (isMobile) ? await _httpService.GetHtmlStructureAsGoogleBotMobile(address, requestTimeout) : await _httpService.GetHtmlStructureAsGoogleBotDesktop(address, requestTimeout); var endTime = DateTime.Now; var footerMarker = htmlResult.FindNodesByClassName("div", "footer__holder").FirstOrDefault()?.FirstChild; if (footerMarker == null) { errors.Add("footer MOBILE marker not found"); } if (footerMarker.InnerText != expectedMarker) { errors.Add($"Expected footer marker is '{expectedMarker}'. Received is '{footerMarker.InnerText}'"); } var appMarker = htmlResult.FindNodesByClassName("div", "wrapper__holder").FirstOrDefault()?.FirstChild; if (appMarker == null) { errors.Add("app MOBILE marker not found"); } if (appMarker.InnerText != expectedMarker) { errors.Add($"Expected app marker is '{expectedMarker}'. Received is '{footerMarker.InnerText}'"); } if (errors.Count() > 0) { result.State.Status = StatusesEnum.CRITICAL; result.State.Description = "Обнаружены следующие проблемы: " + string.Join(",", errors); return(result); } var execTime = endTime - startTime; if (execTime > TimeSpan.FromSeconds(warningThreshold)) { result.State.Status = StatusesEnum.WARNING; result.State.Description = string.Format("Время ответа больше порога {0} сек: {1:0.00}", warningThreshold, execTime.TotalSeconds); return(result); } result.State.Status = StatusesEnum.OK; result.State.Description = "Проблем не обнаружено"; } catch (TaskCanceledException) { result.State.Status = StatusesEnum.CRITICAL; result.State.Description = string.Format("Превышен интервал выполнения запроса: {0} сек", requestTimeout.Seconds); } catch (HttpRequestException ex) { result.State.Status = StatusesEnum.CRITICAL; result.State.Description = "Ошибка http-запроса: " + ex.Message; } catch (Exception ex) { Console.WriteLine(ex);// result.State.Status = StatusesEnum.CRITICAL; result.State.Description = "Ошибка при обработке HTML"; } return(result); }
public async Task <Check> CheckMetaInfo(CheckSettings settings) { var result = new Check { Settings = settings }; result.State.LastCheckTime = DateTime.Now; var requestTimeout = TimeSpan.FromSeconds(45); string address = new EnvironmentHelper().GetEnvironmentUrl(settings.EnvironmentId) + "/category/shiny-id49-3"; try { var warningThreshold = 3; var errors = new List <string>(); var startTime = DateTime.Now; var htmlResult = await _httpService.GetHtmlStructureAsGoogleBotDesktop(address, requestTimeout); var endTime = DateTime.Now; var title = htmlResult.GetTitle(); if (title != "Шины от autodoc.ua (оригинал, аналог) | autodoc.ua") { errors.Add("title incorrect: " + title); } var robots = htmlResult.GetMetaTagContent("robots"); if (settings.EnvironmentId == (int)EnvironmentsEnum.Prod && robots != "index, follow") { errors.Add("'robots' tag content incorrect: " + robots); } var keywords = htmlResult.GetMetaTagContent("keywords"); if (keywords != "шины") { errors.Add("'keywords' tag content incorrect: " + keywords); } var description = htmlResult.GetMetaTagContent("description"); if (string.IsNullOrWhiteSpace(description)) { errors.Add("'description' tag content incorrect: " + description); } var canonicalLink = htmlResult.GetLinkContent("canonical"); if (canonicalLink != address) { errors.Add("'link' for rel='canonical' is incorrect: " + canonicalLink); } var nextLink = htmlResult.GetLinkContent("next"); if (nextLink != address + "?page=2") { errors.Add("'link' for rel='next' is incorrect: " + nextLink); } var prevLink = htmlResult.GetLinkContent("prev"); if (prevLink != null) { errors.Add("'link' for rel='prev' is present on page 1:" + prevLink); } if (errors.Count() > 0) { result.State.Status = StatusesEnum.CRITICAL; result.State.Description = "Обнаружены следующие проблемы: " + string.Join(",", errors); return(result); } var execTime = endTime - startTime; if (execTime > TimeSpan.FromSeconds(warningThreshold)) { result.State.Status = StatusesEnum.WARNING; result.State.Description = string.Format("Время ответа больше порога {0} сек: {1:0.00}", warningThreshold, execTime.TotalSeconds); return(result); } result.State.Status = StatusesEnum.OK; result.State.Description = "Проблем не обнаружено"; } catch (TaskCanceledException) { result.State.Status = StatusesEnum.CRITICAL; result.State.Description = string.Format("Превышен интервал выполнения запроса: {0} сек", requestTimeout.Seconds); } catch (HttpRequestException ex) { result.State.Status = StatusesEnum.CRITICAL; result.State.Description = "Ошибка http-запроса: " + ex.Message; } catch { result.State.Status = StatusesEnum.CRITICAL; result.State.Description = "Ошибка при обработке HTML"; } return(result); }
public async Task <Check> CheckCategoryInfo(CheckSettings settings) { var result = new Check { Settings = settings }; result.State.LastCheckTime = DateTime.Now; var requestTimeout = TimeSpan.FromSeconds(45); string address = new EnvironmentHelper().GetEnvironmentUrl(settings.EnvironmentId) + "/category/kolenval-i-komplektuyushhie-id53-3"; try { var warningThreshold = 3; var errors = new List <string>(); var startTime = DateTime.Now; var htmlResult = await _httpService.GetHtmlStructureAsGoogleBotDesktop(address, requestTimeout); var endTime = DateTime.Now; var breadcrumbs = htmlResult.FindNodesByName("autodoc-breadcrumbs").FirstOrDefault(); if (breadcrumbs == null) { errors.Add("breadcrumbs element not found"); } var breadcumbStrings = new List <string> { "href=\"/\"", //home "href=\"/category/dvigatel-sistemy-i-komponenty-id1-3\"", //Двигатель, системы и компоненты "href=\"/category/blok-porshnevaya-gruppa-id8-3\"", //Блок, поршневая группа }; var missingCrumbs = new List <string>() as IEnumerable <string>; if (breadcrumbs != null && !breadcrumbs.InnerHtml.ContainsAll(breadcumbStrings, out missingCrumbs)) { errors.Add("Following breadcrumbs aren't found: " + string.Join(", ", missingCrumbs)); } var subcategoriesMenu = htmlResult.FindNodesByName("catalog-subs").FirstOrDefault(); if (subcategoriesMenu == null) { errors.Add("catalog subcategories menu element not found"); } var subcategoryItems = new List <string> { "href=\"/category/kolenval-id126-3\"", "href=\"/category/podshipnik-kolenvala-id127-3\"" }; var missingSubcategories = new List <string>() as IEnumerable <string>; if (subcategoriesMenu != null && !subcategoriesMenu.InnerHtml.ContainsAll(subcategoryItems, out missingSubcategories)) { errors.Add("Following subcategories aren't found: " + string.Join(", ", missingSubcategories)); } var paging = htmlResult.FindNodesByName("seo-paging").FirstOrDefault(); if (paging == null) { errors.Add("paging element not found"); } var pageTwoElementCode = "href=\"/category/kolenval-i-komplektuyushhie-id53-3?page=2"; if (paging != null && !paging.InnerHtml.Contains(pageTwoElementCode)) { errors.Add("paging doesn't contain page 2"); } var carFiltersPanel = htmlResult.FindNodesByName("car-filter-panel").FirstOrDefault(); if (carFiltersPanel == null) { errors.Add("car filters panel not found"); } var filters = htmlResult.FindNodesByName("generic-filter"); if (filters == null || filters.Count() == 0) { errors.Add("generic filters not found"); } var combobox = htmlResult.FindNodesByName("filter-combobox"); if (combobox == null || combobox.Count() == 0) { errors.Add("brands not found"); } if (errors.Count() > 0) { result.State.Status = StatusesEnum.CRITICAL; result.State.Description = "Обнаружены следующие проблемы: " + string.Join(",", errors); return(result); } var execTime = endTime - startTime; if (execTime > TimeSpan.FromSeconds(warningThreshold)) { result.State.Status = StatusesEnum.WARNING; result.State.Description = string.Format("Время ответа больше порога {0} сек: {1:0.00}", warningThreshold, execTime.TotalSeconds); return(result); } result.State.Status = StatusesEnum.OK; result.State.Description = "Проблем не обнаружено"; } catch (TaskCanceledException) { result.State.Status = StatusesEnum.CRITICAL; result.State.Description = string.Format("Превышен интервал выполнения запроса: {0} сек", requestTimeout.Seconds); } catch (HttpRequestException ex) { result.State.Status = StatusesEnum.CRITICAL; result.State.Description = "Ошибка http-запроса: " + ex.Message; } catch (Exception ex) { Console.WriteLine(ex);// result.State.Status = StatusesEnum.CRITICAL; result.State.Description = "Ошибка при обработке HTML"; } return(result); }
public async Task <Check> CheckMetaInfo(CheckSettings settings) { var result = new Check { Settings = settings }; result.State.LastCheckTime = DateTime.Now; var requestTimeout = TimeSpan.FromSeconds(30); string address = new EnvironmentHelper().GetEnvironmentUrl(settings.EnvironmentId) + "/product/filtr-maslyanyj-dvigatelya-lanos-aveo-lacetti-nubira-nexia-pr-vo-knecht-mahle-id-84669-0-170"; try { var warningThreshold = 3; var errors = new List <string>(); var startTime = DateTime.Now; var htmlResult = await _httpService.GetHtmlStructureAsGoogleBotDesktop(address, requestTimeout); var endTime = DateTime.Now; var title = htmlResult.GetTitle(); var expectedTitle = (settings.EnvironmentId == (int)EnvironmentsEnum.Prod) ? "Фильтр масляный двигателя lanos, aveo, lacetti, nubira, nexia (пр-во knecht-mahle). Масляный фильтр OC90 KNECHT-MAHLE | autodoc.ua" : "Фильтр масляный двигателя lanos, aveo, lacetti, nubira, nexia (пр-во knecht-mahle). Масляный фильтр OC90 KNECHT-MAHLE | autodoc.ua"; if (title != expectedTitle) { errors.Add("title incorrect: " + title); } var robots = htmlResult.GetMetaTagContent("robots"); if (settings.EnvironmentId == (int)EnvironmentsEnum.Prod && robots != "index, follow") { errors.Add("'robots' tag content incorrect: " + robots); } var keywords = htmlResult.GetMetaTagContent("keywords"); var expectedKeywords = (settings.EnvironmentId == (int)EnvironmentsEnum.Prod) ? "фильтр масляный двигателя lanos, aveo, lacetti, nubira, nexia (пр-во knecht-mahle), масляный фильтр, OC90, knecht-mahle" : "фильтр масляный двигателя lanos, aveo, lacetti, nubira, nexia (пр-во knecht-mahle), масляный фильтр, OC90, knecht-mahle"; if (keywords != expectedKeywords) { errors.Add("'keywords' tag content incorrect: " + keywords); } var description = htmlResult.GetMetaTagContent("description"); var expectedDescription = (settings.EnvironmentId == (int)EnvironmentsEnum.Prod) ? "Желаете приобрести масляный фильтр OC90 KNECHT-MAHLE? В нашем интернет-магазине вы можете приобрести Фильтр масляный двигателя LANOS, AVEO, LACETTI, NUBIRA, NEXIA (пр-во KNECHT-MAHLE) хорошего качества. На autodoc.ua вы без трудностей сможете подобрать масляный фильтр." : "Желаете приобрести масляный фильтр OC90 KNECHT-MAHLE? В нашем интернет-магазине вы можете приобрести Фильтр масляный двигателя LANOS, AVEO, LACETTI, NUBIRA, NEXIA (пр-во KNECHT-MAHLE) хорошего качества. На autodoc.ua вы без трудностей сможете подобрать масляный фильтр."; if (description != expectedDescription) { errors.Add("'description' tag content incorrect: " + description); } if (errors.Count() > 0) { result.State.Status = StatusesEnum.CRITICAL; result.State.Description = "Обнаружены следующие проблемы: " + string.Join(",", errors); return(result); } var execTime = endTime - startTime; if (execTime > TimeSpan.FromSeconds(warningThreshold)) { result.State.Status = StatusesEnum.WARNING; result.State.Description = string.Format("Время ответа больше порога {0} сек: {1:0.00}", warningThreshold, execTime.TotalSeconds); return(result); } result.State.Status = StatusesEnum.OK; result.State.Description = "Проблем не обнаружено"; } catch (TaskCanceledException) { result.State.Status = StatusesEnum.CRITICAL; result.State.Description = string.Format("Превышен интервал выполнения запроса: {0} сек", requestTimeout.Seconds); } catch (HttpRequestException ex) { result.State.Status = StatusesEnum.CRITICAL; result.State.Description = "Ошибка http-запроса: " + ex.Message; } catch { result.State.Status = StatusesEnum.CRITICAL; result.State.Description = "Ошибка при обработке HTML"; } return(result); }
public async Task RegisterCheck(CheckSettings check, IRequest <CommandResult> command) { await _checksProcessor.RegisterCheckProcessor(check, command); await _scheduler.AddToSchedule(check); }
public async Task <Check> CheckCategoryInfo(CheckSettings settings) { var result = new Check { Settings = settings }; result.State.LastCheckTime = DateTime.Now; var requestTimeout = TimeSpan.FromSeconds(30); string address = new EnvironmentHelper().GetEnvironmentUrl(settings.EnvironmentId) + "/product/filtr-maslyanyj-dvigatelya-lanos-aveo-lacetti-nubira-nexia-pr-vo-knecht-mahle-id-84669-0-170"; try { var warningThreshold = 3; var errors = new List <string>(); var startTime = DateTime.Now; var htmlResult = await _httpService.GetHtmlStructureAsGoogleBotDesktop(address, requestTimeout); var endTime = DateTime.Now; var breadcrumbs = htmlResult.FindNodesByName("autodoc-breadcrumbs").FirstOrDefault(); if (breadcrumbs == null) { errors.Add("breadcrumbs element not found"); } var expectedCrumbs = new List <string> { "href=\"/\"", //home "href=\"/category/dvigatel-sistemy-i-komponenty-id1-3\"", //Двигатель, системы и компоненты "href=\"/category/sistema-smazki-id57-3\"", //Система смазки "href=\"/category/maslyanyj-filtr-id170-3\"", //Масляный фильтр }; var missingCrumbs = new List <string>() as IEnumerable <string>; if (breadcrumbs != null && !breadcrumbs.InnerHtml.ContainsAll(expectedCrumbs, out missingCrumbs)) { errors.Add("Following breadcrumbs aren't found: " + string.Join(", ", missingCrumbs)); } //check h1 var h1 = htmlResult.FindNodesByName("h1").FirstOrDefault(); if (h1 != null && h1.InnerHtml != "Фильтр масляный двигателя LANOS, AVEO, LACETTI, NUBIRA, NEXIA (пр-во KNECHT-MAHLE). OC90") { errors.Add("h1 differs from expected: " + h1.InnerHtml); } //check price var price = htmlResult.FindNodesByClassName("span", "product-section__new-price").FirstOrDefault(); var isNumber = float.TryParse(price?.InnerHtml, NumberStyles.Any, CultureInfo.InvariantCulture, out var num); if (!isNumber) { errors.Add("price not found"); } if (errors.Count() > 0) { result.State.Status = StatusesEnum.CRITICAL; result.State.Description = "Обнаружены следующие проблемы: " + string.Join(",", errors); return(result); } var execTime = endTime - startTime; if (execTime > TimeSpan.FromSeconds(warningThreshold)) { result.State.Status = StatusesEnum.WARNING; result.State.Description = string.Format("Время ответа больше порога {0} сек: {1:0.00}", warningThreshold, execTime.TotalSeconds); return(result); } result.State.Status = StatusesEnum.OK; result.State.Description = "Проблем не обнаружено"; } catch (TaskCanceledException) { result.State.Status = StatusesEnum.CRITICAL; result.State.Description = string.Format("Превышен интервал выполнения запроса: {0} сек", requestTimeout.Seconds); } catch (HttpRequestException ex) { result.State.Status = StatusesEnum.CRITICAL; result.State.Description = "Ошибка http-запроса: " + ex.Message; } catch (Exception ex) { Console.WriteLine(ex);// result.State.Status = StatusesEnum.CRITICAL; result.State.Description = "Ошибка при обработке HTML"; } return(result); }
public static async Task FillReferences(IOperationContext monitor, CheckSettings settings, SeriesRepo repo, bool updateCache = true) { var repoRev = await repo.GetCurrentRevision(); RepoInfo ri; TaskCompletionSource <bool> newTask = null; lock (repoCache) { var key = GetKey(repo); if (!repoCache.TryGetValue(key, out ri) || ri.Revision != repoRev) { newTask = new TaskCompletionSource <bool> (); ri = new RepoInfo { Revision = repoRev, QueryTask = newTask.Task }; if (updateCache) { repoCache [key] = ri; } } } repo.ClearReferences(); if (newTask != null) { // Not found in cache try { //var t1 = RepoExternalReference.FillReferences (monitor, repo); var t2 = RepoSubmoduleReference.FillReferences(monitor, settings, repo); var t3 = RepoRegexReference.FillVersionChecksReferences(monitor, settings, repo); var t4 = RepoRegexReference.FillReadmeFileReferences(monitor, settings, repo); var t5 = RepoRegexReference.FillMonoTouchHashReferences(monitor, settings, repo); var t6 = RepoRegexReference.FillMonoDroidHashReferences(monitor, settings, repo); var t7 = RepoRegexReference.FillMaciosHashReferences(monitor, settings, repo); var t8 = RepoRegexReference.FillExternalReferences(monitor, settings, repo); var t9 = MdAddinReference.FillMdAddinReferences(monitor, settings, repo); //var t6 = RepoRegexReference.FillAndroidVSHashReferences (monitor, repo); await Task.WhenAll(t2, t3, t4, t5, t6, t7, t8, t9); var tasks = new List <Task> (); foreach (var r in repo.References) { r.IsLoaded = true; var rc = r; tasks.Add(rc.LoadReference(monitor, settings, repo)); //.ContinueWith (t => rc.CalcCommitDistance (monitor), TaskContinuationOptions.NotOnFaulted)); } await Task.WhenAll(tasks); if (updateCache) { lock (repoCache) { ri.References = repo.References.Select(r => r.Clone().Reset()).ToArray(); } } } finally { newTask.SetResult(true); } } else { // Found in canche foreach (var r in ri.References) { repo.AddReference(r.Clone()); } } }
static void Main(string[] args) { ReturnAnswer returnAnswer = new ReturnAnswer(); //Initialize connection bool tmp = true; Console.WriteLine("IP:"); Connection connection = new Connection(); while (tmp) { var IP = Console.ReadLine(); try { connection.init(IP, 8001, returnAnswer); tmp = false; } catch (Exception) { Console.WriteLine("Wrong IP!"); } } //Initailize commands Command create = new Create(connection, returnAnswer); Command sendupdate = new SendUpdate(connection, returnAnswer); Command reciveupdate = new ReciveUpdate(connection, returnAnswer); Command getlastimage = new GetLastImage(connection, returnAnswer); Command checktopicality = new CheckTopicality(connection, returnAnswer); Command getlastest = new GetLastest(connection, returnAnswer); Command list = new List(connection, returnAnswer); Command checkmemory = new CheckMemory(connection, returnAnswer); Command exist = new Exist(connection, returnAnswer); Command sendlogs = new SendLogs(connection, returnAnswer); Command set = new Set(connection, returnAnswer); Command checksettings = new CheckSettings(connection, returnAnswer); Command recivesettings = new ReciveSettings(connection, returnAnswer); //Make a one-way list create.SetNext(sendupdate); sendupdate.SetNext(reciveupdate); reciveupdate.SetNext(getlastimage); getlastimage.SetNext(checktopicality); checktopicality.SetNext(getlastest); getlastest.SetNext(list); list.SetNext(checkmemory); checkmemory.SetNext(exist); exist.SetNext(sendlogs); sendlogs.SetNext(set); set.SetNext(checksettings); checksettings.SetNext(recivesettings); string insert; do { connection.Connect(); insert = connection.Recive(); Console.WriteLine(insert); create.Next(insert); } while (insert != "exit"); }