示例#1
0
        public DefaultJobPublisher(MassiveJobsSettings settings,
                                   IMessagePublisher messagePublisher,
                                   IJobTypeProvider jobTypeProvider,
                                   IJobSerializer jobSerializer,
                                   IJobLogger <DefaultJobPublisher> logger)
        {
            _batchSize = settings.PublishBatchSize;

            Settings         = settings;
            MessagePublisher = messagePublisher;
            JobTypeProvider  = jobTypeProvider;
            JobSerializer    = jobSerializer;
            Logger           = logger;

            // This is just to avoid always publishing to a first worker
            // since the new instance of publisher is created on each job batch
            // for scheduled/periodic workers. Actually, immediate workers will
            // also create one instance of publisher per batch to inject into
            // jobs if jobs require it in their constructors.

            var tickCount = Math.Abs(Environment.TickCount);

            if (settings.ImmediateWorkersCount > 0)
            {
                _nextImmediateWorkerIndex = tickCount % settings.ImmediateWorkersCount;
            }
            if (settings.ScheduledWorkersCount > 0)
            {
                _nextScheduledWorkerIndex = tickCount % settings.ScheduledWorkersCount;
            }
            if (settings.LongRunningWorkersCount > 0)
            {
                _nextLongRunningWorkerIndex = tickCount % settings.LongRunningWorkersCount;
            }
        }
示例#2
0
        /// <summary>
        /// Creates a new class of the LegacyJobOrchestrator.
        /// </summary>
        /// <param name="publishedNodesJobConverter">The converter to read the job from the specified file.</param>
        /// <param name="legacyCliModelProvider">The provider that provides the legacy command line arguments.</param>
        /// <param name="jobSerializer">The serializer to (de)serialize job information.</param>
        /// <param name="logger">Logger to write log messages.</param>
        /// <param name="identity">Module's identity provider.</param>

        public LegacyJobOrchestrator(PublishedNodesJobConverter publishedNodesJobConverter,
                                     ILegacyCliModelProvider legacyCliModelProvider, IJobSerializer jobSerializer,
                                     ILogger logger, IIdentity identity)
        {
            _publishedNodesJobConverter = publishedNodesJobConverter
                                          ?? throw new ArgumentNullException(nameof(publishedNodesJobConverter));
            _legacyCliModel = legacyCliModelProvider.LegacyCliModel
                              ?? throw new ArgumentNullException(nameof(legacyCliModelProvider));
            _jobSerializer = jobSerializer ?? throw new ArgumentNullException(nameof(jobSerializer));
            _logger        = logger ?? throw new ArgumentNullException(nameof(logger));
            _identity      = identity ?? throw new ArgumentNullException(nameof(identity));

            var directory = Path.GetDirectoryName(_legacyCliModel.PublishedNodesFile);

            if (string.IsNullOrWhiteSpace(directory))
            {
                directory = Environment.CurrentDirectory;
            }

            var file = Path.GetFileName(_legacyCliModel.PublishedNodesFile);

            _fileSystemWatcher                     = new FileSystemWatcher(directory, file);
            _fileSystemWatcher.Changed            += _fileSystemWatcher_Changed;
            _fileSystemWatcher.EnableRaisingEvents = true;
            RefreshJobFromFile();
        }
示例#3
0
 /// <summary>
 /// Create client
 /// </summary>
 /// <param name="endpoints"></param>
 /// <param name="jobs"></param>
 /// <param name="serializer"></param>
 public PublisherJobClient(IEndpointRegistry endpoints, IJobScheduler jobs,
                           IJobSerializer serializer)
 {
     _serializer = serializer ?? throw new ArgumentNullException(nameof(serializer));
     _endpoints  = endpoints ?? throw new ArgumentNullException(nameof(endpoints));
     _jobs       = jobs ?? throw new ArgumentNullException(nameof(jobs));
 }
