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; } }
/// <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(); }
/// <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)); }
/// <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); }
/// <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(); }
/// <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)); }
public JobSerialization(IJobSerializer serializer) { Serializer = serializer; }
public ConnectionConfiguration() { JobSerializer = new NewtonsoftJsonJobSerializer(); }