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 })); }
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()); }
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(); } }