public async Task <IActionResult> Add([FromBody] ApiTaskData data) { PtiTasker task = new PtiTasker() { ApplicationId = data.appId, RunArgs = data.runArgs, Schedule = data.schedule, TaskName = data.name, _id = MD5Helper.getMd5Hash(data.name) }; var _t = TaskManager.Get().AddTask(task); while (!_t.IsExcuted) { await Task.Delay(100); } var result = (bool)_t.EventResult; if (result) { return(ApiResult.OK()); } else { return(ApiResult.Failure()); } }
public bool SaveTask(PtiTasker task) { try { this.Db.AddOrUpdateTask(task); return(true); } catch (Exception e) { this.WriteError(e.ToString()); return(false); } }
public override bool AddOrUpdateTask(PtiTasker task) { lock (locker) { if (string.IsNullOrWhiteSpace(task._id)) { return(false); } using (var db = new LiteDatabase(Config.Get().LiteDBFile)) { var col = db.GetCollection <PtiTasker>("tasks"); col.Upsert(task._id, task); } return(true); } }
public bool CheckTaskAndKill(PtiTasker tasker) { var _old = this.RunnerList.Where(r => r.TaskInfo._id == tasker._id).FirstOrDefault(); if (_old != null && _old?.State == ProcessState.RUNNING) { try { _old.KillAsync(); return(true); } catch (Exception ex) { this.WriteError(ex.ToString()); return(false); } } return(true); }
public PtiRunner(PtiTasker task, PtiApp app) { this.Id = Guid.NewGuid().ToString(); this.TaskInfo = task; this.AppInfo = app; this.Logger = new PtiLogger(task._id, fileFormat: "yyyyMMdd_HHmmss"); this.Logger.FormatOutput = false; task.LastLogName = this.Logger.FileName; this.MessagePipelines = new List <Action <string> >(); this.ErrMessagePipelines = new List <Action <string> >(); this.CreateDate = DateTime.Now; this.CheckRunner(); this.ProcessInfo = new ProcessStartInfo(task.GetRunCmd(), task.GetRunArgs()); ProcessInfo.CreateNoWindow = true; //不创建窗口 ProcessInfo.UseShellExecute = false; //不使用系统外壳程序启动,重定向输出的话必须设为false ProcessInfo.RedirectStandardOutput = true; //重定向输出,而不是默认的显示在dos控制台上 ProcessInfo.RedirectStandardError = true; ProcessInfo.WorkingDirectory = Path.GetFullPath(task.RunPath); this.State = ProcessState.INIT; }
public override bool AddOrUpdateTask(PtiTasker task) { throw new NotImplementedException(); }
public abstract bool AddOrUpdateTask(PtiTasker task);
static void Main(string[] args) { Console.WriteLine("Ptilopsis 0.1"); Console.WriteLine("2019-10-21"); var dbManager = DBManager.Get(); var runnerManager = RunnerManager.Get(); var taskManager = TaskManager.Get(); var appManager = AppManager.Get(); var eventManager = EventManager.Get(); dbManager.Start(); runnerManager.Start(); taskManager.Start(); appManager.Start(); eventManager.Start(); #region 任务计划计算测试 //DateSchedule sch = new DateSchedule(); //Console.WriteLine(sch.CalculateDateScheduleFromNow("*,*,*,1,0")); //Console.WriteLine(sch.CalculateDateScheduleFromNow("*,*,5,1,0")); #endregion #region App解压测试 PtiApp app = new PtiApp() { Name = "Hello Ptilopsis", ZipFile = "main.zip", DefaultRunCmd = "node" }; app.Id = MD5Helper.getMd5Hash(app.Name); appManager.AddApp(app); //PtiApp app2 = new PtiApp() //{ // Name = "EchoTest", // DefaultRunCmd = "echo" //}; //app2.Id = MD5Helper.getMd5Hash(app.Name); //appManager.AddApp(app2); foreach (var item in dbManager.GetAllApps()) { Console.WriteLine(item.Name); } #endregion #region TASK测试 //PtiTasker task = new PtiTasker() //{ // ApplicationId=app.Id, // RunArgs="main.py", // TaskName= "Hello Ptilopsis", // _id=Guid.NewGuid().ToString("N") //}; PtiTasker task = new PtiTasker() { ApplicationId = app.Id, RunArgs = "main.js", TaskName = "testNode", _id = Guid.NewGuid().ToString("N") }; var _t = taskManager.AddTask(task); //while (!_t.IsExcuted) //{ // Thread.Sleep(100); //} //Console.WriteLine(_t.EventResult); while (true) { Thread.Sleep(100); } #endregion //#if DEBUG // PtiTester tester = new PtiTester(); // PtiApp app = new PtiApp();//APP 项目目录 // PtiTask task = new PtiTask(); // task.RunPath = "D:\\RunPath"; // task.RunCmd = "python"; // task.RunArgs = "main.py"; // PtiRunner runner = new PtiRunner(task, app); // tester.TestRunner(runner); //#endif // Console.WriteLine("Hello World!"); }