Esempio n. 1
0
        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());
            }
        }
Esempio n. 2
0
 public bool SaveTask(PtiTasker task)
 {
     try
     {
         this.Db.AddOrUpdateTask(task);
         return(true);
     }
     catch (Exception e)
     {
         this.WriteError(e.ToString());
         return(false);
     }
 }
Esempio n. 3
0
 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);
     }
 }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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;
        }
Esempio n. 6
0
 public override bool AddOrUpdateTask(PtiTasker task)
 {
     throw new NotImplementedException();
 }
Esempio n. 7
0
 public abstract bool AddOrUpdateTask(PtiTasker task);
Esempio n. 8
0
        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!");
        }