Example #1
0
        private void InitUpdateManager()
        {
            Logger.WriteToTrace($"Включение слежения за обновлениями в директории \"{Context.Settings.Registry.UpdatesPath}\"...");
            UpdateManager = new ETLUpdateManager(Pumps, Context.Settings.Registry);

            Logger.WriteToTrace("Проверка наличия обновлений.");
            UpdateManager.CheckUpdates();

            UpdateManager.OnReceiveUpdate += async(s, a) => {
                await Broadcast.Send(new ETLBroadcastAction {
                    Action = "receiveUpdate",
                    Data   = a.UpdateInfo
                });
            };

            UpdateManager.OnUpdate += async(s, a) => {
                // Обновлённая закачка
                ETLProcess prc = Pumps.FirstOrDefault(p => p.ProgramID == a.UpdateInfo.ProgramID);
                if (prc == null)
                {
                    return;
                }

                await Broadcast.Send(new ETLBroadcastAction
                {
                    Action = "update",
                    Data   = new Dictionary <string, object> {
                        { "Info", a.UpdateInfo },
                        { "Config", prc.ConfigData }
                    }
                });
            };
        }
Example #2
0
        /// <summary>
        /// Функция запуска закачки
        /// </summary>
        public decimal Execute(string id, string config)
        {
            ETLProcess prc = Pumps.FirstOrDefault(p => p.ProgramID == id);

            // Проверка наличия в реестре
            if (prc == null)
            {
                throw new Exception("Закачка с заданным идентификатором отсутствует.");
            }

            // Проверка среди запущенных
            if (prc.IsExecuting)
            {
                return(-1);
            }

            // Для запуска процесса версия БД должна быть выше
            if (prc.Version > Context.Version)
            {
                throw new Exception("Версия системы ниже необходимой для запуска.");
            }

            decimal sessNo = Context.History.AddRecord(prc.ProgramID, Context.Version, prc.Version, "user", config);

            // При запуске добавляем в список запущенных
            prc.OnStart += async(s, a) => {
                await Broadcast.Send(new ETLBroadcastAction {
                    Action = "startPump",
                    Data   = new Dictionary <string, object> {
                        { "id", id }
                    }
                });
            };

            // При закрытии процесса удаляем его из запущенных
            prc.OnExit += async(s, a) => {
                await Broadcast.Send(new ETLBroadcastAction {
                    Action = "endPump",
                    Data   = new Dictionary <string, object> {
                        { "id", id },
                        { "status", ((ETLProcess)s).LastStatus.ToString() }
                    }
                });
            };

            prc.Start(sessNo);
            return(sessNo);
        }
Example #3
0
        public int ApplyUpdates(string[] updates)
        {
            int count = UpdateManager.Updates.Count;

            foreach (ETLUpdateRecord rec in updates.Select(u => UpdateManager.Updates[u]))
            {
                // Обновление невозможно применить при запущенном процессе закачки
                ETLProcess prc = Pumps.FirstOrDefault(p => p.ProgramID == rec.ProgramID);
                if (prc != null && prc.IsExecuting)
                {
                    continue;
                }

                UpdateManager.ApplyUpdate(rec, Context.History);
            }

            return(count - UpdateManager.Updates.Count);
        }
Example #4
0
        /// <summary>
        /// Аварийное завершение закачки
        /// </summary>
        public void Terminate(string id)
        {
            ETLProcess pump = Pumps.FirstOrDefault(p => p.IsExecuting && p.ProgramID == id);

            pump?.Terminate();
        }