Ejemplo n.º 1
0
 public void SaveSettingsToDb(int?computerId)
 {
     foreach (PropertyInfo pi in this.GetType().GetProperties())
     {
         SqlWorks.ExecProc("SetLocalSettingsForComputer", computerId, pi.Name, pi.GetValue(this, null));
     }
 }
Ejemplo n.º 2
0
 public static void AddOperState(int?operationId, OperStates state)
 {
     if (operationId != null && operationId > 0)
     {
         SqlWorks.ExecProc("AddOperState", operationId, (int)state);
     }
 }
        private static bool RegisterViaMac(SqlMainSettings newSettings)
        {
            bool    result = true;
            DataSet ds     = SqlWorks.ExecProc("RegisterComputer_Service",
                                               newSettings.ShopID,
                                               Environment.MachineName,
                                               NetWork.GetLocalIPAddress(),
                                               newSettings.Is1CServer,
                                               newSettings.IsMainCashbox,
                                               HardwareInfo.GetMacAddress());

            if (ds != null)
            {
                int? id    = Convert.ToInt32(ds.Tables[0].Rows[0]["ComputerId"]);
                bool isNew = Convert.ToBoolean(ds.Tables[0].Rows[0]["isNew"]);

                if (id == 0)
                {
                    id = null;
                }

                newSettings.ComputerId = id;

                if (!isNew && id != null)
                {
                    ChangeComputerParams(newSettings);
                }
            }
            else
            {
                result = false;
            }
            return(result);
        }
Ejemplo n.º 4
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());
            }
        }
Ejemplo n.º 5
0
 protected override void Execution(object sender = null, DoWorkEventArgs e = null)
 {
     if (MainSettings.MainSqlSettings.ComputerId != null)
     {
         SqlWorks.ExecProc("SetExternalIp_Service"
                           , MainSettings.MainSqlSettings.ComputerId
                           , NetWork.GetExternalIpAddress());
     }
 }
Ejemplo n.º 6
0
 private static void _workloadAnalyzer_OnWorkloadAvgSave(WorkloadInfo workloadInfo)
 {
     SqlWorks.ExecProc("AddAvgPerformanceCounter"
                       , MainSettings.MainSqlSettings.ComputerId
                       , DateTime.UtcNow
                       , workloadInfo.AvgWorkloadInfoCpu
                       , workloadInfo.AvgWorkloadInfoRam
                       , workloadInfo.AvgWorkloadInfoDisk);
 }
Ejemplo n.º 7
0
 protected void AddOperState(OperStates state)
 {
     if (Id != null && Id.Value > 0)
     {
         if (!isPluginTestingMode)
         {
             SqlWorks.ExecProc("AddOperState", Id, (int)state);
         }
     }
 }
Ejemplo n.º 8
0
        private bool SetOperationReaded(int operationId)
        {
            DataSet ds = SqlWorks.ExecProc("SetOperationIsReaded", operationId);

            if (ds == null)
            {
                return(false);
            }
            return(Convert.ToBoolean(ds.Tables[0].Rows[0]["Result"]));
        }
Ejemplo n.º 9
0
 protected override void ActExecution()
 {
     if (File.Exists(MainSettings.LogPath1C))
     {
         string txt     = File.ReadAllText(MainSettings.LogPath1C, Encoding.GetEncoding("windows-1251"));
         bool   isError = txt.ToLower().Contains("ошибк");
         SqlWorks.ExecProc("SendLog1C", MainSettings.MainSqlSettings.ComputerId, isError, txt, operationId);
         File.Delete(MainSettings.LogPath1C);
     }
 }
Ejemplo n.º 10
0
 public static void SendOperationReport(int?operationId, string message, bool isCompleted)
 {
     if (operationId != null)
     {
         SqlWorks.ExecProc("SendOperationReport", operationId, isCompleted, message);
     }
     else
     {
         NLogger.LogErrorToHdd($"Ошибка отправки отчета для операции");
     }
 }
Ejemplo n.º 11
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, $"Ошибка отправки отчета для операции");
     }
 }
Ejemplo n.º 12
0
 private void SendOperationReport()
 {
     if (Id != null && Id.Value > 0)
     {
         if (!isPluginTestingMode)
         {
             //if (Id != null && Id.Value > 0)
             SqlWorks.ExecProc("SendOperationReport", Id, IsCompleted, Message);
             //else
             //	NLogger.LogErrorToBaseOrHdd(MainSettings.MainSqlSettings.ComputerId, $"Ошибка отправки отчета для операции: {this.GetType().ToString()}");
         }
     }
 }
