Esempio n. 1
0
        private void SelfCheckThreadTimerTick(object state)
        {
            try
            {
                try
                {
                    ComputerResponse();

                    if (loop == 0)
                    {
                        loop = 20;
                        if (isTaskerAlive_Internal)
                        {
                            isTaskerAlive_Internal = false;
                            isTaskerAlive          = true;
                        }
                        else
                        {
                            isTaskerAlive = false;
                        }
                    }
                }
                catch (Exception ex)
                {
                    NLogger.LogErrorToBaseOrHdd(MainSettings.MainSqlSettings.ComputerId, ex.Message.ToString());
                }
            }
            finally
            {
                StartSelfCheckThreadTimer();
            }
        }
Esempio n. 2
0
        private OperationSqlDto GetOperationName(int operationType)
        {
            DataSet ds = null;

            try
            {
                ds = SqlWorks.ExecProc("GetOperationTypesList");
                if (ds != null && ds.Tables.Count > 0 && ds.Tables[0] != null)
                {
                    foreach (DataRow row in ds.Tables[0].Rows)
                    {
                        if (Convert.ToInt32(row["Id"]) == operationType)
                        {
                            return(new OperationSqlDto(
                                       Convert.ToString(row["Name"]),
                                       row["FileName"] == DBNull.Value ? "" : Convert.ToString(row["FileName"]),
                                       row["FileMD5"] == DBNull.Value ? "" : Convert.ToString(row["FileMD5"])));
                        }
                    }
                }

                return(new OperationSqlDto());
            }
            catch (Exception ex)
            {
                NLogger.LogErrorToBaseOrHdd(MainSettings.MainSqlSettings.ComputerId, ex.ToString(), MainSettings.Constants.MAGIC_UPDATER);
                return(new OperationSqlDto());
            }
        }
Esempio n. 3
0
        private void SelfCheckTimer_Elapsed(object sender, ElapsedEventArgs e)
        {
            selfCheckTimer.Stop();
            try
            {
                try
                {
                    selfCheckTimer.Stop();

                    ComputerResponse();

                    if (loop == 0)
                    {
                        loop = 20;
                        if (isTaskerAlive_Internal)
                        {
                            isTaskerAlive_Internal = false;
                            isTaskerAlive          = true;
                        }
                        else
                        {
                            isTaskerAlive = false;
                        }
                    }
                }
                catch (Exception ex)
                {
                    NLogger.LogErrorToBaseOrHdd(MainSettings.MainSqlSettings.ComputerId, ex.Message.ToString());
                }
            }
            finally
            {
                selfCheckTimer.Start();
            }
        }
Esempio n. 4
0
        private void TaskThreadTimerTick(object state)
        {
            try
            {
                try
                {
                    isTaskerAlive_Internal = true;
                    GetOperations();
                    foreach (Operation op in OperationList)
                    {
                        if (op.IsOnlyMainCashbox)
                        {
                            if (!MainSettings.MainSqlSettings.IsMainCashbox)
                            {
                                op.SendOperationReport("Данная операция предназначена для выполнения только на главной кассе", false);
                                continue;
                            }
                        }

                        op.Run();
                    }
                    OperationList.Clear();
                }
                catch (Exception ex)
                {
                    NLogger.LogErrorToBaseOrHdd(MainSettings.MainSqlSettings.ComputerId, ex.ToString());
                }
            }
            finally
            {
                StartTaskThreadTimer();
            }
        }
