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(); } }
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()); } }
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(); } }
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(); } }
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(); //Сбор лога и отправка в центр }
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, $"Ошибка отправки отчета для операции"); } }
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); }
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}"); } }
private void Log(string text) { this._logText.Append($"{text}{Environment.NewLine}"); NLogger.LogErrorToBaseOrHdd(MainSettings.MainSqlSettings.ComputerId, text); }
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, "Не удалось найти тип операции"); } } } }