Ejemplo n.º 13
0
        private void SettingsForm_Load(object sender, EventArgs e)
        {
            try
            {
                var loadFromJsonResult = MainSettings.LoadFromJson();

                if (!loadFromJsonResult.IsComplete)
                {
                    //NLogger.LogErrorToHdd(res.Message, MainSettings.Constants.MAGIC_UPDATER_SETTINGS);
                    //MessageBox.Show(res.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }

                //JsonSettings
                txtServerTask.Text   = MainSettings.JsonSettings.ServerTask;
                txtBaseTask.Text     = MainSettings.JsonSettings.BaseTask;
                txtUserTask.Text     = MainSettings.JsonSettings.UserTask;
                txtPasswordTask.Text = MainSettings.JsonSettings.PasswordTask;

                var loadSettingsResult = MainSettings.LoadSettings();

                if (!loadSettingsResult.IsComplete)
                {
                    return;
                }

                cbShopID.DisplayMember = "ShopId";
                cbShopID.ValueMember   = "ShopId";
                cbShopID.DataSource    = SqlWorks.ExecProc("SelectShopsList").Tables[0];

                //SqlSettings
                cbShopID.Text             = MainSettings.MainSqlSettings.ShopID;
                txtServer1C.Text          = MainSettings.LocalSqlSettings.Server1C;
                txtBase1C.Text            = MainSettings.LocalSqlSettings.Base1C;
                txtUser1C.Text            = MainSettings.LocalSqlSettings.User1C;
                txtPass1C.Text            = MainSettings.LocalSqlSettings.Pass1C;
                txtVersion1C.Text         = MainSettings.LocalSqlSettings.Version1C;
                txtTimeOut.Text           = MainSettings.LocalSqlSettings.OperationsListCheckTimeout.ToString();
                txtSelfUpdatePath.Text    = MainSettings.LocalSqlSettings.SelfUpdatePath;
                cbIsMainCashbox.Checked   = MainSettings.MainSqlSettings.IsMainCashbox;
                cbIsServerLocated.Checked = MainSettings.MainSqlSettings.Is1CServer;
                cbIsCheck1C.Checked       = MainSettings.LocalSqlSettings.IsCheck1C;
            }
            catch (Exception ex)
            {
                ConnectionToService?.DisposeAsyncClient();
                MessageBox.Show(ex.Message.ToString(), "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                NLogger.LogErrorToHdd(ex.Message.ToString(), MainSettings.Constants.MAGIC_UPDATER_SETTINGS);
                Application.Exit();
            }
        }
Ejemplo n.º 14
0
        private bool Initialize()
        {
            if (!File.Exists(MainSettings.JsonSettingsFileFullPath))
            {
                NLogger.LogErrorToHdd("Json - файл настроек не найден", MainSettings.Constants.MAGIC_UPDATER);
                return(false);
            }

            //Загружаем все настройки
            TryLoadMainSettings loadSettingsResult = MainSettings.LoadSettings();

            while (!loadSettingsResult.IsComplete)
            {
                NLogger.LogErrorToHdd(loadSettingsResult.NamedMessage, MainSettings.Constants.MAGIC_UPDATER);
                Thread.Sleep(60000);
                loadSettingsResult = MainSettings.LoadSettings();
            }

            if (MainSettings.MainSqlSettings.ComputerId == null || MainSettings.MainSqlSettings.ComputerId == 0)
            {
                NLogger.LogErrorToHdd("Ошибка регистрации компьютера. Не получен ComputerId.", MainSettings.Constants.MAGIC_UPDATER);
                return(false);
            }

            //Отчитываемся о том, что настройки прочитаны
            SqlWorks.ExecProc("SetIsAgentSettingsReaded", MainSettings.MainSqlSettings.ComputerId, true);

            //Если не режим отладки плагинов
            if (!_isPluginDebugMode)
            {
                SqlWorks.ExecProc("UpdateVersion", MainSettings.MainSqlSettings.ComputerId, Extensions.GetApplicationVersion());
                TaskerReporter.Start();
                RestartTaskerReporter.Start();
                switch (MainSettings.LocalSqlSettings.PerformanceCounterMode)
                {
                case 0:
                    break;

                case 1:
                    PerformanceReporter.StartOnlyAvg();
                    break;

                case 2:
                    PerformanceReporter.StartAll();
                    break;
                }
            }

            return(true);
        }
Ejemplo n.º 15
0
        private void btnOk_Click(object sender, EventArgs e)
        {
            _agentSettingsIsReadCheckTimer.Change(Timeout.Infinite, Timeout.Infinite);
            _agentSettingsIsReadCheckTimer.Dispose();

            Thread.Sleep(100);

            DialogResult dr = MessageBox.Show($"Для обновления настроек агента, необходим его перезапуск.{Environment.NewLine}Отправить операцию перезапуска?{Environment.NewLine}[Ок] - сохранение настроек и перезапуск агента{Environment.NewLine}[Отмена] - сохранение настроек без перезапуска"
                                              , "Подтверждение"
                                              , MessageBoxButtons.OKCancel
                                              , MessageBoxIcon.Question);

            _sqlLocalSettings.User1C = tbUser1C.Text;
            _sqlLocalSettings.Pass1C = tbPass1C.Text;
            _sqlLocalSettings.OperationsListCheckTimeout = Convert.ToInt32(tbOperationsListCheckTimeout.Text);
            _sqlLocalSettings.SelfUpdatePath             = tbSelfUpdatePath.Text;
            _sqlLocalSettings.Version1C             = tbVersion1C.Text;
            _sqlLocalSettings.IsCheck1C             = chbIsCheck1C.Checked;
            _sqlLocalSettings.SelfUpdateFtpServer   = tbSelfUpdateFtpServer.Text;
            _sqlLocalSettings.SelfUpdateFtpUser     = tbSelfUpdateFtpUser.Text;
            _sqlLocalSettings.SelfUpdateFtpPassword = tbSelfUpdateFtpPassword.Text;
            _sqlLocalSettings.SelfUpdateFtpPath     = tbSelfUpdateFtpPath.Text;
            _sqlLocalSettings.Is1CBaseOnServer      = _is1CBaseOnServer;

            if (_sqlLocalSettings.Is1CBaseOnServer)
            {
                _sqlLocalSettings.Server1C = tbServerOrPath1C.Text;
                _sqlLocalSettings.Base1C   = tbBase1C.Text;
            }
            else
            {
                _sqlLocalSettings.InformationBaseDirectory = tbServerOrPath1C.Text;
            }

            _sqlLocalSettings.PerformanceCounterMode = _performanceCounterMode;

            _sqlLocalSettings.SaveSettingsToDb(_computerId);

            //Проставляем флаг в базу о том, что настройки были изменены
            SqlWorks.ExecProc("SetIsAgentSettingsReaded", _computerId, false);

            if (dr == DialogResult.OK)
            {
                new OperationBase(1003).SendForComputer(_computerId);
            }
        }
Ejemplo n.º 16
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}");
     }
 }
