public Job GetQueuedJob(ScriptLanguageEnum languages) { _logger.LogInformation("Attemping to find a queued job"); List <short> LanguagesToQuery = new List <short>(); foreach (ScriptLanguageEnum scriptLanguage in (ScriptLanguageEnum[])Enum.GetValues(typeof(ScriptLanguageEnum))) { if (languages.HasFlag(scriptLanguage)) { _logger.LogDebug($"Will search for language {scriptLanguage}"); LanguagesToQuery.Add((short)scriptLanguage); } } var job = _context.JobQueue .Where(p => LanguagesToQuery.Contains(p.ScriptLanguage) ) .OrderBy(p => p.Created) .Include(p => p.Job) .FirstOrDefault(); if (job == null) { _logger.LogInformation("No pending jobs found."); return(null); } _logger.LogDebug($"Found job {job.JobUid} - attempting to process it."); _context.Remove(job); try { _context.SaveChanges(); } catch (DbUpdateConcurrencyException ex) { _logger.LogWarning("Concurrency conflict in getting job - will throw out result and try again. This means another worker picked up the job."); var entry = ex.Entries.Single(); if (entry.State == EntityState.Deleted) { entry.State = EntityState.Detached; } else { entry.OriginalValues.SetValues(entry.GetDatabaseValues()); } return(GetQueuedJob(languages)); } return(job.Job); }
public VMScriptJob GetQueuedScriptedJob(ScriptLanguageEnum languages) { var job = GetQueuedJob(languages); if (job == null) { return(null); } var body = GetScript(job); var parameters = GetJobParameters(job); VMScriptJob vmScriptJob = new VMScriptJob(); vmScriptJob.Job = job; vmScriptJob.Script = body; vmScriptJob.Parameters = parameters; return(vmScriptJob); }
public VMScriptJob GetQueuedJob(ScriptLanguageEnum language) { //is this a runbook worker or something else authorized? TODO return(_jobManager.GetQueuedScriptedJob(language)); }