Beispiel #1
0
        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();
        }
Beispiel #2
0
        //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
        }