Ejemplo n.º 17
0
        private static bool ChangeComputerParams(SqlMainSettings newSettings)
        {
            bool    result = true;
            DataSet ds     = SqlWorks.ExecProc("ChangeComputerParams_Servece",
                                               newSettings.ComputerId,
                                               newSettings.ShopID,
                                               Environment.MachineName,
                                               NetWork.GetLocalIPAddress(),
                                               newSettings.Is1CServer,
                                               newSettings.IsMainCashbox,
                                               Extensions.GetApplicationVersion());

            if (ds == null)
            {
                result = false;
            }
            return(result);
        }
Ejemplo n.º 18
0
        public static TryRegisterComputerId RegisterComputerId(string shopId, bool is1CServer = true, bool isMainCashbox = false)
        {
            if (string.IsNullOrEmpty(shopId))
            {
                return(new TryRegisterComputerId(0, false, "Пустой Id магазина"));
            }

            DataSet dsShop = SqlWorks.ExecProc("IsShopExists", shopId);

            if (dsShop == null || ConvertSafe.ToInt32(dsShop.Tables[0].Rows[0]["result"]) == 0)
            {
                return(new TryRegisterComputerId(0, false, $"Магазин с id = {shopId} отсутствует"));
            }

            DataSet ds = SqlWorks.ExecProc("RegisterComputer",
                                           shopId,
                                           Environment.MachineName,
                                           NetWork.GetLocalIPAddress(),
                                           is1CServer,
                                           isMainCashbox,
                                           HardwareInfo.GetMacAddress());

            if (ds != null)
            {
                int?id = Convert.ToInt32(ds.Tables[0].Rows[0]["ComputerId"]);
                if (id.HasValue)
                {
                    return(new TryRegisterComputerId(id.Value));
                }
                else
                {
                    NLogger.LogErrorToHdd("Ошибка регистрации. Не удалось получить ID компьютера.", MainSettings.Constants.MAGIC_UPDATER);
                    return(new TryRegisterComputerId(0, false, "Ошибка регистрации. Не удалось получить ID компьютера."));
                }
            }
            else
            {
                NLogger.LogErrorToHdd("Ошибка регистрации. Не удалось получить ID компьютера.", MainSettings.Constants.MAGIC_UPDATER);
                return(new TryRegisterComputerId(0, false, "Ошибка регистрации. Не удалось получить ID компьютера."));
            }
        }
Ejemplo n.º 19
0
        private static bool IsFileRegisteregAndRelevantMd5(string fileName)
        {
            DataSet ds = SqlWorks.ExecProc("GetOperationTypeByFileName", fileName);

            if (ds == null || ds.Tables.Count == 0 || ds.Tables[0].Rows.Count == 0)
            {
                return(false);
            }
            else
            {
                string dllFullPath = Path.Combine(MainSettings.GlobalSettings.SelfUpdateFtpPath
                                                  , MainSettings.Constants.OPERATION_PLUGIN_DIRECTORY_NAME
                                                  , fileName);

                var ftpFileMd5Result = FtpWorks.GetFtpFileMd5(MainSettings.GlobalSettings.SelfUpdateFtpServer
                                                              , MainSettings.GlobalSettings.SelfUpdateFtpUser
                                                              , MainSettings.GlobalSettings.SelfUpdateFtpPassword
                                                              , Path.Combine(MainSettings.GlobalSettings.SelfUpdateFtpPath, MainSettings.Constants.OPERATION_PLUGIN_DIRECTORY_NAME)
                                                              , fileName);

                if (ftpFileMd5Result.IsComplete)
                {
                    try
                    {
                        DataRow dr = ds.Tables[0].Rows[0];
                        return(MD5Works.CompareHahes(ftpFileMd5Result.Value, Convert.ToString(dr["FileMD5"])));
                    }
                    catch
                    {
                        return(false);
                    }
                }
                else
                {
                    NLogger.LogErrorToBaseAndHdd(MainSettings.MainSqlSettings?.ComputerId, $"Ошибка получения MD5 файла ({dllFullPath})");
                    return(false);
                }
            }
        }
Ejemplo n.º 20
0
        private static void _workloadAnalyzer_OnWorkloadAllSave(WorkloadInfo workloadInfo)
        {
            SqlWorks.ExecProc("AddAvgPerformanceCounter"
                              , MainSettings.MainSqlSettings.ComputerId
                              , DateTime.UtcNow
                              , workloadInfo.AvgWorkloadInfoCpu
                              , workloadInfo.AvgWorkloadInfoRam
                              , workloadInfo.AvgWorkloadInfoDisk);

            //ProcessorTime
            foreach (var item in workloadInfo.WorkloadInfoCpuList)
            {
                SqlWorks.ExecProc("AddPerformanceCounter"
                                  , MainSettings.MainSqlSettings.ComputerId
                                  , item.Key
                                  , 1
                                  , item.Value);
            }

            //RamAvailableMBytes
            foreach (var item in workloadInfo.WorkloadInfoRamList)
            {
                SqlWorks.ExecProc("AddPerformanceCounter"
                                  , MainSettings.MainSqlSettings.ComputerId
                                  , item.Key
                                  , 2
                                  , item.Value);
            }

            //CurrentDiskQueueLength
            foreach (var item in workloadInfo.WorkloadInfoDiskList)
            {
                SqlWorks.ExecProc("AddPerformanceCounter"
                                  , MainSettings.MainSqlSettings.ComputerId
                                  , item.Key
                                  , 3
                                  , item.Value);
            }
        }