Esempio n. 5
0
        protected override void Execution(object sender, DoWorkEventArgs e)
        {
            // Если касса, то сначала дожидаемся подтверждения
            if (MainSettings.MainSqlSettings.IsMainCashbox)
            {
                // Пример использования операции с преогресс баром
                BackgroundWorker worker = sender as BackgroundWorker;
                if (worker != null)
                {
                    using (worker)
                    {
                        worker.ReportProgress(0, "Закрытие 1С на всех компьютерах");
                        //Грохаем все «1cv8c.exe» на всех компах в сети
                        KillProcess1C ActionKill = new KillProcess1C(Id);
                        ActionKill.ActRun(true, false, 7000);
                        Thread.Sleep(3000);

                        worker.ReportProgress(1, "Блокировка фоновых заданий на сервере 1С");
                        try
                        {
                            new LockBackgroundJobsOnServer1C(Id).ActRun();                             //Блокировка фоновых заданий на сервере 1С
                        }
                        catch (Exception ex)
                        {
                            NLogger.LogErrorToBaseOrHdd(MainSettings.MainSqlSettings.ComputerId, ex.Message.ToString());
                        }

                        worker.ReportProgress(2, "Завершение сеансов на сервере 1С");
                        try
                        {
                            new KillAll1CUsers(Id).ActRun();                             //Убийство всех сеансов на сервере 1С
                        }
                        catch (Exception ex)
                        {
                            NLogger.LogErrorToBaseOrHdd(MainSettings.MainSqlSettings.ComputerId, ex.Message.ToString());
                        }

                        worker.ReportProgress(3, "Обновление информационной базы...");
                        new UpdateBase1C(Id).ActRun();                         //Обновление базы

                        worker.ReportProgress(4, "Разрешение фоновых заданий на сервере 1С");
                        try
                        {
                            new UnLockBackgroundJobsOnServer1C(Id).ActRun();                             //Блокировка фоновых заданий на сервере 1С
                        }
                        catch (Exception ex)
                        {
                            NLogger.LogErrorToBaseOrHdd(MainSettings.MainSqlSettings.ComputerId, ex.Message.ToString());
                        }

                        worker.ReportProgress(5, "Сбор логов");
                        new SendLogsToCenter1C(Id).ActRun();                         //Сбор лога и отправка в центр

                        Thread.Sleep(1000);
                    }
                }
            }
        }
        protected override void Execution(object sender = null, DoWorkEventArgs e = null)
        {
            new ExecProcessing1CAction(Id, "ОбменСЦентром.epf", 10).ActRun();

            //Грохаем все «1cv8c.exe» на всех компах в сети
            KillProcess1CCommon ActionKill = new KillProcess1CCommon(Id);

            ActionKill.ActRun(true, false, 7000);

            Thread.Sleep(3000);

            try
            {
                SetLockBackgroundJobsOnServer1C(true);                 //Блокировка фоновых заданий на сервере 1С
            }
            catch (Exception ex)
            {
                NLogger.LogErrorToBaseOrHdd(MainSettings.MainSqlSettings.ComputerId, ex.Message.ToString());
            }

            try
            {
                KillUsers();                 //Убийство всех сеансов на сервере 1С
            }
            catch (Exception ex)
            {
                NLogger.LogErrorToBaseOrHdd(MainSettings.MainSqlSettings.ComputerId, ex.Message.ToString());
            }

            try
            {
                Restart1CServer();
            }
            catch (Exception ex)
            {
                NLogger.LogErrorToBaseOrHdd(MainSettings.MainSqlSettings.ComputerId, ex.Message.ToString());
            }

            try
            {
                UpdateBase1C();                 //Обновление базы
            }
            catch (Exception ex)
            {
                NLogger.LogErrorToBaseOrHdd(MainSettings.MainSqlSettings.ComputerId, ex.Message.ToString());
            }

            try
            {
                SetLockBackgroundJobsOnServer1C(false);                 //Блокировка фоновых заданий на сервере 1С
            }
            catch (Exception ex)
            {
                NLogger.LogErrorToBaseOrHdd(MainSettings.MainSqlSettings.ComputerId, ex.Message.ToString());
            }

            new SendLogsToCenter1CCommon(Id).ActRun();             //Сбор лога и отправка в центр
        }
Esempio n. 7
0
 public static void SendOperationReport(int?operationId, string message, bool isCompleted)
 {
     if (operationId != null && operationId.Value > 0)
     {
         SqlWorks.ExecProc("SendOperationReport", operationId, isCompleted, message);
     }
     else
     {
         NLogger.LogErrorToBaseOrHdd(MainSettings.MainSqlSettings.ComputerId, $"Ошибка отправки отчета для операции");
     }
 }
