Ejemplo n.º 1
0
        /// <summary>
        /// 替换路径中的环境参数
        /// </summary>
        /// <param name="job"></param>
        private void ReplacePathVars(JobOption job)
        {
            if (job.CodePath != null)
            {
                for (int i = 0; i < job.CodePath.Length; i++)
                {
                    job.CodePath[i] = PathHelper.ReplaceEnvVars(job.CodePath[i]);
                }
            }

            if (job.SlnFiles != null)
            {
                for (int i = 0; i < job.SlnFiles.Length; i++)
                {
                    job.SlnFiles[i] = PathHelper.ReplaceEnvVars(job.SlnFiles[i]);
                }
            }


            foreach (var action in job.Actions)
            {
                if (action.Items != null)
                {
                    for (int i = 0; i < action.Items.Length; i++)
                    {
                        // 替换路径中的环境变量
                        action.Items[i] = PathHelper.ReplaceEnvVars(action.Items[i]);
                    }
                }
            }
        }
Ejemplo n.º 2
0
        public void Execute(JobOption job, bool enableConsoleOut)
        {
            if (job == null)
            {
                throw new ArgumentNullException(nameof(job));
            }

            if (job.Actions == null)
            {
                return;
            }

            TaskContext context = new TaskContext(job, enableConsoleOut);

            // 替换路径中的环境参数
            ReplacePathVars(job);

            // 填充配置中的路径
            PaddingPath(job);

            // 记录程序的运行时环境
            LogRuntimeEnvironment(context);


            try {
                foreach (TaskAction a in job.Actions)
                {
                    ITask task = TaskFactory.CreateTask(a.Type);
                    task.Execute(context, a);
                }
            }
            finally {
                SaveRunLog(context);
            }
        }
Ejemplo n.º 3
0
        public static bool CanLinkToDailyReportPage(this JobOption job, string day)
        {
            DateTime date;

            if (DateTime.TryParse(day, out date) == false)
            {
                return(false);
            }

            string filename = ScanResultCache.GetTotalResultFilePath(job.Id, date);

            return(File.Exists(filename));
        }
        public ITrigger CreateTrigger(JobOption jobOption)
        {
            var triggerBuilder = TriggerBuilder.Create();

            switch (jobOption.Unit)
            {
            case Configurations.IntervalUnit.Second:
                triggerBuilder.WithSimpleSchedule(s =>
                {
                    s.WithIntervalInSeconds(jobOption.IntervalTime)
                    .RepeatForever();
                });
                break;

            case Configurations.IntervalUnit.Minute:
                triggerBuilder.WithSimpleSchedule(s =>
                {
                    s.WithIntervalInMinutes(jobOption.IntervalTime)
                    .RepeatForever();
                });
                break;

            case Configurations.IntervalUnit.Hour:
                triggerBuilder.WithSimpleSchedule(s =>
                {
                    s.WithIntervalInHours(jobOption.IntervalTime)
                    .RepeatForever();
                });
                break;

            case Configurations.IntervalUnit.Day:
                triggerBuilder.WithSimpleSchedule(s =>
                {
                    s.WithIntervalInHours(jobOption.IntervalTime * 24)
                    .RepeatForever();
                });
                break;
            }

            if (jobOption.DelayTime == 0)
            {
                triggerBuilder = triggerBuilder.StartNow();
            }
            else
            {
                var startTime = DateTime.UtcNow.AddMilliseconds(jobOption.DelayTime);
                triggerBuilder = triggerBuilder.StartAt(startTime);
            }
            return(triggerBuilder.Build());
        }
        public ITrigger CreateTrigger(JobOption jobOption)
        {
            var triggerBuilder = CreateTriggerBuilder();

            if (jobOption.DelayTime == 0)
            {
                triggerBuilder = triggerBuilder.StartNow();
            }
            else
            {
                var startTime = DateTime.UtcNow.AddMilliseconds(jobOption.DelayTime);
                triggerBuilder = triggerBuilder.StartAt(startTime);
            }

            return(triggerBuilder.Build());
        }
Ejemplo n.º 6
0
        public TaskContext(JobOption job, bool enableConsoleOut)
        {
            if (job == null)
            {
                throw new ArgumentNullException(nameof(job));
            }

            _job = job;
            _enableConsoleOut = enableConsoleOut;

            // 每个小组使用一个临时目录
            _tempPath = InitTempDirectory(job.Id);


            // 初始化数据结果对象
            _totalResult = InitTask();
        }
Ejemplo n.º 7
0
        public ITrigger CreateTrigger(JobOption jobOption)
        {
            if (!Regex.IsMatch(jobOption.CronExpression, cornRegEx))
            {
                throw new QuartzException("Corn表达式错误");
            }
            var triggerBuilder = TriggerBuilder.Create()
                                 .WithCronSchedule(jobOption.CronExpression);

            if (jobOption.DelayTime == 0)
            {
                triggerBuilder = triggerBuilder.StartNow();
            }
            else
            {
                var startTime = DateTime.UtcNow.AddMilliseconds(jobOption.DelayTime);
                triggerBuilder = triggerBuilder.StartAt(startTime);
            }

            return(triggerBuilder.Build());
        }
Ejemplo n.º 8
0
        /// <summary>
        /// 填充配置中的路径
        /// </summary>
        /// <param name="job"></param>
        private void PaddingPath(JobOption job)
        {
            // 对于大多数项目来说,都有一个根目录
            // 而在具体配置文件中,同样的目录会出现在 CodePath,SlnFiles,AssemblyScan 中重复配置
            // 这样既不方便,看起来也不美观,

            // 这里允许 SlnFiles,AssemblyScan 引用 CodePath 路径,而不需要显式指定
            // 例如:CodePath : G:\my-github\SpecChecker\demo-code\SpeChecker.DEMO
            // 那么可以这样配置    SlnFiles : \SpeChecker.DEMO.sln


            // 只适合配置一个路径时启用
            if (job.CodePath != null && job.CodePath.Length == 1)
            {
                string basePath = job.CodePath[0].TrimEnd('\\');


                if (job.SlnFiles != null)
                {
                    for (int i = 0; i < job.SlnFiles.Length; i++)
                    {
                        if (job.SlnFiles[i].Length > 0 && job.SlnFiles[i][0] == '\\')
                        {
                            job.SlnFiles[i] = basePath + job.SlnFiles[i];
                        }
                    }
                }


                foreach (var action in job.Actions)
                {
                    // 只处理 AssemblyScan 节点
                    if (action.Type == "AssemblyScan" && action.Items != null)
                    {
                        for (int i = 0; i < action.Items.Length; i++)
                        {
                            // 先反序列化,用于获取路径
                            string line    = action.Items[i];
                            bool   changed = false;

                            TextLineSerializer serializer = new TextLineSerializer();
                            AssemblyScanOption option     = serializer.Deserialize <AssemblyScanOption>(line);

                            if (string.IsNullOrEmpty(option.Sln) == false)
                            {
                                if (option.Sln[0] == '\\')
                                {
                                    option.Sln = basePath = option.Sln;
                                    changed    = true;
                                }
                            }

                            if (string.IsNullOrEmpty(option.Bin) == false)
                            {
                                if (option.Bin[0] == '\\')
                                {
                                    option.Bin = basePath + option.Bin;
                                    changed    = true;
                                }
                            }

                            // 如果有变化,就替换配置中的参数
                            if (changed)
                            {
                                action.Items[i] = serializer.Serialize(option);
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 9
0
 public async Task StartJob(JobOption option)
 {
     _jobHub = Connect(SpearType.Jobs);
     await Task.CompletedTask;
 }