Ejemplo n.º 21
0
        private static bool IsFileRegisteregAndRelevantlastModifiedDate(string fileName)
        {
            DataSet ds = SqlWorks.ExecProc("GetOperationTypeByFileName", fileName);

            if (ds == null || ds.Tables.Count == 0 || ds.Tables[0].Rows.Count == 0)
            {
                return(false);
            }
            else
            {
                string dllFullPath = Path.Combine(MainSettings.GlobalSettings.SelfUpdateFtpPath
                                                  , MainSettings.Constants.OPERATION_PLUGIN_DIRECTORY_NAME
                                                  , fileName);
                DateTime?ftpFileLastModifiedDate = FtpWorks.GetFileLastModifiedDate(MainSettings.GlobalSettings.SelfUpdateFtpServer
                                                                                    , MainSettings.GlobalSettings.SelfUpdateFtpUser
                                                                                    , MainSettings.GlobalSettings.SelfUpdateFtpPassword
                                                                                    , Path.Combine(MainSettings.GlobalSettings.SelfUpdateFtpPath, MainSettings.Constants.OPERATION_PLUGIN_DIRECTORY_NAME)
                                                                                    , fileName);

                if (ftpFileLastModifiedDate.HasValue)
                {
                    try
                    {
                        DataRow dr = ds.Tables[0].Rows[0];
                        return(Extensions.IsNullableDateTimeIdentical(ftpFileLastModifiedDate, (DateTime?)dr["LastModifiedDate"]));
                    }
                    catch
                    {
                        return(false);
                    }
                }
                else
                {
                    NLogger.LogErrorToBaseAndHdd(MainSettings.MainSqlSettings?.ComputerId, $"Ошибка получения последней даты изменения файла ({dllFullPath})");
                    return(false);
                }
            }
        }
