private void MigrateUser(DateTime LastRunTime) { ///User Migration List <OpstoolEntity.User> StorageUsers = _MainStorageAccess.GetAllStorageUsers(LastRunTime); // List<User> ModelUsers = _Repository.GetAllUser().Result; MapUsers = _Repository.GetAllMapUsers().Result; //Filtering Method--1 List <OpstoolEntity.User> FilteredStorageUsers = null; if (MapUsers.Count > 0) { var CommonStorageUsers = from storageUser in StorageUsers join mapUser in MapUsers on storageUser.UserID equals mapUser.Key.ToString() select storageUser; FilteredStorageUsers = StorageUsers.Except(CommonStorageUsers).ToList(); } else { FilteredStorageUsers = StorageUsers; } //Push Storage Users into SQL User & UserMap Tables foreach (var user in FilteredStorageUsers) { try { _Repository.InsertUserToSQLUserTable(user).GetAwaiter().GetResult(); } catch (Exception ex) { opsLogger.WriteLog("User Error Message: " + ex.Message + Environment.NewLine + "UserID: " + user.UserID + Environment.NewLine + "MobileNumber: " + user.MobileNumber + Environment.NewLine + "Email: " + user.Email); } } // manualReset.Set(); }
//HistoryGeoLocation public void MigrateHistoryGeoLocationtoDest(DateTime LastRunTime) { TableQuery <SOS.OPsTools.Entities.HistoryGeoLocationBase> UQuery = null; if (base.LoadTableSilent(ConstantOps.HistoryGeoLocationSrcTableName)) { UQuery = new TableQuery <SOS.OPsTools.Entities.HistoryGeoLocationBase>().Where(TableQuery.GenerateFilterConditionForDate("Timestamp", QueryComparisons.GreaterThanOrEqual, LastRunTime)); var qryReturn = base.EntityTable.ExecuteQuery(UQuery).ToList(); Dictionary <Guid, long> MapProfiles = _Repository.GetAllMapProfiles().Result; SOS.OPsTools.Entities.HistoryGeoLocationDest destRecord = new HistoryGeoLocationDest(); List <string> RetryMigrateProfiles = new List <string>(); if (storageAccessDestination.LoadTableSilent(ConstantOps.HistoryGeoLocationDestTableName)) { //Parallel and batch processing TableBatchOperation insertSessions = null; var disctinctProfileIDs = qryReturn.Select(s => s.ProfileID).Distinct(); MapHistoryGeoLocation(); foreach (var p in disctinctProfileIDs) { try { string newProfileID = MapProfiles[Guid.Parse(p)].ToString(); insertSessions = new TableBatchOperation(); List <Entities.HistoryGeoLocationBase> sessionsByProfileID = qryReturn.Where(ses => ses.ProfileID == p).ToList(); Parallel.ForEach(sessionsByProfileID, session => { if (session.Identifier.Length > 2) { destRecord = ConvertSessionToDest(session); destRecord.ProfileID = newProfileID; destRecord.SessionID = session.Identifier.Substring(2); destRecord.IsSOS = Convert.ToBoolean(Convert.ToInt32(session.Identifier.Substring(0, 1))); destRecord.Accuracy = 0; TableOperation insertSession = TableOperation.Insert(destRecord); insertSessions.Add(insertSession); } }); storageAccessDestination.EntityTable.ExecuteBatch(insertSessions); } catch (Exception ex) { opsLogger.WriteLog("HistoryGeoLocation Error Message: " + ex.Message + Environment.NewLine + "ProfileID: " + p); if (!string.IsNullOrEmpty(p)) { RetryMigrateProfiles.Add(p); } } } //Sequential and batch processing if (RetryMigrateProfiles.Count > 0) { //disctinctProfileIDs = qryReturn.Select(s => s.ProfileID).Distinct(); foreach (var p in RetryMigrateProfiles) { List <HistoryGeoLocationBase> sessionsByProfileID = qryReturn.Where(ses => ses.ProfileID == p).ToList(); foreach (var session in sessionsByProfileID) { try { if (session.Identifier.Length > 2) { destRecord = ConvertSessionToDest(session);// Use automapper destRecord.ProfileID = MapProfiles[Guid.Parse(destRecord.ProfileID)].ToString(); destRecord.SessionID = session.Identifier.Substring(2); destRecord.IsSOS = Convert.ToBoolean(Convert.ToInt32(session.Identifier.Substring(0, 1))); destRecord.Accuracy = 0; TableOperation insertSession = TableOperation.InsertOrReplace(destRecord); storageAccessDestination.EntityTable.Execute(insertSession); } } catch (Exception ex) { opsLogger.WriteLog("HistoryGeoLocation Error Message: " + ex.Message + Environment.NewLine + "ProfileID: " + p); } } } } } else { opsLogger.WriteLog("HistoryGeoLocation Table not loaded, Please check settings"); } } //EndIf }