Exemplo n.º 1
0
        void Execute(string threadName,out bool executed)
        {
            // ILog log = MO.Core.ServiceLogManager.GetLogger(threadName);
            executed = false;
            try
            {
                SystemProcessThread systemProcessThread = _OnGetSystemProcessThread(threadName);
                if(systemProcessThread.Continuous && systemProcessThread.Enabled==false)
                {

                    if(systemProcessThread.ScheduledTime.HasValue)
                    {
                        TimeSpan duration=DateTime.UtcNow-DateTime.UtcNow.Date;
                        if(duration.TotalSeconds>= systemProcessThread.ScheduledTime.Value.TotalSeconds && duration.TotalSeconds<=systemProcessThread.ScheduledTime.Value.TotalSeconds+systemProcessThread.SleepTime)
                        {
                            systemProcessThread.Enabled = true;
                            systemProcessThread = _OnUpdateSystemProcess(systemProcessThread);
                        }
                    }
                    else
                    {
                        if(systemProcessThread.LastSuccessfullyExecuted.HasValue)
                        {
                            TimeSpan duration = DateTime.UtcNow - systemProcessThread.LastSuccessfullyExecuted.Value;
                            if(duration.TotalSeconds>=systemProcessThread.ContinuousDelay)
                            {
                                systemProcessThread.Enabled = true;
                                systemProcessThread = _OnUpdateSystemProcess(systemProcessThread);
                            }
                        }
                        else
                        {
                            systemProcessThread.Enabled = true;
                            systemProcessThread = _OnUpdateSystemProcess(systemProcessThread);
                        }

                    }
                }
                if (systemProcessThread.Enabled)
                {
                    try

                    {
                        thread_OnReportEngineState(threadName, GenericServiceThread.EngineStatusList.Running);
                        ISystemProcessThread systemProcess=null;
                        if (systemProcessThread.SpringEntryName == "PerformanceStatisticThread")
                            systemProcess = new PerformanceStatisticThread();
                        else if (systemProcessThread.SpringEntryName == "DeleteDataThread")
                            systemProcess = new DeleteDataThread();
                        else systemProcess = IoC.Resolve<ISystemProcessThread>(systemProcessThread.SpringEntryName);
                        systemProcess.ThreadName = threadName;
                        systemProcess.LastSuccessfullyExecuted = systemProcessThread.LastSuccessfullyExecuted;
                        systemProcess.ScheduledTime = systemProcessThread.ScheduledTime;
                        systemProcess.StartRange = systemProcessThread.StartRange;
                        systemProcess.EndRange = systemProcessThread.EndRange;

                        executed = true;
                        try
                        {

                            DateTime dt = DateTime.UtcNow;
                            string message = systemProcess.Execute(systemProcessThread.Argument);
                            TimeSpan executionTime = DateTime.UtcNow.Subtract(dt);
                            systemProcessThread = _OnGetSystemProcessThread(threadName);
                            systemProcessThread.LastSuccessfullyExecuted = DateTime.UtcNow;
                            systemProcessThread.Status = GenericServiceThread.EngineStatusList.Sleeping.ToString();
                            systemProcessThread.Message = message;
                            systemProcessThread.ExecutionTime = executionTime.TotalMilliseconds;
                          //  log.Info(string.Format("{0} Worker Thread Completed", threadName));
                            StopThread(systemProcessThread);
                        }
                        catch(SqlException ex)
                        {
                            if(ex.Number==1205  || ex.Number==-2)
                            {
                            }
                            else
                            {
                                StopThread(systemProcessThread);
                                throw ex;
                            }
                        }
                        catch (Exception ex)
                        {
                            StopThread(systemProcessThread);
                            throw ex;
                        }

                    }
                    catch (Exception ex)
                    {
                        systemProcessThread.Status = GenericServiceThread.EngineStatusList.Exception.ToString();
                        systemProcessThread.Message = string.Format("{0} at {1}", ex.Message, DateTime.UtcNow.ToISOString());
                        StopThread(systemProcessThread);
                        throw ex;
                    }
                }

            }
            catch (Exception ex)
            {
                LogException(ex);
                throw ex;
            }
        }
