private async Task Add_Missing_EncounterPlayerRolesv2() { var encounterIds = await _encounterRepository.GetAllEncounterIdsDescending(); foreach (var encId in encounterIds) { Debug.WriteLine($"Checking encounter #{encId}"); var encPlayersAndRoles = await _encounterRepository.CountEncounterPlayersAndRoles(encId); if (encPlayersAndRoles.Players != encPlayersAndRoles.PlayersWithRoles) { Debug.WriteLine($"Encounter #{encId} has {encPlayersAndRoles.Players} players but only {encPlayersAndRoles.PlayersWithRoles} roles"); // Wipe out all of the EncounterPlayerRole records and update it, then check again if (encPlayersAndRoles.PlayersWithRoles > 0) { var removeResult = await _encounterRepository.RemoveRoleRecordsForEncounter(encId); if (removeResult == false) { Debug.WriteLine($"Something went wrong while removing roles for encounter {encId}"); } } var rolesFromRecords = _encounterRepository.GetPlayerRoles(encId); if (rolesFromRecords.Any()) { var playerRoleList = rolesFromRecords.Select(role => new EncounterPlayerRole() { Class = role.Class, EncounterId = encId, PlayerId = role.Id, Role = role.Role, Name = role.Name }).ToList(); var result = _encounterRepository.AddPlayerEncounterRoles(playerRoleList); } //Debug.WriteLine($"Added {rolesFromRecords.Count} roles. Now, checking again..."); //encPlayersAndRoles = await _encounterRepository.CountEncounterPlayersAndRoles(encId); //Debug.WriteLine($"Encounter #{encId} now has {encPlayersAndRoles.Players} players and {encPlayersAndRoles.PlayersWithRoles} roles"); } } }
private void Add_Missing_EncounterPlayerRoles() { var encounters = _encounterRepository.GetEncountersMissingPlayerRecords(10000); if (!encounters.Any()) { return; } _logger.Debug($"EncounterPlayerRole update: Found {encounters.Count} encounters that need updating!"); Stopwatch sw = new Stopwatch(); sw.Start(); var encounterPlayerRolesToAdd = new List <EncounterPlayerRole>(); foreach (var id in encounters) { var rolesFromRecords = _encounterRepository.GetPlayerRoles(id); if (rolesFromRecords.Any()) { var playerRoleList = rolesFromRecords.Select(role => new EncounterPlayerRole() { Class = role.Class, EncounterId = id, PlayerId = role.Id, Role = role.Role, Name = role.Name }).ToList(); encounterPlayerRolesToAdd.AddRange(playerRoleList); } else { // Didn't get any roles. Why? No records in each of the tables? var encRecordCount = _encounterRepository.CountBasicRecordsForEncounter(id); if (encRecordCount.DamageCount == 0 && encRecordCount.HealingCount == 0 && encRecordCount.ShieldCount == 0) { // Encounter is empty. Remove it _logger.Debug($"Marking {id} for deletion as it has no basic records."); _encounterRepository.MarkEncountersForDeletion(new List <int>() { id }, User.Identity.GetUserId()); } else { // Records exist, but we couldn't determine roles, so make sure that the damage records // cover the correct duration of the encounter. If the encounter was a wipe, remove it. var thisEncounter = _encounterRepository.Get(id); if (thisEncounter != null && !thisEncounter.SuccessfulKill) { _logger.Debug($"Marking {id} for deletion as it was a wipe with no available role detection."); _encounterRepository.MarkEncountersForDeletion(new List <int>() { id }, User.Identity.GetUserId()); } } } } if (!encounterPlayerRolesToAdd.Any()) { _logger.Debug("Didn't find any records to add from these encounters, stopping now!"); sw.Stop(); return; } var result = _encounterRepository.AddPlayerEncounterRoles(encounterPlayerRolesToAdd); _logger.Debug(result.Success ? $"Successfully added {encounterPlayerRolesToAdd.Count} EncounterPlayerRole records" : $"An error occurred while adding EncounterPlayerRole records: {result.Message}"); sw.Stop(); TempData.Add("flash", new FlashSuccessViewModel( $"AddMissingEncounterPlayerRoles() complete! Added {encounterPlayerRolesToAdd.Count} in {sw.Elapsed}")); }
public void Execute(IJobExecutionContext context) { var task = _taskRepository.Get("EncounterPlayerRoleRecords"); if (task == null) { _logger.Debug("Can't update EncounterPlayerRoleRecords - no matching task definition exists in the database."); return; } // Check if enough time has passed for us to run this task again if (task.LastRun.AddMinutes(task.ScheduleMinutes) > DateTime.Now) { _logger.Debug("Not enough time has passed for this scheduled task, so it won't be executed now"); return; } // Update the task lastrun time first, so if it takes a minute to run, we don't run it on another server at the same time _taskRepository.UpdateTask(task.Id, DateTime.Now); var encounters = _encounterRepository.GetEncountersMissingPlayerRecords(100); if (!encounters.Any()) { return; } _logger.Debug(string.Format("EncounterPlayerRole update: Found {0} encounters that need updating!", encounters.Count)); var encounterPlayerRolesToAdd = new List <EncounterPlayerRole>(); foreach (var id in encounters) { var rolesFromRecords = _encounterRepository.GetPlayerRoles(id); if (rolesFromRecords.Any()) { var playerRoleList = rolesFromRecords.Select(role => new EncounterPlayerRole() { Class = role.Class, EncounterId = id, PlayerId = role.Id, Role = role.Role, Name = role.Name }).ToList(); encounterPlayerRolesToAdd.AddRange(playerRoleList); } else { // Didn't get any roles. Why? No records in each of the tables? var encRecordCount = _encounterRepository.CountBasicRecordsForEncounter(id); if (encRecordCount.DamageCount == 0 && encRecordCount.HealingCount == 0 && encRecordCount.ShieldCount == 0) { // Encounter is empty. Remove it _logger.Debug(string.Format("Marking {0} for deletion as it has no basic records.", id)); _encounterRepository.MarkEncountersForDeletion(new List <int>() { id }, "scheduledTask"); } else { // Records exist, but we couldn't determine roles, so make sure that the damage records // cover the correct duration of the encounter. If the encounter was a wipe, remove it. var thisEncounter = _encounterRepository.Get(id); if (thisEncounter != null && !thisEncounter.SuccessfulKill) { _logger.Debug(string.Format("Marking {0} for deletion as it was a wipe with no available role detection.", id)); _encounterRepository.MarkEncountersForDeletion(new List <int>() { id }, "scheduledTask"); } } } } if (!encounterPlayerRolesToAdd.Any()) { _logger.Debug("Didn't find any records to add from these encounters, stopping now!"); return; } var result = _encounterRepository.AddPlayerEncounterRoles(encounterPlayerRolesToAdd); _logger.Debug(result.Success ? string.Format("Successfully added {0} EncounterPlayerRole records", encounterPlayerRolesToAdd.Count) : string.Format("An error occurred while adding EncounterPlayerRole records: {0}", result.Message)); }