Пример #1
0
 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);
     }
 }
Пример #2
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;
        }
Пример #3
0
        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("程序添加失败"));
            }
        }
Пример #4
0
 public override bool AddOrUpdateApp(PtiApp app)
 {
     throw new NotImplementedException();
 }
Пример #5
0
 public abstract bool AddOrUpdateApp(PtiApp app);
Пример #6
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!");
        }
Пример #7
0
        /// <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));
        }