Ejemplo n.º 22
0
        public static TryRegisterPlugin RegisterOrUpdatePluginLastModifiedDate(string fileName)
        {
            string dllLocalFullPath = Path.Combine(MainSettings.Constants.PluginOperationDllDirectoryPath, fileName);

            string dllFtpFullPath = Path.Combine(MainSettings.GlobalSettings.SelfUpdateFtpPath
                                                 , MainSettings.Constants.OPERATION_PLUGIN_DIRECTORY_NAME
                                                 , fileName);
            DateTime?ftpFileLastModifiedDate = FtpWorks.GetFileLastModifiedDate(MainSettings.GlobalSettings.SelfUpdateFtpServer
                                                                                , MainSettings.GlobalSettings.SelfUpdateFtpUser
                                                                                , MainSettings.GlobalSettings.SelfUpdateFtpPassword
                                                                                , Path.Combine(MainSettings.GlobalSettings.SelfUpdateFtpPath, MainSettings.Constants.OPERATION_PLUGIN_DIRECTORY_NAME)
                                                                                , fileName);

            if (ftpFileLastModifiedDate.HasValue)
            {
                try
                {
                    DataSet ds = SqlWorks.ExecProc("GetOperationTypeByFileName", fileName);
                    if (ds == null || ds.Tables.Count == 0 || ds.Tables[0].Rows.Count == 0)
                    {
                        //Регистрируем
                        //Актуализируем файл из фтп, если нужно
                        var res = GetOrUpdateFileFromFtpLastModifiedDate(fileName, null);
                        if (!res.IsComplete)
                        {
                            return(new TryRegisterPlugin(false, $"Ошибка скачивания файла ({fileName}) с ftp в директорию ({MainSettings.Constants.PluginOperationDllDirectoryPath})"));
                        }
                        else
                        {
                            /*
                             * @Name nvarchar(512)
                             * ,@NameRus nvarchar(512)
                             * ,@GroupId int
                             * ,@FileName nvarchar(510)
                             * ,@FileMD5 nvarchar(64)
                             * ,@Description nvarchar(MAX)
                             */

                            //Пробуем получить имя типа операции
                            var dllResult = GetFromDll(dllLocalFullPath);
                            if (!dllResult.IsComplete)
                            {
                                return(new TryRegisterPlugin(false, $"Ошибка получения типа операции из файла ({dllLocalFullPath})"));
                            }

                            var addDs = SqlWorks.ExecProc("AddOperationType"
                                                          , dllResult.PluginOperationInstance.SqlName
                                                          , ""
                                                          , 1
                                                          , fileName
                                                          , ftpFileLastModifiedDate
                                                          , MD5Works.GetFileHash(dllLocalFullPath).ToUpper()
                                                          , "");

                            if (addDs != null && addDs.Tables.Count > 0 && addDs.Tables[0].Rows.Count > 0)
                            {
                                int id = ConvertSafe.ToInt32(addDs.Tables[0].Rows[0]["Id"]);
                                foreach (var param in dllResult.PluginOperationInstance.RegistrationParams)
                                {
                                    var resDs = SqlWorks.ExecProc("UpdateOperationTypesFieldsById"
                                                                  , id
                                                                  , param.Key
                                                                  , param.Value);

                                    if (resDs != null && resDs.Tables.Count > 0 && resDs.Tables[0].Rows.Count > 0)
                                    {
                                        if (Convert.ToInt32(resDs.Tables[0].Rows[0]["ResultId"]) == -1)
                                        {
                                            return(new TryRegisterPlugin(false, $"Ошибка записи параметров SQL из файла ({dllLocalFullPath}). SQL Error: {Convert.ToString(resDs.Tables[0].Rows[0]["Message"])}"));
                                        }
                                    }
                                    else
                                    {
                                        return(new TryRegisterPlugin(false, $"Ошибка записи параметров SQL из файла ({dllLocalFullPath})"));
                                    }
                                }
                            }

                            return(new TryRegisterPlugin());
                        }
                    }
                    else
                    {
                        DataRow  dr          = ds.Tables[0].Rows[0];
                        DateTime?sqlDateTime = null;
                        try
                        {
                            sqlDateTime = (DateTime?)dr["LastModifiedDate"];
                        }
                        catch
                        {
                            sqlDateTime = null;
                        }
                        //Обновляем, если нужно
                        if (!Extensions.IsNullableDateTimeIdentical(ftpFileLastModifiedDate, sqlDateTime))
                        {
                            //Актуализируем файл из фтп, если нужно
                            var res = GetOrUpdateFileFromFtpLastModifiedDate(fileName, sqlDateTime);
                            if (!res.IsComplete)
                            {
                                return(new TryRegisterPlugin(false, $"Ошибка скачивания файла ({fileName}) с ftp в директорию ({MainSettings.Constants.PluginOperationDllDirectoryPath})"));
                            }
                            else
                            {
                                var dllResult = GetFromDll(dllLocalFullPath);
                                if (!dllResult.IsComplete)
                                {
                                    return(new TryRegisterPlugin(false, $"Ошибка получения типа операции из файла ({dllLocalFullPath})"));
                                }

                                SqlWorks.ExecProc("UpdateOperationTypeById"
                                                  , Convert.ToInt32(dr["Id"])
                                                  , dllResult.PluginOperationInstance.SqlName
                                                  , ""
                                                  , 1
                                                  , fileName
                                                  , ftpFileLastModifiedDate
                                                  , MD5Works.GetFileHash(dllLocalFullPath).ToUpper()
                                                  , "");

                                foreach (var param in dllResult.PluginOperationInstance.RegistrationParams)
                                {
                                    var resDs = SqlWorks.ExecProc("UpdateOperationTypesFieldsById"
                                                                  , Convert.ToInt32(dr["Id"])
                                                                  , param.Key
                                                                  , param.Value);

                                    if (resDs != null && resDs.Tables.Count > 0 && resDs.Tables[0].Rows.Count > 0)
                                    {
                                        if (Convert.ToInt32(resDs.Tables[0].Rows[0]["ResultId"]) == -1)
                                        {
                                            return(new TryRegisterPlugin(false, $"Ошибка записи параметров SQL из файла ({dllLocalFullPath}). SQL Error: {Convert.ToString(resDs.Tables[0].Rows[0]["Message"])}"));
                                        }
                                    }
                                    else
                                    {
                                        return(new TryRegisterPlugin(false, $"Ошибка записи параметров SQL из файла ({dllLocalFullPath})"));
                                    }
                                }

                                return(new TryRegisterPlugin());
                            }
                        }

                        return(new TryRegisterPlugin());
                    }
                }
                catch (Exception ex)
                {
                    return(new TryRegisterPlugin(false, ex.ToString()));
                }
            }
            else
            {
                return(new TryRegisterPlugin(false, $"Не удалось получить дату последнего изменения файла ({fileName}) по ftp"));
            }
        }
Ejemplo n.º 23
0
 private void ComputerResponse()
 {
     SqlWorks.ExecProc("ComputerResponse", MainSettings.MainSqlSettings.ComputerId, Environment.MachineName, NetWork.GetLocalIPAddress(), isTaskerAlive);
 }
Ejemplo n.º 24
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, "Не удалось найти тип операции");
                    }
                }
            }
        }
Ejemplo n.º 25
0
 private bool CheckAgentIsOn()
 {
     try
     {
         if (MainSettings.MainSqlSettings.ComputerId.HasValue)
         {
             var ds = SqlWorks.ExecProc("GetComputerById", MainSettings.MainSqlSettings.ComputerId.Value);
             if (ds != null &&
                 ds.Tables.Count > 0 &&
                 ds.Tables[0].Rows.Count > 0)
             {
                 bool isOn = ConvertSafe.ToInt32(ds.Tables[0].Rows[0]["IsON"]) == 1 ? true : false;
                 if (isOn)
                 {
                     if (this.InvokeRequired)
                     {
                         this.Invoke(new MethodInvoker(() =>
                         {
                             lbAgentStatus.Text      = "Агент отчитывается в базу";
                             lbAgentStatus.BackColor = Color.LightGreen;
                         }));
                     }
                     else
                     {
                         lbAgentStatus.Text      = "Агент отчитывается в базу";
                         lbAgentStatus.BackColor = Color.LightGreen;
                     }
                     return(true);
                 }
                 else
                 {
                     if (this.InvokeRequired)
                     {
                         this.Invoke(new MethodInvoker(() =>
                         {
                             lbAgentStatus.Text      = "Агент не отчитывается в базу";
                             lbAgentStatus.BackColor = Color.Pink;
                         }));
                     }
                     else
                     {
                         lbAgentStatus.Text      = "Агент не отчитывается в базу";
                         lbAgentStatus.BackColor = Color.Pink;
                     }
                     return(false);
                 }
             }
             else
             {
                 if (this.InvokeRequired)
                 {
                     this.Invoke(new MethodInvoker(() =>
                     {
                         lbAgentStatus.Text      = "Агент не отчитывается в базу";
                         lbAgentStatus.BackColor = Color.Pink;
                     }));
                 }
                 else
                 {
                     lbAgentStatus.Text      = "Агент не отчитывается в базу";
                     lbAgentStatus.BackColor = Color.Pink;
                 }
                 return(false);
             }
         }
     }
     catch (Exception ex)
     {
         if (this.InvokeRequired)
         {
             this.Invoke(new MethodInvoker(() =>
             {
                 lbAgentStatus.Text      = "Агент не отчитывается в базу";
                 lbAgentStatus.BackColor = Color.Pink;
             }));
         }
         else
         {
             lbAgentStatus.Text      = "Агент не отчитывается в базу";
             lbAgentStatus.BackColor = Color.Pink;
         }
         return(false);
     }
     return(false);
 }
