Пример #1
0
        public IActionResult AddAssignment([FromBody] Assignment assignment)
        {
            using (var context = new Models.tasktDatabaseContext())
            {
                if (assignment != null)
                {
                    DateTime now = DateTime.Now;
                    if (assignment.Interval == Assignment.TimeInterval.Seconds)
                    {
                        now.AddSeconds(assignment.Frequency);
                    }
                    else if (assignment.Interval == Assignment.TimeInterval.Minutes)
                    {
                        now.AddMinutes(assignment.Frequency);
                    }
                    else if (assignment.Interval == Assignment.TimeInterval.Days)
                    {
                        now.AddMonths(assignment.Frequency);
                    }
                    else if (assignment.Interval == Assignment.TimeInterval.Months)
                    {
                        now.AddMonths(assignment.Frequency);
                    }

                    assignment.NewTaskDue = now;
                    context.Assignments.Add(assignment);
                    context.SaveChanges();
                    return(Ok(assignment));
                }
                else
                {
                    return(BadRequest());
                }
            }
        }
Пример #2
0
        public IActionResult AddDataToBotStore([FromBody] BotStoreModel storeData)
        {
            using (var context = new Models.tasktDatabaseContext())
            {
                if (!context.Workers.Any(f => f.WorkerID == storeData.LastUpdatedBy))
                {
                    return(Unauthorized());
                }

                if (context.BotStore.Any(f => f.BotStoreName == storeData.BotStoreName))
                {
                    var existingItem = context.BotStore.Where(f => f.BotStoreName == storeData.BotStoreName).FirstOrDefault();
                    existingItem.BotStoreValue = storeData.BotStoreValue;
                    existingItem.LastUpdatedOn = DateTime.Now;
                    existingItem.LastUpdatedBy = storeData.LastUpdatedBy;
                }
                else
                {
                    storeData.LastUpdatedOn = DateTime.Now;
                    context.BotStore.Add(storeData);
                }

                context.SaveChanges();
                return(Ok(storeData));
            }
        }
Пример #3
0
 public IActionResult AddAssignment([FromBody] Assignment assignment)
 {
     using (var context = new Models.tasktDatabaseContext())
     {
         context.Assignments.Add(assignment);
         context.SaveChanges();
         return(Ok(assignment));
     }
 }
Пример #4
0
 public IActionResult PublishScript([FromBody] PublishedScript script)
 {
     using (var context = new Models.tasktDatabaseContext())
     {
         if (script.OverwriteExisting)
         {
             var currentItem = context.PublishedScripts.Where(f => f.WorkerID == script.WorkerID && f.FriendlyName == script.FriendlyName).OrderByDescending(f => f.PublishedOn).FirstOrDefault();
             currentItem.PublishedOn = DateTime.Now;
             currentItem.ScriptData  = script.ScriptData;
             context.SaveChanges();
             return(Ok("The script has been updated on the server."));
         }
         else
         {
             script.PublishedOn = DateTime.Now;
             context.PublishedScripts.Add(script);
             context.SaveChanges();
             return(Ok("The script has been successfully published."));
         }
     }
 }
Пример #5
0
        public IActionResult ScheduleTask([FromBody] NewTaskRequest request)
        {
            //Todo: Add Auth Check, Change to HTTPPost and validate workerID is valid
            if (request is null)
            {
                return(BadRequest());
            }


            using (var context = new Models.tasktDatabaseContext())
            {
                var publishedScript = context.PublishedScripts.Where(f => f.PublishedScriptID == request.publishedScriptID).FirstOrDefault();

                if (publishedScript == null)
                {
                    return(BadRequest());
                }


                //find worker
                var workerRecord = context.Workers.Where(f => f.WorkerID == request.workerID).FirstOrDefault();

                //if worker wasnt found then search for pool

                if (workerRecord == null)
                {
                    //find from pool
                    var poolExists = context.WorkerPools.Any(s => s.WorkerPoolID == request.workerID);

                    //if pool wasnt found
                    if (!poolExists)
                    {
                        //return bad request
                        return(BadRequest());
                    }
                }


                //create new task
                var newTask = new Models.Task();
                newTask.WorkerID      = request.workerID;
                newTask.TaskStarted   = DateTime.Now;
                newTask.Status        = "Scheduled";
                newTask.ExecutionType = "Remote";
                newTask.Script        = publishedScript.PublishedScriptID.ToString();
                newTask.Remark        = "Scheduled by tasktServer";

                var entry = context.Tasks.Add(newTask);
                context.SaveChanges();
                return(Ok(newTask));
            }
        }