示例#4
0
        /// <summary>
        /// Create worker
        /// </summary>
        /// <param name="jobManagerConnector"></param>
        /// <param name="agentConfigProvider"></param>
        /// <param name="jobConfigurationFactory"></param>
        /// <param name="workerInstance"></param>
        /// <param name="lifetimeScope"></param>
        /// <param name="logger"></param>
        /// <param name="agentRepository"></param>
        public Worker(IJobOrchestrator jobManagerConnector,
                      IAgentConfigProvider agentConfigProvider, IJobSerializer jobConfigurationFactory,
                      int workerInstance, ILifetimeScope lifetimeScope, ILogger logger,
                      IWorkerRepository agentRepository = null)
        {
            _agentRepository         = agentRepository;
            _jobConfigurationFactory = jobConfigurationFactory ??
                                       throw new ArgumentNullException(nameof(jobConfigurationFactory));
            _lifetimeScope = lifetimeScope ??
                             throw new ArgumentNullException(nameof(lifetimeScope));
            _logger = logger ??
                      throw new ArgumentNullException(nameof(logger));
            _agentConfigProvider = agentConfigProvider ??
                                   throw new ArgumentNullException(nameof(agentConfigProvider));
            _jobManagerConnector = jobManagerConnector ??
                                   throw new ArgumentNullException(nameof(jobManagerConnector));
            _workerInstance = workerInstance;

            _heartbeatInterval  = _agentConfigProvider.GetHeartbeatInterval();
            _jobCheckerInterval = _agentConfigProvider.GetJobCheckInterval();
            _agentConfigProvider.OnConfigUpdated += (s, e) => {
                _heartbeatInterval  = _agentConfigProvider.GetHeartbeatInterval();
                _jobCheckerInterval = _agentConfigProvider.GetJobCheckInterval();
            };

            _lock           = new SemaphoreSlim(1, 1);
            _heartbeatTimer = new Timer(HeartbeatTimer_ElapsedAsync);
        }
示例#5
0
        /// <summary>
        /// Creates a new class of the LegacyJobOrchestrator.
        /// </summary>
        /// <param name="publishedNodesJobConverter">The converter to read the job from the specified file.</param>
        /// <param name="legacyCliModelProvider">The provider that provides the legacy command line arguments.</param>
        /// <param name="agentConfigPriovider">The provider that provides the agent configuration.</param>
        /// <param name="jobSerializer">The serializer to (de)serialize job information.</param>
        /// <param name="logger">Logger to write log messages.</param>
        /// <param name="identity">Module's identity provider.</param>

        public LegacyJobOrchestrator(PublishedNodesJobConverter publishedNodesJobConverter,
                                     ILegacyCliModelProvider legacyCliModelProvider, IAgentConfigProvider agentConfigPriovider,
                                     IJobSerializer jobSerializer, ILogger logger, IIdentity identity)
        {
            _publishedNodesJobConverter = publishedNodesJobConverter
                                          ?? throw new ArgumentNullException(nameof(publishedNodesJobConverter));
            _legacyCliModel = legacyCliModelProvider.LegacyCliModel
                              ?? throw new ArgumentNullException(nameof(legacyCliModelProvider));
            _agentConfig = agentConfigPriovider.Config
                           ?? throw new ArgumentNullException(nameof(agentConfigPriovider));

            _jobSerializer = jobSerializer ?? throw new ArgumentNullException(nameof(jobSerializer));
            _logger        = logger ?? throw new ArgumentNullException(nameof(logger));
            _identity      = identity ?? throw new ArgumentNullException(nameof(identity));

            var directory = Path.GetDirectoryName(_legacyCliModel.PublishedNodesFile);

            if (string.IsNullOrWhiteSpace(directory))
            {
                directory = Environment.CurrentDirectory;
            }

            _availableJobs = new Queue <JobProcessingInstructionModel>();
            _assignedJobs  = new ConcurrentDictionary <string, JobProcessingInstructionModel>();

            var file = Path.GetFileName(_legacyCliModel.PublishedNodesFile);

            _fileSystemWatcher                     = new FileSystemWatcher(directory, file);
            _fileSystemWatcher.Changed            += _fileSystemWatcher_Changed;
            _fileSystemWatcher.EnableRaisingEvents = true;
            RefreshJobFromFile();
        }
示例#6
0
 /// <summary>
 /// Create client
 /// </summary>
 /// <param name="endpoints"></param>
 /// <param name="jobs"></param>
 /// <param name="serializer"></param>
 /// <param name="config"></param>
 public PublisherJobService(IEndpointRegistry endpoints, IJobScheduler jobs,
                            IJobSerializer serializer, IPublishServicesConfig config)
 {
     _serializer = serializer ?? throw new ArgumentNullException(nameof(serializer));
     _endpoints  = endpoints ?? throw new ArgumentNullException(nameof(endpoints));
     _jobs       = jobs ?? throw new ArgumentNullException(nameof(jobs));
     _config     = config ?? throw new ArgumentNullException(nameof(config));
 }
示例#7
0
 public JobSerialization(IJobSerializer serializer)
 {
     Serializer = serializer;
 }
 public ConnectionConfiguration()
 {
     JobSerializer = new NewtonsoftJsonJobSerializer();
 }