Example #1
0
        private void InitializeCheck()
        {
            McsfRestoreLogger.WriteLog("[InitializeCheck]: begin.");
            InitialTimer();

            GroupList = GetGroupList();
            if (GroupList == null || GroupList.Count == 0)
            {
                McsfRestoreLogger.WriteLog("[InitializeCheck]: GroupList is null.");
                return;
            }

            new Thread(() =>
            {
                foreach (var item in GroupList)
                {
                    string response         = "";
                    DllRefection reflection = new DllRefection();
                    this.CurrentModuleName  = item.Module;
                    var nameSpace           = item.Check.Substring(0, item.Check.Length - 4);
                    //var result = reflection.DLLReflection2(item.Check, nameSpace, "McsfRestoreCheck", "CheckHandler", new object[] { checkAction }, out response);
                    var result = 0;
                    if ((int)result != 0)
                    {
                        this.IsFirstNextEnable = false;
                    }
                    //Nothing = -1,Accessed = 0,UnAccessed = 1,NotExisted = 2,Running = 3,Stopped = 4
                    var status = (EnumMySQLStatus)result;
                    McsfRestoreLogger.WriteLog(string.Format("[InitializeCheck]: item.Check  DLLReflection2 ret is {0} and status is {1}", result, status));
                    var checkResultItem = new CheckResultItem()
                    {
                        Description = "test",
                        IsSuccess   = (int)result == 0,
                        Result      = (int)result,
                        ModuleName  = item.Module,
                        IsWindow    = item.IsWindow,
                        ClassName   = item.ClassName
                    };

                    System.Windows.Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() =>
                    {
                        this.CheckResultList.Add(checkResultItem);
                        this.CheckNumber += 1;
                        if (CheckNumber == GroupList.Count)
                        {
                            this.dispatcherTimerDecrease.Stop();
                            this.dispatcherTimerIncrease.Stop();
                            this.CurrentModuleName = "";
                            this.CheckAnimation    = "Complete.";
                        }
                    }));
                }
            }).Start();
        }
        public override void Execute()
        {
            McsfRestoreLogger.WriteLog("[RestoreFiles]: RestoreFiles begin.");
            List <string> packageList = Arguments[0];
            string        message     = Arguments[1];

            restoreAciton = Arguments[2];
            //List<string> Users = Require<GetUsers>();
            List <string> Users = null;
            Dictionary <string, string> oldSwVersions = Require <GetOldSWVersionsDictionary>(message);
            bool          isBkpBranch69 = Require <IsMessageBranch69>(message) ? true : false;
            DllRefection  reflection    = new DllRefection();
            List <string> Files         = new List <string>();
            object        result;
            string        response = string.Empty;
            //get gourp info
            List <Dictionary <string, object> > groupListResult = Require <GetGroupInfo>();

            McsfRestoreLogger.WriteLog("[RestoreFiles]: groupListResult count is " + groupListResult.Count);
            try
            {
                for (var i = 0; i < groupListResult.Count; i++)
                {
                    var    group       = groupListResult[i];
                    string packageName = group.ContainsKey("packageName") ? (string)group["packageName"] : string.Empty;

                    if (string.IsNullOrWhiteSpace(packageName) || !packageList.Contains(packageName))
                    {
                        McsfRestoreLogger.WriteLog(string.Format("[RestoreFiles]: packageName is {0}, packageName is null or packageList do not contains.", packageName));
                        continue;
                    }
                    //车载配置合并逻辑和rollback功能省略
                    string moduleName = (group.ContainsKey("moduleName")) ? (string)group["moduleName"] : string.Empty;
                    McsfRestoreLogger.WriteLog("[RestoreFiles]: Begin restore :" + moduleName);
                    if (isBkpBranch69)//如果bkp是69及之后的,Files从当前环境的servicerestore.xml中读取
                    {
                        Files = (!group.ContainsKey("Files")) ? new List <string>() : (List <string>)group["Files"];
                    }

                    //反射依次调用PreRestoreHandler
                    if (group.ContainsKey("PreRestoreHandler"))
                    {
                        var PreRestoreHandler = (string)group["PreRestoreHandler"];
                        SendMessage(string.Format("{0} preRestoreHandler begin", PreRestoreHandler));
                        McsfRestoreLogger.WriteLog("[RestoreFiles]: Begin PreRestoreHandler: " + PreRestoreHandler);
                        List <string> PreRestoreHandlerFiles = new List <string>();
                        if (!isBkpBranch69) //如果bkp是69之前的,Files从bkp的头读取.
                        {
                            ///固定路径
                            PreRestoreHandlerFiles = Require <GetBranch69FormerFiles>(message);
                        }
                        else
                        {
                            PreRestoreHandlerFiles = (!group.ContainsKey("Files")) ? new List <string>() : (List <string>)group["Files"];
                        }
                        try
                        {
                            SendMessage(string.Format("{0} preRestoreHandler ...", PreRestoreHandler));
                            result = reflection.DLLReflection(PreRestoreHandler, "UIH.Mcsf.Restore", "McsfRestore", "PreRestoreHandler", new object[] { oldSwVersions, RestoreToolConstant.SYSTEM_Restore_FOLDER, Users, PreRestoreHandlerFiles }, out response);
                            SendMessage(string.Format("{0} preRestoreHandler complete", PreRestoreHandler));
                        }
                        catch (Exception ex)
                        {
                            McsfRestoreLogger.WriteLog("[RestoreFiles]:exception is " + ex);
                            result = 1;
                        }
                        if (((result is int) && 0 != (int)result && 2 != (int)result) || ((result is bool) && !(bool)result))
                        {
                            McsfRestoreLogger.WriteLog(string.Format("[RestoreFiles]:PreRestoreHandler {0},{1} failed, response is {2}:", moduleName, PreRestoreHandler, response));
                            //省去回滚操作
                            Export = false;
                            SendMessage(string.Format("{0} preRestoreHandler failed", PreRestoreHandler));
                        }
                        else if ((result is int) && 2 == (int)result)
                        {
                            //displayWarningInfoFlag = false;
                            McsfRestoreLogger.WriteLog(string.Format("[RestoreFiles]: PreRestoreHandler {0},{1} successfully, Negligible error occurred.", moduleName, PreRestoreHandler));
                            SendMessage(string.Format("{0} preRestoreHandler success", PreRestoreHandler));
                        }
                        else if ((result is int) && 0 == (int)result)
                        {
                            McsfRestoreLogger.WriteLog(string.Format("[RestoreFiles]: PreRestoreHandler {0},{1} successfully.", moduleName, PreRestoreHandler));
                            SendMessage(string.Format("{0} preRestoreHandler success", PreRestoreHandler));
                        }
                        else
                        {
                            McsfRestoreLogger.WriteLog(string.Format("[RestoreFiles]: PreRestoreHandler {0} {1} , result is {2} and response is {3}", moduleName, PreRestoreHandler, result, response));
                            Export = false;
                            SendMessage(string.Format("{0} preRestoreHandler failed", PreRestoreHandler));
                        }
                    }


                    List <string> handlerFiles = (!group.ContainsKey("Files")) ? new List <string>() : (List <string>)group["Files"];

                    //反射依次调用RestoreHandler
                    if (group.ContainsKey("RestoreHandler"))
                    {
                        var restoreHandler = (string)group["RestoreHandler"];
                        McsfRestoreLogger.WriteLog("[RestoreFiles]: Begin RestoreHandler: " + restoreHandler);
                        SendMessage(string.Format("{0} restoreHandler begin", restoreHandler));
                        try
                        {
                            SendMessage(string.Format("{0} restoreHandler ...", restoreHandler));
                            result = reflection.DLLReflection(restoreHandler, "UIH.Mcsf.Restore", "McsfRestore", "RestoreHandler", new object[] { oldSwVersions, RestoreToolConstant.SYSTEM_Restore_FOLDER, Users, handlerFiles }, out response);
                            SendMessage(string.Format("{0} restoreHandler complete", restoreHandler));
                        }
                        catch (Exception ex)
                        {
                            McsfRestoreLogger.WriteLog(string.Format("[RestoreFiles]: RestoreHandler {0} failed. exception is {1}", restoreHandler, ex));
                            result = 1;
                        }

                        if (((result is int) && 0 != (int)result && 2 != (int)result) || ((result is bool) && !(bool)result))
                        {
                            McsfRestoreLogger.WriteLog(string.Format("[RestoreFiles]: RestoreHandler {0},{1} failed, response is {2}:", moduleName, restoreHandler, response));
                            Export = false;
                            SendMessage(string.Format("{0} restoreHandler failed", restoreHandler));
                        }
                        else if ((result is int) && 2 == (int)result)
                        {
                            McsfRestoreLogger.WriteLog(string.Format("[RestoreFiles]: RestoreHandler {0},{1} successfully,Negligible error occurred.", moduleName, restoreHandler));
                            SendMessage(string.Format("{0} restoreHandler failed", restoreHandler));
                        }
                        else if ((result is int) && 0 == (int)result)
                        {
                            McsfRestoreLogger.WriteLog(string.Format("[RestoreFiles]: RestoreHandler {0} successfully.", moduleName));
                            SendMessage(string.Format("{0} restoreHandler success", restoreHandler));
                        }
                        else
                        {
                            McsfRestoreLogger.WriteLog(string.Format("[RestoreFiles]: PreRestoreHandler {0} {1} , result is {2} and response is {3}", moduleName, restoreHandler, result, response));
                            Export = false;
                            SendMessage(string.Format("{0} restoreHandler failed", restoreHandler));
                        }
                    }


                    //反射依次调用PostRestoreHandler
                    if (group.ContainsKey("PostRestoreHandler"))
                    {
                        var postRestoreHandler = (string)group["PostRestoreHandler"];
                        McsfRestoreLogger.WriteLog("[RestoreFiles]: Begin PostRestoreHandler: " + postRestoreHandler);
                        SendMessage(string.Format("{0} postRestoreHandler begin", postRestoreHandler));
                        try
                        {
                            SendMessage(string.Format("{0} postRestoreHandler ...", postRestoreHandler));
                            result = reflection.DLLReflection(postRestoreHandler, "UIH.Mcsf.Restore", "McsfRestore", "PostRestoreHandler", new object[] { oldSwVersions, RestoreToolConstant.SYSTEM_Restore_FOLDER, Users, handlerFiles }, out response);
                            SendMessage(string.Format("{0} postRestoreHandler complete", postRestoreHandler));
                        }
                        catch (Exception ex)
                        {
                            McsfRestoreLogger.WriteLog("[RestoreFiles]: postRestoreHandler exception is " + ex, LogMessageType.Error);
                            result = 1;
                        }

                        if (((result is int) && 0 != (int)result && 2 != (int)result) || ((result is bool) && !(bool)result))
                        {
                            McsfRestoreLogger.WriteLog(string.Format("[RestoreFiles]: PostRestoreHandler {0},{1} failed, response is {2}:", moduleName, postRestoreHandler, response));
                            Export = false;
                            SendMessage(string.Format("{0} postRestoreHandler failed", postRestoreHandler));
                        }
                        else if ((result is int) && 2 == (int)result)
                        {
                            McsfRestoreLogger.WriteLog(string.Format("[RestoreFiles]: PostRestoreHandler {0},{1} successfully, Negligible error occurred.", moduleName, postRestoreHandler));
                            SendMessage(string.Format("{0} postRestoreHandler success", postRestoreHandler));
                        }
                        else if ((result is int) && 0 == (int)result)
                        {
                            McsfRestoreLogger.WriteLog(string.Format("[RestoreFiles]: PostRestoreHandler {0},{1} successfully.", moduleName, postRestoreHandler));
                            SendMessage(string.Format("{0} postRestoreHandler success", postRestoreHandler));
                        }
                        else
                        {
                            McsfRestoreLogger.WriteLog(string.Format("[RestoreFiles]: PostRestoreHandler {0} {1} , result is {2} and response is {3}", moduleName, postRestoreHandler, result, response));
                            Export = false;
                            SendMessage(string.Format("{0} postRestoreHandler failed", postRestoreHandler));
                        }
                    }
                }
                if (Directory.Exists(RestoreToolConstant.SYSTEM_Restore_FOLDER))
                {
                    SendMessage("Delete files begin");
                    Require <DeleteFolderAndSubFiles>(RestoreToolConstant.Restore_FOLDER);
                    McsfRestoreLogger.WriteLog("[RestoreFiles]: DeleteFolderAndSubFiles end.");
                    SendMessage("Delete files end");
                }
                McsfRestoreLogger.WriteLog("[RestoreFiles]: RestoreFiles end.");
            }
            catch (Exception ex)
            {
                McsfRestoreLogger.WriteLog("[RestoreFiles]:ex is " + ex.Message);
            }

            Export = true;
        }