Esempio n. 8
0
        public static bool Check1C_Connection(string _connection, out string reasonMsg)
        {
            reasonMsg = null;
            bool    result  = false;
            Process NewProc = new Process();

            NewProc.StartInfo.FileName        = MainSettings.ExePath1C;
            NewProc.StartInfo.Arguments       = $"DESIGNER {_connection} / DisableStartupMessages /IBCheckAndRepair - TestOnly /Out\"{MainSettings.LogPath1C}\"";
            NewProc.StartInfo.UseShellExecute = true;
            NewProc.StartInfo.WindowStyle     = ProcessWindowStyle.Hidden;
            NewProc.EnableRaisingEvents       = true;
            try
            {
                NewProc.Start();

                // Если за 15 секунд процесс не завершился, значит база недоступна, такй вот костыль(, но лучше чем ничего)))
                for (int i = 0; i < 15; i++)
                {
                    Thread.Sleep(1000);
                    if (NewProc.HasExited)
                    {
                        break;
                    }
                }

                if (!NewProc.HasExited)
                {
                    //Считаем что база недоступна
                    //Лог 1С будет пустым
                    NewProc.Kill();
                }
                else
                {
                    //Считаем что база доступна
                    string txt     = File.ReadAllText(MainSettings.LogPath1C, Encoding.GetEncoding("windows-1251"));
                    bool   isError = !txt.ToLower().Contains("тестирование закончено");
                    if (isError)
                    {
                        reasonMsg = txt;
                    }
                    else
                    {
                        result = true;
                    }
                }
            }
            catch (Exception ex)
            {
                reasonMsg = ex.Message.ToString();
                NLogger.LogErrorToBaseOrHdd(MainSettings.MainSqlSettings.ComputerId, ex.Message.ToString());
            }

            return(result);
        }
Esempio n. 9
0
 public static void SendReportToDB(int _operationId, string actionName, bool IsFromLan, string message, bool isComplete = false)
 {
     if (_operationId > 0 && !string.IsNullOrEmpty(actionName))
     {
         SqlWorks.ExecProc("SetActionReport"
                           , _operationId
                           , MainSettings.MainSqlSettings.ComputerId
                           , actionName
                           , IsFromLan
                           , isComplete
                           , message);
     }
     else
     {
         NLogger.LogErrorToBaseOrHdd(MainSettings.MainSqlSettings.ComputerId, $"Невозможно отправить отчет действия: {actionName}. Сообщение: {message}");
     }
 }
Esempio n. 10
0
 private void Log(string text)
 {
     this._logText.Append($"{text}{Environment.NewLine}");
     NLogger.LogErrorToBaseOrHdd(MainSettings.MainSqlSettings.ComputerId, text);
 }
Esempio n. 11
0
        private void GetOperations()
        {
            OperationList.Clear();
            DataSet ds = null;

            if (!EnableOnlyRestartOperationMode)
            {
                // Берем все оперции за исключением RestartMagicUpdater_Service (1003) т.к. она нужна для
                // перезапуска MagicUpdater'a и должна выполняться в отдельном потоке.
                ds = SqlWorks.ExecProc("SelectOperationsList", MainSettings.MainSqlSettings.ComputerId);
            }
            else
            {
                // Берем только операцию RestartMagicUpdater_Service (1003)
                ds = SqlWorks.ExecProc("SelectRestartOperation", MainSettings.MainSqlSettings.ComputerId);
            }

            if (ds != null)
            {
                foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    int id = Convert.ToInt32(dr["ID"]);
                    if (!SetOperationReaded(id))
                    {
                        NLogger.LogErrorToBaseOrHdd(MainSettings.MainSqlSettings.ComputerId, $"Ошибка чтения операции. ID: {id}");
                        continue;
                    }
                    string attrsJson = Convert.ToString(dr["Attributes"]);

                    var operationSqlDto = GetOperationName(Convert.ToInt32(dr["OperationType"]));

                    string ot       = operationSqlDto.Name;
                    string fileName = operationSqlDto.FileName;
                    string fileMD5  = operationSqlDto.FileMD5;

                    Type t = null;

                    //Если имя файла не пустое - это плагин операция (dll)
                    if (string.IsNullOrEmpty(fileName))
                    {
                        t = Type.GetType($"MagicUpdater.Operations.{ot}");
                    }
                    else
                    {
                        t = PluginOperationAdapter.GetPluginOperationType(ot, fileName, fileMD5);
                    }

                    if (t != null)
                    {
                        try
                        {
                            Operation operation;

                            if (t.GetConstructors()[0].GetParameters().Length == 2)
                            {
                                operation = (Operation)Activator.CreateInstance(t, id, attrsJson);
                            }
                            else
                            {
                                operation = (Operation)Activator.CreateInstance(t, id);
                            }

                            OperationList.Add(operation);
                        }
                        catch (Exception ex)
                        {
                            NLogger.LogErrorToBaseOrHdd(MainSettings.MainSqlSettings.ComputerId, $"Возможная причина. Несовпадение сигнатур операций БД и Шарпа. Original: {ex.Message.ToString()}");
                        }
                    }
                    else
                    {
                        NLogger.SetReportForOperation(id, false, "Не удалось найти тип операции");
                    }
                }
            }
        }