Esempio n. 1
0
        public async Task Run(CancellationToken cancellationToken)
        {
            var directoryInfo = GetDirectory();
            var lck           = new FileDistributedLock(directoryInfo, "extract-articles");

            using (var distributedLock = await lck.TryAcquireAsync())
            {
                if (distributedLock == null)
                {
                    return;
                }

                var datasources = await _datasourceCommandRepository.GetAll(cancellationToken);

                foreach (var datasource in datasources)
                {
                    try
                    {
                        await ExtractArticlesFromFeed(datasource, cancellationToken);
                    }
                    catch (Exception ex)
                    {
                        _logger.LogError(ex.ToString());
                    }
                }

                await _datasourceCommandRepository.Update(datasources, cancellationToken);

                await _datasourceCommandRepository.SaveChanges(cancellationToken);
            }
        }
        public async Task Run(CancellationToken cancellationToken)
        {
            var directoryInfo = ArticleExtractorJob.GetDirectory();
            var lck           = new FileDistributedLock(directoryInfo, "extract-recommendations");

            using (var distributedLock = await lck.TryAcquireAsync())
            {
                if (distributedLock == null)
                {
                    return;
                }

                var popularArticles = await GetPopularArticles(cancellationToken);

                var result = GetSimilarArticlesByWord2Vec(popularArticles).ToList();
                foreach (var articles in result)
                {
                    var firstArticle   = articles.First();
                    var recommendation = RecommendationAggregate.Create(firstArticle.UserId);
                    foreach (var article in articles)
                    {
                        recommendation.Recommend(article.ArticleId, article.Score);
                    }

                    await _recommendationCommandRepository.Add(recommendation, cancellationToken);

                    await _recommendationCommandRepository.SaveChanges(cancellationToken);
                }
            }
        }
Esempio n. 3
0
        public async Task Consume(ConsumeContext <ArticleAddedEvent> context)
        {
            var directoryInfo = ArticleExtractorJob.GetDirectory();
            var lck           = new FileDistributedLock(directoryInfo, "article-added");

            using (var distributedLock = await lck.TryAcquireAsync())
            {
                if (distributedLock == null)
                {
                    var random = new Random();
                    Thread.Sleep(random.Next(100, 2000));
                    return;
                }

                var datasource = await _dataSourceCommandRepository.Get(context.Message.DataSourceId, CancellationToken.None);

                datasource.AddArticle(context.Message.PublishDate);
                await _dataSourceCommandRepository.Update(new[] { datasource }, CancellationToken.None);

                await _dataSourceCommandRepository.SaveChanges(CancellationToken.None);
            }
        }