public void GetListOfModulesInJsonFile()
        {
            //Given
            Constants.CodeBaseRootPath = GetExecutingDirectorybyAppDomain();
            AssemblyLoaderManager loader = new AssemblyLoaderManager();

            //When
            var(modules, plugins) = loader.GetAssembliesToRegister();
            //Then
            Assert.NotEmpty(modules);
        }
Beispiel #2
0
        public virtual void Discover()
        {
            Logger.Info("Loading the assemblies...");

            // Reload assemblies
            AssemblyLoaderManager.LoadAssemblies(JobsDirectory, cleanLoad: true);

            Logger.Info("Discovering the jobs...");

            // discovering new jobs
            var discoveredJobs = AssemblyLoaderManager.GetImplementorsOf <BaseJob>();

            Logger.Info($"Found {discoveredJobs.Count} job(s)");

            if (discoveredJobs.Count > 0)
            {
                Logger.Debug($"Discovered jobs:{Environment.NewLine}{string.Join(Environment.NewLine, discoveredJobs.Select(job => $"- Group: {job.GetGroup()}, Name: {job.GetName()}, Schedule: {job.Schedule}"))}");
            }

            // Currently scheduled jobs
            var scheduledJobs = GetAllJobs().Where(job => job.Group != "DEFAULT").ToList(); // exclude triggers which are running right now

            if (scheduledJobs.Any())
            {
                Logger.Info("Revisiting scheduled jobs...");
                Logger.Debug($"Currently scheduled jobs:{Environment.NewLine}{string.Join(Environment.NewLine, scheduledJobs)}");
            }

            // Un-scheduling old jobs
            foreach (var scheduledJob in scheduledJobs)
            {
                if (!discoveredJobs.Any(job => job.GetType().Name.Equals(scheduledJob.Name, StringComparison.InvariantCultureIgnoreCase) &&
                                        job.GetType().Namespace.Equals(scheduledJob.Group, StringComparison.InvariantCultureIgnoreCase)))
                {
                    UnscheduleJob(scheduledJob.Name, scheduledJob.Group);
                }
            }

            // schedule new jobs
            if (discoveredJobs.Count > 0)
            {
                ScheduleJobs(discoveredJobs);
                OnJobsDiscovered();
            }
        }
        public Task Execute(IJobExecutionContext context)
        {
            return(Task.Run(() =>
            {
                try
                {
                    var typeFullName = context.JobDetail?.JobDataMap?.GetString("TypeFullName");

                    var jobType = AssemblyLoaderManager.GetType(typeFullName);

                    if (jobType != null)
                    {
                        var jobObj = Container.Resolve <BaseJob>(jobType);
                        jobObj.Execute();
                    }
                }
                catch (Exception ex)
                {
                    throw new JobExecutionException("An unexpected error has occurred during job execution", ex, false);
                }
            }));
        }