public override bool AddOrUpdateApp(PtiApp app) { lock (locker) { if (string.IsNullOrWhiteSpace(app.Id)) { return(false); } else { app._id = app.Id; } using (var db = new LiteDatabase(Config.Get().LiteDBFile)) { var col = db.GetCollection <PtiApp>("apps"); col.Upsert(app._id, app); } 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 async Task <IActionResult> Update([FromForm] ApiAppData data) { string fileName = null; if (data.file != null) { var fileExName = data.file.FileName.Substring(data.file.FileName.LastIndexOf(".")); fileName = Guid.NewGuid().ToString("N") + fileExName; var saveFile = Path.Combine(Ptilopsis.Config.Get().AppZipPath, fileName); using (FileStream fs = System.IO.File.Create(saveFile)) { await data.file.CopyToAsync(fs); fs.Flush(); } } //储存对象 PtiApp app = new PtiApp() { Name = data.name, ZipFile = fileName, DefaultRunCmd = data.runCmd, Description = data.description, CreateDate = DateTime.Now }; app.Id = MD5Helper.getMd5Hash(app.Name); if (AppManager.Get().AddApp(app)) { return(ApiResult.OK()); } else { return(ApiResult.Failure("程序添加失败")); } }
public override bool AddOrUpdateApp(PtiApp app) { throw new NotImplementedException(); }
public abstract bool AddOrUpdateApp(PtiApp app);
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!"); }
/// <summary> /// 添加一个任务 /// </summary> /// <param name="tasker"></param> /// <param name="app"></param> /// <param name="immediately"></param> public PtiEventer AddTask(PtiTasker tasker, PtiApp app = null, bool immediately = false) { return(EventManager.Get().RegEvent(ptievent => { try { if (app == null) { app = DBManager.Get().Db.GetAppById(tasker.ApplicationId); if (app == null) { return false; } } tasker.RunCmd = app.DefaultRunCmd; var r = this.TaskPool.Where(i => i.PtiTasker._id == tasker._id).FirstOrDefault(); if (r == null) { if (!CheckTask(tasker)) { WriteWarning($"Task {tasker._id}({tasker.TaskName}) 添加失败,任务参数不正确!"); return false; } //APP改成从APP模块查询获得 PtiRunTask runtask = new PtiRunTask() { PtiTasker = tasker, PtiApp = app }; if (!immediately) { if (runtask.PtiTasker.Schedule != null) { runtask.NextRunDate = Schedule.CalculateDateScheduleFromNow(runtask.PtiTasker.Schedule); } else { runtask.NextRunDate = DateTime.Now; } } else { runtask.NextRunDate = DateTime.Now.AddSeconds(3); } this.TaskPool.Add(runtask); DBManager.Get().SaveTask(tasker);//立即储存 return true; } else { if (!r.PtiTasker.Enable) { r.PtiTasker.Enable = true; } } return true; } catch (Exception e) { WriteError(e.ToString()); return false; } }, PtiEventType.AddTask)); }