public IEnumerable <User> Setup(int numberOfPlayers, GameSetupInfo setup) { for (int i = 0; i < numberOfPlayers; i++) { yield return(CreateUser(setup)); } }
private int CalculateMaxHandsPerDay(GameSetupInfo setupInfo) { var num = Random.Next(1, setupInfo.AverageHandsPerUserPerDay); var variance = num * setupInfo.PercentageVarianceOnAverageHands; num = num + System.Convert.ToInt32(num * variance); return(num); }
private User CreateUser(GameSetupInfo setupInfo) { var user = new User { Id = Guid.NewGuid(), MaxHandsPerDay = CalculateMaxHandsPerDay(setupInfo), MaxVisitsPerWeek = CalculateMaxVisitsPerWeek(setupInfo), Name = NameGenerator.Name() }; return(user); }
public User Convert(ElasticUser eUser, GameSetupInfo setupInfo) { var user = new User { Id = eUser.UserId, MaxHandsPerDay = CalculateMaxHandsPerDay(setupInfo), MaxVisitsPerWeek = CalculateMaxVisitsPerWeek(setupInfo), Name = eUser.Name, }; return(user); }
private int CalculateMaxVisitsPerWeek(GameSetupInfo setupInfo) { var num = Random.Next(1, setupInfo.AverageVisitsPerWeek); var variance = num * setupInfo.PercentageVarianceOnVisitsPerWeek; num = num + System.Convert.ToInt32(num * variance); if (num > 7) { return(7); } return(num); }
private void EnsureUsersAreSetup(GameSetupInfo setupInfo) { Console.WriteLine("getting existing users from elastic"); var elasticUsersCount = _client.Count <ElasticUser>(s => s.Query(q => q.MatchAll())).Count; Console.WriteLine($"{elasticUsersCount} users found"); if (elasticUsersCount < setupInfo.NumberOfPlayers) { var numberLeftToCreate = Convert.ToInt32(setupInfo.NumberOfPlayers - elasticUsersCount); Console.WriteLine($"need to create {numberLeftToCreate} more users"); var users = _converter.Convert(new PlayerGenerator().Setup(numberLeftToCreate, setupInfo).ToList()); _writer.BulkWriteData(users, _client); } var playerGenerator = new PlayerGenerator(); _users = new List <User>(); long userCount = 0; while (userCount < setupInfo.NumberOfPlayers) { Console.WriteLine("_"); System.Threading.Thread.Sleep(10000); var elasticUsers = _client.RockAndScroll <ElasticUser>(StringConstants.UserIndex).Result.ToList(); userCount = elasticUsers.Count; if (userCount < setupInfo.NumberOfPlayers) { continue; } //convert them back so the system can use them. foreach (var elasticUser in elasticUsers) { _users.Add(playerGenerator.Convert(elasticUser, setupInfo)); } } Console.WriteLine($"{_users.Count} users loaded"); if (_users.Count == 0) { System.Diagnostics.Debugger.Break(); } }
private static IEnumerable <GameSetupInfo> SplitByYear(GameSetupInfo info) { var years = Convert.ToInt32((info.EndDate - info.StartDate).TotalDays / 365); for (int i = 0; i < years; i++) { yield return(new GameSetupInfo { StartDate = info.StartDate.AddYears(i), EndDate = info.StartDate.AddYears(i + 1), AverageHandsPerUserPerDay = info.AverageHandsPerUserPerDay, AverageVisitsPerWeek = info.AverageVisitsPerWeek, NumberOfPlayers = info.NumberOfPlayers, PercentageVarianceOnAverageHands = info.PercentageVarianceOnAverageHands, PercentageVarianceOnVisitsPerWeek = info.PercentageVarianceOnVisitsPerWeek }); } }
private int CreateData(GameSetupInfo setupInfo, List <User> users) { var startTime = DateTime.Now; var generator = new StatGenerator(users); var handTotal = generator.Setup(setupInfo); var timeTaken = startTime.TimedNowToFriendlyDisplay(); Console.WriteLine(""); Console.WriteLine($"Generating Data took {timeTaken}"); Console.WriteLine(""); Console.WriteLine($"Hands: {handTotal.ToString("N0")}"); Console.WriteLine("==========================="); Console.WriteLine(""); return(handTotal); }
public void CreateDataAndWriteToElastic(GameSetupInfo info, List <User> users) { var startTime = DateTime.Now; Console.WriteLine("RANDOM STATS GAME GENERATOR"); Console.WriteLine("==========================="); var userTotal = 0; var handTotal = 0; userTotal = users.Count; var infoByYear = SplitByYear(info); foreach (var yearlyInfo in infoByYear) { Console.WriteLine(""); Console.WriteLine($"Creating Data for year {yearlyInfo.StartDate.Year}..."); Console.WriteLine(""); var data = CreateData(yearlyInfo, users); handTotal += data; Console.WriteLine(""); Console.WriteLine($"Year {yearlyInfo.StartDate.Year} Created and Saved to elastic."); Console.WriteLine(""); } var timeTaken = startTime.TimedNowToFriendlyDisplay(); Console.WriteLine("==========================="); Console.WriteLine($"ALL DATA CREATED IN - {timeTaken}"); Console.WriteLine(""); Console.WriteLine($"Users: {userTotal.ToString("N0")}"); Console.WriteLine($"Hands: {handTotal.ToString("N0")}"); Console.WriteLine("==========================="); GC.Collect(); GC.WaitForPendingFinalizers(); }
private List <DateTime> SplitIntoWeeklyDates(GameSetupInfo setup) { if (setup.StartDate >= setup.EndDate) { throw new ArgumentException("start date is newer than end date"); } var dates = new List <DateTime>(); dates.Add(setup.StartDate); var nextDate = setup.StartDate.AddDays(7); while (nextDate < setup.EndDate) { dates.Add(nextDate); nextDate = nextDate.AddDays(7); } return(dates); }
private static void CreateGameData() { var startDate = new DateTime(2008, 1, 1); var endDate = new DateTime(2009, 2, 1); var numOfPlayers = 10000; var averageHandsPerUserPerDay = 500; var percentageVarianceOnAverageHands = 0.3; var averageVisitsPerWeek = 5; var percentageVarianceOnVisitsPerWeek = 0.3; var info = new GameSetupInfo { StartDate = startDate, EndDate = endDate, NumberOfPlayers = numOfPlayers, AverageHandsPerUserPerDay = averageHandsPerUserPerDay, PercentageVarianceOnAverageHands = percentageVarianceOnAverageHands, AverageVisitsPerWeek = averageVisitsPerWeek, PercentageVarianceOnVisitsPerWeek = percentageVarianceOnVisitsPerWeek }; new CreateAndWriteManager().Go(info); }
public void Go(GameSetupInfo setupInfo) { EnsureUsersAreSetup(setupInfo); new DataCreator().CreateDataAndWriteToElastic(setupInfo, _users); }
public int Setup(GameSetupInfo setup) { var weekDates = SplitIntoWeeklyDates(setup); foreach (var weekDate in weekDates) { var userHandStats = new List <ElasticUserStat>(); Console.WriteLine(""); Console.WriteLine($"{setup.StartDate.Year} - {weekDate.GetIso8601WeekOfYear()} week started..."); ResetPlayersGamesPlayedCounter(); var maxNumberOfGamesToPlay = _random.Next(5, 500); for (int i = 0; i < maxNumberOfGamesToPlay; i++) { var shouldStopEarly = _random.Next(0, 100) > 95; if (shouldStopEarly) { break; } var game = _gameGenerator.Create(weekDate); ResetPlayersHandsPlayedCounter(); var previousPlayersInHand = new List <User>(); for (int j = 0; j < game.MaxNumberOfHands; j++) { var hand = _handGenerator.Create(game, _users, previousPlayersInHand, j); if (hand == null) { break; } _hands++; previousPlayersInHand = hand.Players; //play hand var playersInHand = hand.Players; for (int k = 0; k < 4; k++) { var round = _betGenerator.CreateRound(playersInHand, k, hand, game); playersInHand = round.Bets.Where(b => b.Value > 0).Select(b => b.Player).ToList(); if (playersInHand.Count == 1) { break; } } var winningTemp = _winningsGenerator.Create(hand, playersInHand); userHandStats.AddRange(ConvertToElasticData(hand, winningTemp)); } } var writer = new ElasticWriter(); Console.WriteLine($"Writing week {weekDate.GetIso8601WeekOfYear()}"); writer.WriteAllData(userHandStats); } return(_hands); }