public async Task StartJob() { Job currentJob; if (PendingJobs.NotEmpty() && !Cancelled) { lock (PendingJobs) currentJob = PendingJobs.Dequeue(); lock (ScheduledJobs) ScheduledJobs.Add(currentJob); await jobSemaphore.WaitAsync(); if (ScheduledJobs.NotEmpty() && !Cancelled) { lock (ScheduledJobs) ScheduledJobs.Remove(currentJob); lock (ExecutingJobs) ExecutingJobs.Add(currentJob); await currentJob.Execute(ImageMaker); if (!Cancelled) { lock (ExecutingJobs) ExecutingJobs.Remove(currentJob); } jobSemaphore.Release(); } } }
public Task ScheduleJob(Envelope envelope) { if (!envelope.ExecutionTime.HasValue) { throw new ArgumentOutOfRangeException(nameof(envelope), "No value for ExecutionTime"); } ScheduledJobs.Enqueue(envelope.ExecutionTime.Value, envelope); return(Task.CompletedTask); }
public void Dispose() { if (_hasStopped) { StopAsync(Settings.Cancellation).GetAwaiter().GetResult(); } Settings.Cancel(); Runtime.Dispose(); ScheduledJobs.Dispose(); }
public async Task Activate(LocalWorkerSender localWorker, CapabilityGraph capabilities, JasperRuntime runtime, GenerationRules generation, PerfTimer timer) { timer.MarkStart("ServiceBusActivator"); _handlers.Compile(generation, runtime, timer); var capabilityCompilation = capabilities.Compile(_handlers, Serialization, _channels, runtime, _transports, Lookup); var transports = _transports.Where(x => _settings.StateFor(x.Protocol) != TransportState.Disabled) .ToArray(); timer.Record("WorkersGraph.Compile", () => { _settings.Workers.Compile(_handlers.Chains.Select(x => x.MessageType)); }); localWorker.Start(_persistence, Workers); if (!_settings.DisableAllTransports) { timer.MarkStart("ApplyLookups"); await _settings.ApplyLookups(Lookup); timer.MarkFinished("ApplyLookups"); timer.Record("ChannelGraph.Start", () => { _channels.As <ChannelGraph>().Start(_settings, transports, Lookup, capabilities, Logger, Workers); }); ScheduledJobs.Start(Workers); } runtime.Capabilities = await capabilityCompilation; if (runtime.Capabilities.Errors.Any() && _settings.ThrowOnValidationErrors) { throw new InvalidSubscriptionException(runtime.Capabilities.Errors); } timer.MarkFinished("ServiceBusActivator"); }
public void SetRunning(bool running, string jobName) { var allJobs = Repo.GetAll(); var storeJob = allJobs.FirstOrDefault(x => x.Name == jobName); if (storeJob != null) { storeJob.Running = running; Repo.Update(storeJob); } else { var job = new ScheduledJobs { Running = running, Name = jobName }; Repo.Insert(job); } }
public void Record(string jobName) { var allJobs = Repo.GetAll(); var storeJob = allJobs.FirstOrDefault(x => x.Name == jobName); if (storeJob != null) { storeJob.LastRun = DateTime.UtcNow; Repo.Update(storeJob); } else { var job = new ScheduledJobs { LastRun = DateTime.UtcNow, Name = jobName }; Repo.Insert(job); } }
public void Connect() { var path = Connection.GetProperty <string>("Path"); if (System.IO.File.Exists(path)) { var config = System.IO.File.ReadAllText(path); var settings = new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All }; data = Newtonsoft.Json.JsonConvert.DeserializeObject <ScheduledJobs>(config, settings); } else { data = new ScheduledJobs(); } }
public void Dispose() { ScheduledJobs.Dispose(); }