Example #1
0
        public override void Execute(
            Japi.Job job,
            Action<string> updateStatus,
            IRepository repositoryService,
            IJobManager jobManager)
        {
            var tasks = (from t in job.Tasks
                         select new { Task = t, Dependencies = t.Dependencies.Count }).ToList();

            while(tasks.Count() > 0)
            {
                var task = (from t in tasks
                            where t.Dependencies == 0
                            select t.Task).First();

                updateStatus(string.Format("Creating task \"{0}\"...", task.Name));

                tasks = (from t in tasks
                         where t.Task != task
                         let dependencyList = t.Task.Dependencies
                         let dependencyCount = t.Dependencies
                         select new
                         {
                             Task = t.Task,
                             Dependencies = dependencyList.Contains(task)
                                                ?
                                                   dependencyCount - 1
                                                :
                                                   dependencyCount
                         }).ToList();

                task.Id = jobManager.CreateTask(task.ToContract());
            }
        }
Example #2
0
 public override void Execute(
     Japi.Job job,
     Action<string> updateStatus,
     IRepository repositoryService,
     IJobManager jobManager)
 {
 }
Example #3
0
        public override void Execute(
            Japi.Job job,
            Action<string> updateStatus,
            IRepository repositoryService,
            IJobManager jobManager)
        {
            var allFiles = job.Files.ToDictionary(file => file, _ => false);

            var totalItems = job.Tasks.Count;
            var currentItem = 0;
            foreach(var task in job.Tasks)
            {
                updateStatus(string.Format("Processing files used by task \"{0}\"...", task.Name));
                allFiles[task.EntryPoint.Assembly] = true;

                foreach(var file in task.EntryPoint.References)
                    allFiles[file] = true;

                foreach(var file in task.InputFiles)
                    allFiles[file] = true;

                foreach(var file in task.OutputFiles)
                    allFiles[file] = true;

                currentItem++;
            }

            updateStatus("Building file list...");

            job.Files = allFiles.Where(pair => pair.Value)
                .Select(pair => pair.Key)
                .ToList();
        }
Example #4
0
 public override void Execute(
     Japi.Job job,
     Action<string> updateStatus,
     IRepository repositoryService,
     IJobManager jobManager)
 {
     job.Id = jobManager.CreateJob(job.Name).Id;
 }
Example #5
0
 public override void Execute(
     Japi.Job job,
     Action<string> updateStatus,
     IRepository repositoryService,
     IJobManager jobManager)
 {
     updateStatus("Validating job's graph...");
     var index = 0;
     var count = job.Tasks.Count;
     if(!job.Tasks.All(task => RecoursiveCheckGraph(task, ImmutableList<Japi.Task>.Empty)))
     {
         throw new Exception("Job is invalid: graph contains cycles.");
     }
 }
Example #6
0
 public override void Execute(
     Japi.Job job,
     Action<string> updateStatus,
     IRepository repositoryService,
     IJobManager jobManager)
 {
     foreach(var file in job.Files)
     {
         if(file is Japi.CreateFile)
             updateStatus(string.Format("Creating file: {0}...", file.Name));
         else
             updateStatus(string.Format("Uploading file: {0}...", file.Name));
         file.SaveFile(repositoryService);
     }
 }
Example #7
0
        private static void ExecuteJob(Japi.Job job)
        {
            var stagesProvider = new StagesProvider();
            var repositoryClientFactory = new RepositoryClientFactory();
            var jobManagerClientFactory = new JobManagerClientFactory();

            using(var repository = repositoryClientFactory.CreateClient())
            {
                using(var jobManager = jobManagerClientFactory.CreateClient(new JobManagerCallback()))
                {
                    foreach(var stage in stagesProvider.Stages)
                    {
                        Console.WriteLine(stage.Name + "...");
                        stage.Execute(job, Console.WriteLine, repository, jobManager);
                    }
                }
            }
        }
Example #8
0
        public override void Execute(
            Japi.Job job,
            Action<string> updateStatus,
            IRepository repositoryService,
            IJobManager jobManager)
        {
            var timer = Stopwatch.StartNew();
            jobManager.OpenJob(job.Id);
            jobManager.StartJob();

            while(true)
            {
                var state = jobManager.QueryJobState(job.Id);

                if(state == JobState.Completed)
                {
                    timer.Stop();
                    updateStatus(string.Format("Job completed in {0} ms", timer.ElapsedMilliseconds));
                    return;
                }

                if(state == JobState.Failed)
                {
                    timer.Stop();
                    using (ConsoleMessage.Error())
                    {
                        updateStatus("Job failed. Loading error report...");
                        var summary = jobManager.GetErrorReport(job.Id);
                        updateStatus(string.Format("Error report for job {{{0}, \"{1}\"}}", summary.JobId,
                                                   summary.JobName));
                        foreach (var report in summary.Errors)
                        {
                            updateStatus(string.Format("Task {{{0}, \"{1}\"}}: {2}",
                                                       report.Task.Id, report.Task.Name, report.Error));
                        }
                    }
                    return;
                }

                Thread.Sleep(100);
            }
        }
Example #9
0
        private static bool RecoursiveCheckGraph(Japi.Task root, ImmutableList<Japi.Task> previousTasks)
        {
            if(previousTasks.Contains(root))
            {
                Console.WriteLine("1: {0}", root);
                return false;
            }

            foreach(var task in root.Dependencies)
            {
                if(previousTasks.Contains(task))
                {
                    Console.WriteLine("2: {0}", root);
                    return false;
                }

                if(!RecoursiveCheckGraph(task, previousTasks.Add(root)))
                    return false;
            }
            return true;
        }