Пример #6
0
 public IActionResult AddNewWorker(string userName, string machineName)
 {
     using (var context = new Models.tasktDatabaseContext())
     {
         var newWorker = new Models.Worker();
         newWorker.UserName    = userName;
         newWorker.MachineName = machineName;
         newWorker.LastCheckIn = DateTime.Now;
         newWorker.Status      = Models.WorkerStatus.Pending;
         context.Workers.Add(newWorker);
         context.SaveChanges();
         return(Ok(newWorker));
     }
 }
Пример #7
0
        public IActionResult UpdateTask(Guid taskID, string status, Guid workerID, string userName, string machineName, string remark)
        {
            //Todo: Needs Testing
            using (var context = new Models.tasktDatabaseContext())
            {
                var taskToUpdate = context.Tasks.Where(f => f.TaskID == taskID).FirstOrDefault();

                if (status == "Completed")
                {
                    taskToUpdate.TaskFinished = DateTime.Now;
                }

                taskToUpdate.UserName    = userName;
                taskToUpdate.MachineName = machineName;
                taskToUpdate.Remark      = remark;
                taskToUpdate.Status      = status;
                context.SaveChanges();
                return(Ok(taskToUpdate));
            }
        }
Пример #8
0
        public IActionResult NewTask(Guid workerID, string taskName, string userName, string machineName)
        {
            //Todo: Add Auth Check, Change to HTTPPost and validate workerID is valid


            using (var context = new Models.tasktDatabaseContext())
            {
                //var workerExists = context.Workers.Where(f => f.WorkerID == workerID).Count() > 0;

                //if (!workerExists)
                //{
                //    //Todo: Create Alert
                //    return Unauthorized();
                //}

                //close out any stale tasks
                var staleTasks = context.Tasks.Where(f => f.WorkerID == workerID && f.Status == "Running");
                foreach (var task in staleTasks)
                {
                    task.Status = "Closed";
                }

                var newTask = new Models.Task();
                newTask.WorkerID      = workerID;
                newTask.UserName      = userName;
                newTask.MachineName   = machineName;
                newTask.TaskStarted   = DateTime.Now;
                newTask.Status        = "Running";
                newTask.ExecutionType = "Local";
                newTask.Script        = taskName;

                var entry = context.Tasks.Add(newTask);
                context.SaveChanges();
                return(Ok(newTask));
            }
        }
Пример #9
0
        public IActionResult CheckInWorker(Guid workerID, bool engineBusy)
        {
            using (var context = new Models.tasktDatabaseContext())
            {
                var targetWorker = context.Workers.Where(f => f.WorkerID == workerID).FirstOrDefault();

                if (targetWorker is null)
                {
                    return(BadRequest());
                }
                else
                {
                    targetWorker.LastCheckIn = DateTime.Now;
                    Models.Task            scheduledTask   = null;
                    Models.PublishedScript publishedScript = null;


                    if (!engineBusy)
                    {
                        scheduledTask = context.Tasks.Where(f => f.WorkerID == workerID && f.Status == "Scheduled").FirstOrDefault();


                        if (scheduledTask != null)
                        {
                            //worker directly scheduled

                            publishedScript = context.PublishedScripts.Where(f => f.PublishedScriptID.ToString() == scheduledTask.Script).FirstOrDefault();

                            if (publishedScript != null)
                            {
                                scheduledTask.Status = "Deployed";
                            }
                            else
                            {
                                scheduledTask.Status = "Deployment Failed";
                            }
                        }
                        else
                        {
                            //check if any pool tasks

                            var workerPools = context.WorkerPools
                                              .Include(f => f.PoolWorkers)
                                              .Where(f => f.PoolWorkers.Any(s => s.WorkerID == workerID)).ToList();

                            foreach (var pool in workerPools)
                            {
                                scheduledTask = context.Tasks.Where(f => f.WorkerID == pool.WorkerPoolID && f.Status == "Scheduled").FirstOrDefault();

                                if (scheduledTask != null)
                                {
                                    //worker directly scheduled

                                    publishedScript = context.PublishedScripts.Where(f => f.PublishedScriptID.ToString() == scheduledTask.Script).FirstOrDefault();

                                    if (publishedScript != null)
                                    {
                                        scheduledTask.Status = "Deployed";
                                    }
                                    else
                                    {
                                        scheduledTask.Status = "Deployment Failed";
                                    }

                                    break;
                                }
                            }
                        }
                    }

                    context.SaveChanges();


                    return(Ok(new Models.CheckInResponse
                    {
                        Worker = targetWorker,
                        ScheduledTask = scheduledTask,
                        PublishedScript = publishedScript
                    }));
                }
            }
        }