public async Task <object> Analyze([FromRoute] string siteId)
        {
            var sites = await sitesApi.GetList();

            var ss = sites.Single(s => s.Id == siteId);
            await queueApi.Add(new QueueJobBuilder().OfAnalyze(siteId, ss.Url).ForceAnalyze().Build());

            return(true);
        }
예제 #2
0
        protected override async Task ExecuteIteration(QueueItem task, CancellationToken token)
        {
            try
            {
                var url = task.Arguments["url"];
                if (!DaemonUtils.IsUrl(url))
                {
                    return;
                }

                var depthStr = task.Arguments.GetValueOrDefault("parseDepth", "5");
                if (!uint.TryParse(depthStr, out var depth))
                {
                    depth = 5;
                }

                var uri    = new Uri(url);
                var siteId = await sitesApi.NewSite(uri.Host);

                status = $"Скачивание {uri.Host}";
                try
                {
                    await Parse(siteId, uri, 0, depth, new ConcurrentDictionary <int, bool>(), token);
                }
                catch (OperationCanceledException)
                {
                    await queueApi.Add(new QueueJobBuilder().OfParsing(url).ParsingDepth(depth).Build());

                    throw;
                }

                if (token.IsCancellationRequested)
                {
                    await queueApi.Add(new QueueJobBuilder().OfParsing(url).ParsingDepth(depth).Build());

                    token.ThrowIfCancellationRequested();
                }

                await queueApi.Add(new QueueJobBuilder().OfAnalyze(siteId, uri.Host).Build());

                status = DaemonConstants.IdleStatus;
            }
            catch (Exception e) when(!(e is OperationCanceledException))
            {
                Console.Error.WriteLine(e.Message);
                Console.Error.WriteLine(e.StackTrace);
            }
        }
        protected override async Task ExecuteIteration(QueueItem task, CancellationToken token)
        {
            try
            {
                var siteId = task.Arguments["site"];
                if (await sitesApi.CheckAnalyzed(siteId) && !task.Arguments.ContainsKey("forceAnalyze"))
                {
                    return;
                }

                var url = task.Arguments["url"];
                status = $"Анализ {url}";

                var files = await sitesApi.GetSiteFiles(siteId);

                try
                {
                    var analyzerChain = CreateAnalyzerChain();
                    foreach (var file in files)
                    {
                        status = $"Анализ {url}/{file.Filename.TrimStart('/')}";
                        analyzerChain.ProcessFile(file, token);
                    }

                    analyzerChain.SaveWebometricsValue(
                        async(type, val, weight) => await sitesApi.SetSiteParam(siteId, type, val, weight));
                    await sitesApi.UpdateResultWebmetrick(siteId, analyzerChain.ChainWeight);
                }
                catch (OperationCanceledException)
                {
                    await queueApi.Add(new QueueJobBuilder().OfAnalyze(siteId, url).ForceAnalyze().Build());

                    throw;
                }

                await sitesApi.MarkAnalyzed(siteId);

                status = DaemonConstants.IdleStatus;
            }
            catch (Exception e) when(!(e is OperationCanceledException))
            {
                Console.Error.WriteLine(e.Message);
                Console.Error.WriteLine(e.StackTrace);
            }
        }