Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        public VMScriptJob GetQueuedJob(ScriptLanguageEnum language)
        {
            //is this a runbook worker or something else authorized? TODO

            return(_jobManager.GetQueuedScriptedJob(language));
        }