Ejemplo n.º 1
0
        public List <QuestionFeedbackQuery> CreateFeedbacks(List <User> users, List <Question> questions)
        {
            var feedbacks = new List <QuestionFeedbackQuery>();

            foreach (var question in questions)
            {
                RandomizerExtension.Shuffle(users);
                RandomizerExtension.Shuffle(users);
                var likesCount = _random.Next(190, question.AnswersCount) + 20;
                for (var i = 0; i < likesCount; i++)
                {
                    feedbacks.Add(new QuestionFeedbackQuery
                    {
                        QuestionFeedbackType = QuestionFeedbackType.Like,
                        UserId     = users[i].UserId,
                        QuestionId = question.QuestionId
                    });
                }

                var dislikesCount = likesCount * _random.Next(10, 25) / 100;
                for (var i = 0; i < dislikesCount; i++)
                {
                    feedbacks.Add(new QuestionFeedbackQuery
                    {
                        QuestionFeedbackType = QuestionFeedbackType.Dislike,
                        UserId     = users[i].UserId,
                        QuestionId = question.QuestionId
                    });
                }
            }
            return(feedbacks);
        }
Ejemplo n.º 2
0
        public async Task CreateTimer(BotsUnitOfWork db, DbContextOptions <TwoButtonsContext> dbOptions,
                                      MagicViewModel magic)
        {
            TimerCallback timerDelegate = Task;

            var errorPercent   = _random.Next(3, 5);
            var errorAnwerType = (AnswerType)_random.Next(1, 3);

            var firstOptionPercent = magic.FirstOptionPercent;

            if (errorAnwerType == AnswerType.First)
            {
                firstOptionPercent += errorPercent;
            }
            else
            {
                firstOptionPercent -= errorPercent;
            }

            var firstBotsCount  = magic.BotsCount * firstOptionPercent / 100;
            var secondBotsCount = magic.BotsCount - firstBotsCount;

            var allBots = await db.BotsRepository.GetAllBotsIdsExceptVoted(magic.QuestionId);

            RandomizerExtension.Shuffle(allBots);

            var list = new List <BotVoting>();

            for (var i = 0; i < firstBotsCount && i < allBots.Count; i++)
            {
                list.Add(new BotVoting {
                    BotId = allBots[i], QuestionId = magic.QuestionId, AnswerType = AnswerType.First
                });
            }

            for (var i = firstBotsCount; i < secondBotsCount + firstBotsCount && i < allBots.Count; i++)
            {
                list.Add(new BotVoting {
                    BotId = allBots[i], QuestionId = magic.QuestionId, AnswerType = AnswerType.Second
                });
            }

            RandomizerExtension.Shuffle(list);
            foreach (var bot in list)
            {
                var job = new JobState
                {
                    BotId      = bot.BotId,
                    AnswerType = bot.AnswerType,
                    QuestionId = bot.QuestionId,
                    DbOptions  = dbOptions,
                    Db         = db
                };

                //await new TaskFactory().StartNew(() => Task(job));
                var timer = new Timer(timerDelegate, job, _random.Next(magic.VoteDurationInMilliseconds), Timeout.Infinite);
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        ///   для каждого 100 000 выборки формировать свой файл собственный. так как id по убыванию, то  можно подумать, что
        ///   сначала молодые будут. Однако распределение позволяет сказать, что так может быть не всегда. Сохранять построчно
        ///   кажый объект
        /// </summary>
        /// <param name="folderPathFrom"></param>
        /// <param name="pattern"></param>
        /// <param name="folderPathTo"></param>
        /// <param name="fileName"></param>
        public void ProcessVkUsers(string folderPathFrom, string pattern, string folderPathTo, string fileName)
        {
            var result = new List <UserReader>();

            var files = Directory.GetFiles(folderPathFrom).Where(x => x.Contains(pattern)).ToList();
            int k     = 0;

            for (var i = 0; i < files.Count; i++)
            {
                var file = files[i];
                using (var sr = new StreamReader(file))
                {
                    var json      = sr.ReadToEnd().Replace("No", "").Replace("Name", "");
                    var jsonUsers = JsonConvert.DeserializeObject <VkUserDataResponse>(json).Response.Items
                                    .Where(x => x.Birthday.Age() >= 10 && x.Birthday.Age() <= 25 && !x.LargePhoto.Contains("deactivated") &&
                                           x.City != null && !x.LargePhoto.Contains("camera")).Select(x => new UserReader
                    {
                        ExternalId         = x.UserId,
                        Birthday           = x.Birthday,
                        City               = x.City.Title.Replace("'", "''"),
                        FirstName          = x.FirstName.Replace("'", "''"),
                        LastName           = x.LastName.Replace("'", "''"),
                        SexType            = x.Sex,
                        VkOriginalAvatrUrl = x.LargePhoto
                    }).ToList();
                    RandomizerExtension.Shuffle(jsonUsers);
                    RandomizerExtension.Shuffle(jsonUsers);
                    result.AddRange(jsonUsers);
                }


                if (result.Count >= 10_000)
                {
                    using (var sw =
                               new StreamWriter(folderPathTo + Path.GetFileNameWithoutExtension(fileName) + $"_{k++}" + Path.GetExtension(fileName), false,
                                                Encoding.UTF8))
                    {
                        sw.WriteLine(JsonConvert.SerializeObject(result.Take(10_000)));
                    }
                    result = result.Skip(10_000).ToList();
                }
                else
                if (i == files.Count - 1)
                {
                    using (var sw =
                               new StreamWriter(folderPathTo + Path.GetFileNameWithoutExtension(fileName) + $"_{k++}" + Path.GetExtension(fileName), false,
                                                Encoding.UTF8))
                    {
                        sw.WriteLine(JsonConvert.SerializeObject(result.Take(10_000)));
                    }
                }
            }

            result.Clear();
        }
Ejemplo n.º 4
0
        public List <FollowingQuery> CreateFollowings(List <User> users)
        {
            var followers = new List <FollowingQuery>();

            foreach (var follower in users.ToList())
            {
                var followingsCount = _random.Next(15, 80);
                RandomizerExtension.Shuffle(users);
                RandomizerExtension.Shuffle(users);
                for (var i = 0; i < followingsCount; i++)
                {
                    followers.Add(new FollowingQuery
                    {
                        UserId        = follower.UserId,
                        FollowingId   = users[i].UserId,
                        IsFollowing   = true,
                        VisitsCount   = _random.Next(10, 80),
                        FollowingDate = DateTime.UtcNow.Add(TimeSpan.FromDays(-_random.Next(250)))
                    });
                }
            }
            return(followers);
        }
Ejemplo n.º 5
0
        public List <AnswerQuery> CreateAnswers(List <User> users, List <Question> questions)
        {
            var answers = new List <AnswerQuery>();

            foreach (var question in questions)
            {
                RandomizerExtension.Shuffle(users);
                RandomizerExtension.Shuffle(users);
                var answersCount  = _random.Next(190, 350);
                var firstAnswers  = answersCount * question.FirstOptionPercentCount / 100;
                var secondAnswers = answersCount - firstAnswers;
                for (var i = 0; i < firstAnswers; i++)
                {
                    answers.Add(new AnswerQuery
                    {
                        UserId       = users[i].UserId,
                        AnswerType   = AnswerType.First,
                        QuestionId   = question.QuestionId,
                        AnsweredDate = RandomDay(question.AddedDate, DateTime.UtcNow)
                    });
                }

                for (var i = firstAnswers; i < firstAnswers + secondAnswers; i++)
                {
                    answers.Add(new AnswerQuery
                    {
                        UserId       = users[i].UserId,
                        AnswerType   = AnswerType.Second,
                        QuestionId   = question.QuestionId,
                        AnsweredDate = RandomDay(question.AddedDate, DateTime.UtcNow)
                    });
                }
                question.AnswersCount = answersCount;
            }

            return(answers);
        }