Exemple #1
0
 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);
 }
Exemple #2
0
        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
            });
        }
Exemple #3
0
 public void RemoveFromSchedule(CheckSettings check)
 {
     if (_cancellationTokensMap.ContainsKey(check.Type))
     {
         var cancellationToken = _cancellationTokensMap[check.Type];
         cancellationToken.Cancel();
     }
 }
Exemple #4
0
        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);
        }
Exemple #5
0
        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));
        }
Exemple #6
0
        public async Task <Check> CheckApiSearch(CheckSettings settings)
        {
            var result = new Check {
                Settings = settings
            };

            result.State.LastCheckTime = DateTime.Now;

            return(await PerformSearchCheck(settings.EnvironmentId, result));
        }
Exemple #7
0
        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);
            }
        }
Exemple #8
0
        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"));
        }
Exemple #9
0
        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);
        }
Exemple #10
0
        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);
        }
Exemple #11
0
        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());
        }
Exemple #12
0
        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);
        }
Exemple #13
0
        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);
        }
Exemple #14
0
        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"));
        }
Exemple #15
0
        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);
        }
Exemple #18
0
        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);
        }
Exemple #19
0
        public async Task RegisterCheck(CheckSettings check, IRequest <CommandResult> command)
        {
            await _checksProcessor.RegisterCheckProcessor(check, command);

            await _scheduler.AddToSchedule(check);
        }
Exemple #20
0
        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);
        }
Exemple #21
0
        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());
                }
            }
        }
Exemple #22
0
        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");
        }