Esempio n. 1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="JobbrServer"/> class.
        /// </summary>
        public JobbrServer(IJobScheduler scheduler, IJobExecutor jobExecutor, IJobStorageProvider jobStorageProvider, List <IJobbrComponent> components, MessageDispatcher messageDispatcher, ConfigurationManager configurationManager, RegistryBuilder registryBuilder)
        {
            Logger.Debug("A new instance of a a JobbrServer has been created.");

            this.scheduler = scheduler;
            this.executor  = jobExecutor;

            this.components           = components;
            this.configurationManager = configurationManager;
            this.registryBuilder      = registryBuilder;
            this.jobStorageProvider   = jobStorageProvider;

            messageDispatcher.WireUp();
        }
Esempio n. 2
0
        private static void AddTrigger(IJobStorageProvider storage, JobTriggerBase trigger, JobDefinition jobDef, long jobId)
        {
            trigger.IsActive = true;
            trigger.JobId    = jobId;

            Logger.InfoFormat("Adding trigger (type: '{0}' to job '{1}' (JobId: '{2}')", trigger.GetType().Name, jobDef.UniqueName, jobId);

            var scheduledTrigger = trigger as ScheduledTrigger;

            if (scheduledTrigger != null)
            {
                storage.AddTrigger(jobId, scheduledTrigger);
            }

            var recurringTrigger = trigger as RecurringTrigger;

            if (recurringTrigger != null)
            {
                storage.AddTrigger(jobId, recurringTrigger);
            }
        }
 public ExposeStorageProvider(IJobStorageProvider jobStorageProvider)
 {
     this.JobStorageProvider = jobStorageProvider;
     Instance = this;
 }
Esempio n. 4
0
        public ExposeAllServicesComponent(IJobbrServiceProvider serviceProvider, IArtefactsStorageProvider artefactsStorageProvider, IJobStorageProvider jobStorageProvider, IJobManagementService jobManagementService, IQueryService queryService, IServerManagementService managementService, IJobRunInformationService informationService, IJobRunProgressChannel progressChannel)
        {
            this.ServiceProvider          = serviceProvider;
            this.ArtefactsStorageProvider = artefactsStorageProvider;
            this.JobStorageProvider       = jobStorageProvider;
            this.JobManagementService     = jobManagementService;
            this.QueryService             = queryService;
            this.ManagementService        = managementService;
            this.InformationService       = informationService;
            this.ProgressChannel          = progressChannel;

            instancesPerThread.Value = this;
        }
Esempio n. 5
0
        internal int Apply(IJobStorageProvider storage)
        {
            var numberOfChanges = 0;

            if (this.HasConfiguration)
            {
                foreach (var jobDefinition in this.Definitions)
                {
                    var existingJob = storage.GetJobByUniqueName(jobDefinition.UniqueName);

                    if (existingJob == null)
                    {
                        // Add new Job
                        Logger.InfoFormat("Adding job '{0}' of type '{1}'", jobDefinition.UniqueName, jobDefinition.ClrType);
                        var job = new Job {
                            UniqueName = jobDefinition.UniqueName, Type = jobDefinition.ClrType, Parameters = jobDefinition.Parameter
                        };
                        storage.AddJob(job);

                        foreach (var trigger in jobDefinition.Triggers)
                        {
                            AddTrigger(storage, trigger, jobDefinition, job.Id);
                            numberOfChanges++;
                        }
                    }
                    else
                    {
                        // Update existing Jobs and triggers
                        if (!string.Equals(existingJob.Type, jobDefinition.ClrType, StringComparison.OrdinalIgnoreCase))
                        {
                            Logger.InfoFormat("Updating type for Job '{0}' (Id: '{1}') from '{2}' to '{2}'", existingJob.UniqueName, existingJob.Id, existingJob.Type, jobDefinition.ClrType);
                            existingJob.Type       = jobDefinition.ClrType;
                            existingJob.Parameters = jobDefinition.Parameter;

                            storage.Update(existingJob);

                            numberOfChanges++;
                        }

                        if (jobDefinition.HasTriggerDefinition)
                        {
                            // Setup triggers
                            var job                  = storage.GetJobByUniqueName(jobDefinition.UniqueName);
                            var activeTriggers       = storage.GetTriggersByJobId(job.Id, 1, int.MaxValue).Items.Where(t => t.IsActive).ToList();
                            var toDeactivateTriggers = new List <JobTriggerBase>(activeTriggers.Where(t => !(t is InstantTrigger)));

                            if (jobDefinition.Triggers.Any())
                            {
                                Logger.InfoFormat("Job '{0}' has {1} tiggers explicitly specified by definition. Going to apply the TriggerDefiniton to the actual storage provider.", existingJob.UniqueName, jobDefinition.Triggers.Count);
                            }

                            // Update or add new ones
                            foreach (var trigger in jobDefinition.Triggers)
                            {
                                var existingOne = activeTriggers.FirstOrDefault(t => this.IsSame(t as dynamic, trigger as dynamic));

                                if (existingOne == null)
                                {
                                    // Add one
                                    AddTrigger(storage, trigger, jobDefinition, job.Id);
                                    Logger.InfoFormat("Added trigger (type: '{0}' to job '{1}' (JobId: '{2}')'", trigger.GetType().Name, jobDefinition.UniqueName, trigger.Id);

                                    numberOfChanges++;
                                }
                                else
                                {
                                    toDeactivateTriggers.Remove(existingOne);
                                }
                            }

                            // Deactivate not specified triggers
                            foreach (var trigger in toDeactivateTriggers)
                            {
                                Logger.InfoFormat("Deactivating trigger (type: '{0}' to job '{1}' (JobId: '{2}')'", trigger.GetType().Name, jobDefinition.UniqueName, trigger.Id);
                                storage.DisableTrigger(existingJob.Id, trigger.Id);
                                numberOfChanges++;
                            }
                        }
                    }
                }

                // Deactivate non existent
            }

            return(numberOfChanges);
        }
Esempio n. 6
0
 public JobbrRepository(IJobStorageProvider storageProvider)
 {
     this.storageProvider = storageProvider;
 }