Ejemplo n.º 1
0
        public SwiftProcess(string method, JobBase job, Process process)
        {
            _method = method;
            switch (_method)
            {
            case "SplitJob":
                _timeout = job.JobSplitTimeout;
                break;

            case "CollectTaskResult":
                _timeout = job.TaskResultCollectTimeout;
                break;

            default:
                _timeout = 0;
                break;
            }

            _job             = job;
            _businessId      = job.BusinessId;
            _eventActions    = null;
            _process         = process;
            _jobTask.Process = this;
            _filePath        = SwiftConfiguration.GetSwiftProcessPath(_method, _businessId);
            _job.RelateProcess(method, this);
        }
Ejemplo n.º 2
0
 public SwiftProcess(string method, JobTask task, Process process)
 {
     _method          = method;
     _jobTask         = task;
     _timeout         = _jobTask.ExecuteTimeout;
     _job             = task.Job;
     _businessId      = task.BusinessId;
     _eventActions    = null;
     _process         = process;
     _jobTask.Process = this;
     _filePath        = SwiftConfiguration.GetSwiftProcessPath(_method, _businessId);
 }
Ejemplo n.º 3
0
 /// <summary>
 /// 移除进程文件
 /// </summary>
 public void RemoveProcessFile()
 {
     try
     {
         var processFilePath = SwiftConfiguration.GetSwiftProcessPath("ExecuteTask", BusinessId);
         File.Delete(processFilePath);
         LogWriter.Write("has remove task execute process file");
     }
     catch (Exception ex)
     {
         LogWriter.Write("remove task execute process file go exception", ex);
     }
 }
Ejemplo n.º 4
0
        /// <summary>
        /// 创建进程文件
        /// </summary>
        public void CreateProcessFile()
        {
            var processDirPath = SwiftConfiguration.AllSwiftProcessRootPath;

            if (!Directory.Exists(processDirPath))
            {
                Directory.CreateDirectory(processDirPath);
            }

            // 在进程内部记录进程Id,方便跟踪Swift启动的进程
            var processFilePath = SwiftConfiguration.GetSwiftProcessPath("ExecuteTask", BusinessId);

            File.WriteAllText(processFilePath, Process.Id.ToString());
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 获取进程Id
        /// </summary>
        /// <returns>The process identifier.</returns>
        public int GetProcessId(CancellationToken cancellationToken = default(CancellationToken))
        {
            cancellationToken.ThrowIfCancellationRequested();

            int processId       = -1;
            var processFilePath = SwiftConfiguration.GetSwiftProcessPath("ExecuteTask", BusinessId);

            if (File.Exists(processFilePath))
            {
                processId = int.Parse(File.ReadAllTextAsync(processFilePath, cancellationToken).Result);
            }

            return(processId);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Kills the abandoned collect task result process.
        /// </summary>
        /// <param name="processId">Process identifier.</param>
        /// <param name="jobName">Job name.</param>
        /// <param name="jobId">Job identifier.</param>
        public static void KillAbandonedCollectTaskResultProcess(int processId, string jobName, string jobId)
        {
            var businessId = JobBase.FormatBusinessId(jobName, jobId);

            Process osProcess = null;

            try
            {
                osProcess = Process.GetProcessById(processId);
            }
            catch (Exception ex)
            {
                LogWriter.Write(string.Format("根据进程Id查找进程异常,进程可能已经关闭了:{0},{1}", businessId, processId), ex, LogLevel.Info);
            }

            bool canDeleteProcessFile = true;

            if (osProcess != null)
            {
                if (SwiftProcess.CheckJobAndProcessMatch(osProcess, jobName, jobId, "CollectTaskResult"))
                {
                    try
                    {
                        osProcess.Kill();
                        osProcess.WaitForExit();
                        LogWriter.Write(string.Format("已关闭废弃的任务合并进程:{0},{1}", businessId, processId), LogLevel.Info);
                    }
                    catch (Exception ex)
                    {
                        canDeleteProcessFile = false;
                        LogWriter.Write(string.Format("关闭废弃的任务合并进程异常:{0},{1}", businessId, processId), ex, LogLevel.Error);
                    }
                }
            }

            if (canDeleteProcessFile)
            {
                var processPath = SwiftConfiguration.GetSwiftProcessPath("CollectTaskResult", JobBase.FormatBusinessId(jobName, jobId));
                try
                {
                    File.Delete(processPath);
                    LogWriter.Write(string.Format("进程文件已删除:{0}", processPath), LogLevel.Info);
                }
                catch (Exception ex)
                {
                    LogWriter.Write(string.Format("删除废弃的任务合并进程文件异常:{0},{1}", businessId, processId), ex, LogLevel.Error);
                }
            }
        }