Ejemplo n.º 26
0
        private void btnNextStep_Click(object sender, EventArgs e)
        {
            Button button = sender as Button;
            Pages  page   = (Pages)button.Tag;
            int    tag    = (int)button.Tag;

            switch (page)
            {
            case Pages.JsonSettings:
                #region JsonSettings
                //Сохраняем Json
                try
                {
                    btnNextStep.Enabled = false;
                    var formJson = new JsonLocalSettings
                    {
                        BaseTask     = txtBaseTask.Text,
                        ServerTask   = txtServerTask.Text,
                        PasswordTask = txtPasswordTask.Text,
                        UserTask     = txtUserTask.Text
                    };
                    if (!CheckSQLConnection(formJson, false))
                    {
                        LogString("Ошибка при попытке установить соединение с Sql базой заданий");
                        return;
                    }
                    LogString("Тест соединения с Sql базой заданий успешно пройден.");
                    try
                    {
                        LogString("Создание Json - файла с настроками.");
                        NewtonJson.WriteJsonFile(formJson, MainSettings.JsonSettingsFileFullPath);
                    }
                    catch (Exception ex)
                    {
                        LogString(ex);
                        MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }
                    LogString("Json с настройками подключения к базе заданий создан успешно.");

                    LogString("Проверка Json - файла.");
                    var loadFromJsonResult = MainSettings.LoadFromJson();

                    if (!loadFromJsonResult.IsComplete)
                    {
                        LogString(loadFromJsonResult.Message);
                        MessageBox.Show(loadFromJsonResult.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }
                    LogString("Проверка Json - файла завершена успешно.");

                    cbShopID.DisplayMember = "ShopId";
                    cbShopID.ValueMember   = "ShopId";
                    cbShopID.DataSource    = SqlWorks.ExecProc("SelectShopsList")?.Tables[0];

                    LogString("Поиск настроек агента в Sql базе заданий.");
                    var loadSettingsResult = MainSettings.LoadSettings();
                    if (!loadSettingsResult.IsComplete)
                    {
                        LogString($"{loadSettingsResult.Message} - настройки не найдены.");

                        try
                        {
                            //Пробуем узнать версию 1С
                            LogString("Пробуем узнать версию 1С");
                            const string CONST_PART_1C_AGENT_PATH = "\\bin\\ragent.exe";
                            foreach (ServiceController sc in ServiceController.GetServices())
                            {
                                using (ManagementObject wmiService = new ManagementObject("Win32_Service.Name='" + sc.ServiceName + "'"))
                                {
                                    wmiService.Get();
                                    string currentserviceExePath = wmiService["PathName"].ToString();
                                    if (currentserviceExePath.Contains(CONST_PART_1C_AGENT_PATH))
                                    {
                                        currentserviceExePath = currentserviceExePath.Replace(CONST_PART_1C_AGENT_PATH, "|");
                                        string pathCropped = currentserviceExePath.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries).First();
                                        txtVersion1C.Text = pathCropped.Split(new string[] { "\\" }, StringSplitOptions.RemoveEmptyEntries).Last();
                                        //Показываем baloon tool tip о том что версия была определена автоматически и может быть не корректной
                                        _isShowVersion1cToolTip = true;
                                        break;
                                    }
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            LogString(ex);
                        }
                    }
                    else
                    {
                        LogString($"Настройки найдены.");

                        //SqlSettings
                        cbShopID.SelectedValue       = MainSettings.MainSqlSettings.ShopID;
                        tbBase1C.Text                = MainSettings.LocalSqlSettings.Base1C;
                        _is1CBaseOnServer            = MainSettings.LocalSqlSettings.Is1CBaseOnServer;
                        tbServerOrPath1C.Text        = (MainSettings.LocalSqlSettings.Is1CBaseOnServer ? MainSettings.LocalSqlSettings.Server1C : MainSettings.LocalSqlSettings.InformationBaseDirectory);
                        tbBase1C.Text                = MainSettings.LocalSqlSettings.Base1C;
                        txtUser1C.Text               = MainSettings.LocalSqlSettings.User1C;
                        txtPass1C.Text               = MainSettings.LocalSqlSettings.Pass1C;
                        txtVersion1C.Text            = MainSettings.LocalSqlSettings.Version1C;
                        txtTimeOut.Text              = MainSettings.LocalSqlSettings.OperationsListCheckTimeout.ToString();
                        txtSelfUpdatePath.Text       = MainSettings.LocalSqlSettings.SelfUpdatePath;
                        cbIsMainCashbox.Checked      = MainSettings.MainSqlSettings.IsMainCashbox;
                        cbIsServerLocated.Checked    = MainSettings.MainSqlSettings.Is1CServer;
                        cbIsCheck1C.Checked          = MainSettings.LocalSqlSettings.IsCheck1C;
                        tbSelfUpdateFtpServer.Text   = MainSettings.LocalSqlSettings.SelfUpdateFtpServer;
                        tbSelfUpdateFtpUser.Text     = MainSettings.LocalSqlSettings.SelfUpdateFtpUser;
                        tbSelfUpdateFtpPassword.Text = MainSettings.LocalSqlSettings.SelfUpdateFtpPassword;
                        tbSelfUpdateFtpPath.Text     = MainSettings.LocalSqlSettings.SelfUpdateFtpPath;
                    }
                }
                finally
                {
                    btnNextStep.Enabled = true;
                }
                ActivateSettingsPage(tabPageSettings);

                #endregion
                break;

            case Pages.MainAndLocalSqlSettings:
                #region MainAndLocalSqlSettings

                //Если компьютер не зарегистрирован, то регистрируем его
                #region RegisterAgent
                if (MainSettings.MainSqlSettings == null ||
                    !MainSettings.MainSqlSettings.ComputerId.HasValue ||
                    MainSettings.MainSqlSettings.ComputerId.Value == 0)
                {
                    LogString("Компьютер не зарегистрирован... Производится регистрация компьютера.");
                    var res = MainSettings.RegisterComputerId(ConvertSafe.ToString(cbShopID.SelectedValue));
                    if (!res.IsComplete)
                    {
                        LogString(res.Message);
                        MessageBox.Show(res.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }
                    LogString("Регистрация компьютера произведена успешно.");

                    LogString("Проверка регистрации компьютера.");

                    var loadSettingsRes = MainSettings.LoadMainSettingsFromSQL();
                    if (!loadSettingsRes.IsComplete)
                    {
                        LogString($"{loadSettingsRes.Message} - настройки не найдены.");
                        MessageBox.Show($"{loadSettingsRes.Message} - настройки не найдены.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }

                    if (MainSettings.MainSqlSettings == null ||
                        !MainSettings.MainSqlSettings.ComputerId.HasValue ||
                        MainSettings.MainSqlSettings.ComputerId.Value == 0)
                    {
                        LogString("Ошибка проверки регистрации компьютера. Не получен ComputerId.");
                        MessageBox.Show("Ошибка проверки регистрации компьютера. Не получен ComputerId.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }
                    LogString("Проверка регистрации компьютера успешно завершена.");
                }
                #endregion

                btnNextStep.Enabled = _isServiceInstallComplete;

                try
                {
                    //Сохраняем главные настройки компьютера
                    LogString("Сохранение главных настроек компьютера.");
                    var formSqlMainSettings = new SqlMainSettings
                    {
                        ComputerId    = MainSettings.MainSqlSettings.ComputerId,
                        Is1CServer    = cbIsServerLocated.Checked,
                        IsMainCashbox = cbIsMainCashbox.Checked,
                        ShopID        = Convert.ToString(cbShopID.SelectedValue)
                    };
                    SqlWorks.SaveMainSqlSettingsToBase(formSqlMainSettings);
                }
                catch (Exception ex)
                {
                    LogString(ex);
                    MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                LogString("Настройки компьютера успешно сохранены.");

                try
                {
                    //Сохраняем дополнительные настройки компьютера
                    LogString("Сохранение дополнительных настроек компьютера.");
                    var sqlLocalSettings = new SqlLocalSettings
                    {
                        Base1C                     = tbBase1C.Text,
                        User1C                     = txtUser1C.Text,
                        Pass1C                     = txtPass1C.Text,
                        Version1C                  = txtVersion1C.Text,
                        IsCheck1C                  = cbIsCheck1C.Checked,
                        SelfUpdatePath             = txtSelfUpdatePath.Text,
                        OperationsListCheckTimeout = Convert.ToInt32(txtTimeOut.Text),
                        SelfUpdateFtpServer        = tbSelfUpdateFtpServer.Text,
                        SelfUpdateFtpUser          = tbSelfUpdateFtpUser.Text,
                        SelfUpdateFtpPassword      = tbSelfUpdateFtpPassword.Text,
                        SelfUpdateFtpPath          = tbSelfUpdateFtpPath.Text,
                        Is1CBaseOnServer           = _is1CBaseOnServer,
                        Server1C                   = MainSettings.LocalSqlSettings?.Server1C,
                        InformationBaseDirectory   = MainSettings.LocalSqlSettings?.InformationBaseDirectory
                    };

                    if (_is1CBaseOnServer)
                    {
                        sqlLocalSettings.Server1C = tbServerOrPath1C.Text;
                    }
                    else
                    {
                        sqlLocalSettings.InformationBaseDirectory = tbServerOrPath1C.Text;
                    }

                    var res = SqlWorks.SaveLocalSqlSettingsToBase(sqlLocalSettings);

                    if (!res.IsComplete)
                    {
                        LogString(res.Message);
                        MessageBox.Show(res.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                catch (Exception ex)
                {
                    LogString(ex);
                    MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                LogString("Дополнительные настройки компьютера успешно сохранены.");

                LogString("Проверка настроек.");
                var loadSettingsresult = MainSettings.LoadSettings();
                if (!loadSettingsresult.IsComplete)
                {
                    LogString(loadSettingsresult.Message);
                    MessageBox.Show(loadSettingsresult.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                LogString("Проверка настроек успешно завершена.");
                ActivateSettingsPage(tabInstallService);
                #endregion

                LogString("Помечаем магазин как открытый.");
                SqlWorks.ExecProc("SetShopToOpen", ConvertSafe.ToString(cbShopID.SelectedValue));
                break;

            case Pages.InstallService:
                ActivateSettingsPage(tabControlTest);
                break;

            case Pages.ControlTest:
                this.Hide();
                NLogger.LogDebugToHdd("MagicUpdater успешно установлен.");
                MessageBox.Show("MagicUpdater успешно установлен.", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information);
                Application.Exit();
                break;

            case Pages.End:

                break;
            }
        }
Ejemplo n.º 27
0
 public static void SetReportForOperation(int operationId, bool isCompleted, string message)
 {
     SqlWorks.ExecProc("SendOperationReport", operationId, isCompleted, message);
 }
Ejemplo n.º 28
0
        public static TryRegisterPlugin RegisterOrUpdatePluginMd5(string nameRus, string fileName, int groupId = 1 /*стандартные операции*/, string description = "")
        {
            string dllLocalFullPath = Path.Combine(MainSettings.Constants.PluginOperationDllDirectoryPath, fileName);

            string dllFtpFullPath = Path.Combine(MainSettings.GlobalSettings.SelfUpdateFtpPath
                                                 , MainSettings.Constants.OPERATION_PLUGIN_DIRECTORY_NAME
                                                 , fileName);
            var ftpFileMd5Result = FtpWorks.GetFtpFileMd5(MainSettings.GlobalSettings.SelfUpdateFtpServer
                                                          , MainSettings.GlobalSettings.SelfUpdateFtpUser
                                                          , MainSettings.GlobalSettings.SelfUpdateFtpPassword
                                                          , Path.Combine(MainSettings.GlobalSettings.SelfUpdateFtpPath, MainSettings.Constants.OPERATION_PLUGIN_DIRECTORY_NAME)
                                                          , fileName);

            if (ftpFileMd5Result.IsComplete)
            {
                try
                {
                    string  ftpFileMd5 = ftpFileMd5Result.Value;
                    DataSet ds         = SqlWorks.ExecProc("GetOperationTypeByFileName", fileName);
                    if (ds == null || ds.Tables.Count == 0 || ds.Tables[0].Rows.Count == 0)
                    {
                        //Регистрируем
                        //Актуализируем файл из фтп, если нужно
                        var res = GetOrUpdateFileFromFtpMd5(fileName, null);
                        if (!res.IsComplete)
                        {
                            return(new TryRegisterPlugin(false, $"Ошибка скачивания файла ({fileName}) с ftp в директорию ({MainSettings.Constants.PluginOperationDllDirectoryPath})"));
                        }
                        else
                        {
                            /*
                             * @Name nvarchar(512)
                             * ,@NameRus nvarchar(512)
                             * ,@GroupId int
                             * ,@FileName nvarchar(510)
                             * ,@FileMD5 nvarchar(64)
                             * ,@Description nvarchar(MAX)
                             */

                            //Пробуем получить имя типа операции
                            var dllResult = GetFromDll(dllLocalFullPath);
                            if (!dllResult.IsComplete)
                            {
                                return(new TryRegisterPlugin(false, $"Ошибка плучения типа операции из файла ({dllLocalFullPath})"));
                            }

                            SqlWorks.ExecProc("AddOperationType"
                                              , dllResult.PluginOperationInstance.SqlName
                                              , nameRus
                                              , groupId
                                              , fileName
                                              , null
                                              , ftpFileMd5
                                              , description);

                            return(new TryRegisterPlugin());
                        }
                    }
                    else
                    {
                        DataRow dr = ds.Tables[0].Rows[0];
                        //Обновляем, если нужно
                        if (!MD5Works.CompareHahes(ftpFileMd5, Convert.ToString(dr["FileMD5"])))
                        {
                            //Актуализируем файл из фтп, если нужно
                            var res = GetOrUpdateFileFromFtpMd5(fileName, Convert.ToString(dr["FileMD5"]));
                            if (!res.IsComplete)
                            {
                                return(new TryRegisterPlugin(false, $"Ошибка скачивания файла ({fileName}) с ftp в директорию ({MainSettings.Constants.PluginOperationDllDirectoryPath})"));
                            }
                            else
                            {
                                var dllResult = GetFromDll(dllLocalFullPath);
                                if (!dllResult.IsComplete)
                                {
                                    return(new TryRegisterPlugin(false, $"Ошибка плучения типа операции из файла ({dllLocalFullPath})"));
                                }

                                SqlWorks.ExecProc("UpdateOperationTypeById"
                                                  , Convert.ToInt32(dr["Id"])
                                                  , dllResult.PluginOperationInstance.SqlName
                                                  , nameRus
                                                  , groupId
                                                  , fileName
                                                  , null
                                                  , ftpFileMd5
                                                  , description);

                                return(new TryRegisterPlugin());
                            }
                        }

                        return(new TryRegisterPlugin());
                    }
                }
                catch (Exception ex)
                {
                    return(new TryRegisterPlugin(false, ex.ToString()));
                }
            }
            else
            {
                return(new TryRegisterPlugin(false, $"Не удалось получить MD5 файла ({fileName}) по ftp"));
            }
        }