Exemplo n.º 2
0
        void Execute(string threadName, out bool executed)
        {
            // ILog log = MO.Core.ServiceLogManager.GetLogger(threadName);
            executed = false;
            try
            {
                SystemProcessThread systemProcessThread = _OnGetSystemProcessThread(threadName);
                if (systemProcessThread.Continuous && systemProcessThread.Enabled == false)
                {
                    if (systemProcessThread.ScheduledTime.HasValue)
                    {
                        TimeSpan duration = DateTime.UtcNow - DateTime.UtcNow.Date;
                        if (duration.TotalSeconds >= systemProcessThread.ScheduledTime.Value.TotalSeconds && duration.TotalSeconds <= systemProcessThread.ScheduledTime.Value.TotalSeconds + systemProcessThread.SleepTime)
                        {
                            systemProcessThread.Enabled = true;
                            systemProcessThread         = _OnUpdateSystemProcess(systemProcessThread);
                        }
                    }
                    else
                    {
                        if (systemProcessThread.LastSuccessfullyExecuted.HasValue)
                        {
                            TimeSpan duration = DateTime.UtcNow - systemProcessThread.LastSuccessfullyExecuted.Value;
                            if (duration.TotalSeconds >= systemProcessThread.ContinuousDelay)
                            {
                                systemProcessThread.Enabled = true;
                                systemProcessThread         = _OnUpdateSystemProcess(systemProcessThread);
                            }
                        }
                        else
                        {
                            systemProcessThread.Enabled = true;
                            systemProcessThread         = _OnUpdateSystemProcess(systemProcessThread);
                        }
                    }
                }
                if (systemProcessThread.Enabled)
                {
                    try

                    {
                        thread_OnReportEngineState(threadName, GenericServiceThread.EngineStatusList.Running);
                        ISystemProcessThread systemProcess = null;
                        if (systemProcessThread.SpringEntryName == "PerformanceStatisticThread")
                        {
                            systemProcess = new PerformanceStatisticThread();
                        }
                        else if (systemProcessThread.SpringEntryName == "DeleteDataThread")
                        {
                            systemProcess = new DeleteDataThread();
                        }
                        else
                        {
                            systemProcess = IoC.Resolve <ISystemProcessThread>(systemProcessThread.SpringEntryName);
                        }
                        systemProcess.ThreadName = threadName;
                        systemProcess.LastSuccessfullyExecuted = systemProcessThread.LastSuccessfullyExecuted;
                        systemProcess.ScheduledTime            = systemProcessThread.ScheduledTime;
                        systemProcess.StartRange = systemProcessThread.StartRange;
                        systemProcess.EndRange   = systemProcessThread.EndRange;

                        executed = true;
                        try
                        {
                            DateTime dt            = DateTime.UtcNow;
                            string   message       = systemProcess.Execute(systemProcessThread.Argument);
                            TimeSpan executionTime = DateTime.UtcNow.Subtract(dt);
                            systemProcessThread = _OnGetSystemProcessThread(threadName);
                            systemProcessThread.LastSuccessfullyExecuted = DateTime.UtcNow;
                            systemProcessThread.Status        = GenericServiceThread.EngineStatusList.Sleeping.ToString();
                            systemProcessThread.Message       = message;
                            systemProcessThread.ExecutionTime = executionTime.TotalMilliseconds;
                            //  log.Info(string.Format("{0} Worker Thread Completed", threadName));
                            StopThread(systemProcessThread);
                        }
                        catch (SqlException ex)
                        {
                            if (ex.Number == 1205 || ex.Number == -2)
                            {
                            }
                            else
                            {
                                StopThread(systemProcessThread);
                                throw ex;
                            }
                        }
                        catch (Exception ex)
                        {
                            StopThread(systemProcessThread);
                            throw ex;
                        }
                    }
                    catch (Exception ex)
                    {
                        systemProcessThread.Status  = GenericServiceThread.EngineStatusList.Exception.ToString();
                        systemProcessThread.Message = string.Format("{0} at {1}", ex.Message, DateTime.UtcNow.ToISOString());
                        StopThread(systemProcessThread);
                        throw ex;
                    }
                }
            }
            catch (Exception ex)
            {
                LogException(ex);
                throw ex;
            }
        }