Example #1
0
        private async Task OnJobStart(Job job, ITransaction transaction)
        {
            await SaveJobRun(job, JobStatus.Running, transaction);

            transaction.StringSetAsync($"{_options.KeyPrefix}_{job.RunId}_details",
                                       BsonSerializer.ToBson(
                                           new JobExecutionDetail
            {
                DateStarted = DateTime.UtcNow.Ticks,
                Name        = job.Name,
                Parameters  = job.Parameters,
                Status      = JobStatus.Running
            }));
        }
Example #2
0
        private async Task SaveJobRun(ExecutedJob job, ITransaction transaction)
        {
            var last = await GetRun(job.RunId.ToString());

            if (last != null)
            {
                transaction.SetRemoveAsync($"{_options.KeyPrefix}_job_status_{last.Status.ToString()}",
                                           last.RunId.ToString());
            }
            job.Timestamp = DateTime.UtcNow.Ticks;
            var lastRun = $"{_options.KeyPrefix}_{job.Name}_last_run";
            var key     = $"{_options.KeyPrefix}_{job.Name}_runs";

            transaction.StringSetAsync($"{_options.KeyPrefix}_{job.RunId}_run", BsonSerializer.ToBson(job));
            transaction.SetAddAsync(key, job.RunId.ToString());
            transaction.StringSetAsync(lastRun, job.Timestamp);
            transaction.SetAddAsync($"{_options.KeyPrefix}_job_status_{job.Status.ToString()}", job.RunId.ToString());
        }
Example #3
0
        private async Task UpsertJob(Job job, ITransaction transaction = null)
        {
            using (var redLock =
                       await _lockFactory.CreateLockAsync($"{_options.KeyPrefix}_{job.Name}_create", TimeSpan.FromSeconds(5)))
            {
                if (!redLock.IsAcquired)
                {
                    return;
                }

                var db = _connection.GetDatabase();
                transaction = transaction ?? db.CreateTransaction();

                transaction.StringSetAsync($"{_options.KeyPrefix}_job_{job.Name}_meta", BsonSerializer.ToBson(job));
                transaction.SetAddAsync($"{_options.KeyPrefix}_jobs", job.Name);

                await transaction.ExecuteAsync();
            }
        }