Example #3
0
        private void RecheckExcute()
        {
            McsfRestoreLogger.WriteLog("[RecheckExcute]: begin");
            if (string.IsNullOrWhiteSpace(Port))
            {
                McsfRestoreLogger.WriteLog("[RecheckExcute]: port is null. ");
                return;
            }
            if (this.groupConfigItems == null)
            {
                McsfRestoreLogger.WriteLog("[RecheckExcute]: groupConfigItems is null. ");
                return;
            }

            GroupConfigItem group = this.groupConfigItems.FirstOrDefault(item => item.Module == "MCSF_Mysql");

            if (group == null)
            {
                McsfRestoreLogger.WriteLog("[BtnRecheck_Click]: group is null. ");
                return;
            }
            var checkItem = this.checkResultItems.FirstOrDefault(item => item.ModuleName == "MCSF_Mysql");


            if (checkItem == null)
            {
                McsfRestoreLogger.WriteLog("[RecheckExcute]: group is null. ");
                return;
            }
            this.InitialTimer();
            new Thread(() =>
            {
                int port;
                string response         = "";
                DllRefection reflection = new DllRefection();
                var checkResult         = checkItem.Result;
                var ret = int.TryParse(Port, out port);
                if (!ret)
                {
                    McsfRestoreLogger.WriteLog("[RecheckExcute]: port parse int failed and port is " + Port);
                    return;
                }
                McsfRestoreLogger.WriteLog(string.Format("[RecheckExcute]: port is {0} and check result is {1}", port, checkResult));
                var handleNameSpace = group.Repair.Substring(0, group.Repair.Length - 4);
                var result          = reflection.DLLReflection2(group.Repair, handleNameSpace, "McsfRestoreRepair", "RepairHandler", new object[] { checkResult, port, recheckAction }, out response);
                StopTimer();
                this.IsSuccess = (int)result == 0;
                if (IsSuccess)
                {
                    var filePath = Path.GetFullPath(@"../config/port");
                    File.WriteAllText(filePath, Port);
                    this.ResultText = "repair success.";
                }
                else
                {
                    this.ResultText = "repair failed.";
                }
                var status = (EnumMySQLStatus)result;
                McsfRestoreLogger.WriteLog(string.Format("[RecheckExcute]: RepairHandler result is  {0}, mysql status is {1} and reponse is {2}", result, status, response));
                repairActon(IsSuccess);
                McsfRestoreLogger.WriteLog("[RecheckExcute]: end.");
            }).Start();
        }