public async Task <IActionResult> PutWorkingRecord([FromRoute] int id, [FromBody] WorkingRecord workingRecord) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (id != workingRecord.Id) { return(BadRequest()); } _context.Entry(workingRecord).State = EntityState.Modified; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!WorkingRecordExists(id)) { return(NotFound()); } else { throw; } } return(NoContent()); }
public async Task <IActionResult> PostWorkingRecord([FromBody] WorkingRecord workingRecord) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } _context.WorkingRecords.Add(workingRecord); await _context.SaveChangesAsync(); return(CreatedAtAction("GetWorkingRecord", new { id = workingRecord.Id }, workingRecord)); }
public void WorkerExecuteRetry() { IJob job = new TestJob() { ThrowException = true, Retries = 1 }; SignalsRecord signals = new SignalsRecord() { QueueNames = "*", WorkerSignal = WorkerSignal.None, WorkingSignal = WorkingSignal.None }; QueueRecord queued = new QueueRecord() { Id = 12, ApplicationName = BlueCollarSection.Section.ApplicationName, Data = JsonConvert.SerializeObject(job), JobName = job.Name, JobType = JobSerializer.GetTypeName(job.GetType()), QueuedOn = DateTime.UtcNow, QueueName = "*", TryNumber = 1 }; WorkingRecord working = Worker.CreateWorking(queued, 1, null, DateTime.UtcNow); working.Id = 13; var transaction = new Mock <IDbTransaction>(); var repository = new Mock <IRepository>(); repository.Setup(r => r.BeginTransaction()).Returns(transaction.Object); repository.Setup(r => r.BeginTransaction(It.IsAny <IsolationLevel>())).Returns(transaction.Object); repository.Setup(r => r.CreateWorking(It.IsAny <WorkingRecord>(), It.IsAny <IDbTransaction>())).Returns(working); repository.Setup(r => r.GetQueued(It.IsAny <string>(), It.IsAny <QueueNameFilters>(), It.IsAny <DateTime>(), It.IsAny <IDbTransaction>())).Returns(queued); repository.Setup(r => r.GetWorkingSignals(It.IsAny <long>(), It.IsAny <long?>(), It.IsAny <IDbTransaction>())).Returns(signals); var factory = new Mock <IRepositoryFactory>(); factory.Setup(f => f.Create()).Returns(repository.Object); var logger = new Mock <ILogger>(); using (Worker worker = new Worker(BlueCollarSection.Section.ApplicationName, 1, "Test Worker", null, 1, false, factory.Object, logger.Object)) { worker.Start(); Thread.Sleep(1500); Assert.AreEqual(WorkerStatus.Working, worker.Status); } repository.Verify(r => r.CreateHistory(It.Is <HistoryRecord>(h => h.Status == HistoryStatus.Failed), It.IsAny <IDbTransaction>())); repository.Verify(r => r.CreateQueued(It.Is <QueueRecord>(q => q.TryNumber == 2), It.IsAny <IDbTransaction>())); }
/// <summary> /// Performs the concrete request operation and returns the output /// as a byte array. /// </summary> /// <param name="context">The HTTP context to perform the request for.</param> /// <param name="model">The model passed in the request's content body.</param> /// <returns>The result of the request.</returns> protected override object PerformRequest(HttpContextBase context, WorkingSignalRecord model) { if (model == null) { throw new ArgumentNullException("model", "model cannot be null."); } if (this.Id > 0) { if (model.Signal == WorkingSignal.Cancel) { using (IDbTransaction transaction = Repository.BeginTransaction()) { try { WorkingRecord working = Repository.GetWorking(this.Id, transaction); if (working != null && working.ApplicationName == ApplicationName) { working.Signal = model.Signal; Repository.UpdateWorking(working, transaction); } else { NotFound(); } transaction.Commit(); } catch { transaction.Rollback(); throw; } } } else { BadRequest(); } } else { BadRequest(); } return(null); }
/// <summary> /// Updates the given working record. /// </summary> /// <param name="record">The working record to update.</param> /// <param name="transaction">The transaction to use, if applicable.</param> /// <returns>The updated working record.</returns> public WorkingRecord UpdateWorking(WorkingRecord record, IDbTransaction transaction) { throw new NotImplementedException(); }
/// <summary> /// Delete working tests. /// </summary> protected void DeleteWorking() { if (this.Repository != null) { IJob job = new TestJob() { Id = Guid.NewGuid() }; WorkerRecord workerRecord = new WorkerRecord() { ApplicationName = BlueCollarSection.Section.ApplicationName, MachineAddress = Machine.Address, MachineName = Machine.Name, Name = "Test Worker", QueueNames = "*", Signal = WorkerSignal.Stop, Status = WorkerStatus.Working, Startup = WorkerStartupType.Automatic, UpdatedOn = DateTime.UtcNow }; this.Repository.CreateWorker(workerRecord, null); WorkingRecord workingRecord = new WorkingRecord() { ApplicationName = workerRecord.ApplicationName, Data = JsonConvert.SerializeObject(job), JobName = job.Name, JobType = job.GetType().FullName + ", " + job.GetType().Assembly.GetName().Name, QueueName = "*", QueuedOn = DateTime.UtcNow, Signal = WorkingSignal.Cancel, StartedOn = DateTime.UtcNow, TryNumber = 1, WorkerId = workerRecord.Id.Value }; this.Repository.CreateWorking(workingRecord, null); this.Repository.DeleteWorking(workingRecord.Id.Value, null); } }
/// <summary> /// Delete all tests. /// </summary> protected void DeleteAll() { if (this.Repository != null) { IJob job = new TestJob() { Id = Guid.NewGuid() }; WorkerRecord workerRecord = new WorkerRecord() { ApplicationName = BlueCollarSection.Section.ApplicationName, MachineAddress = Machine.Address, MachineName = Machine.Name, Name = "Test Worker", QueueNames = "*", Signal = WorkerSignal.Stop, Status = WorkerStatus.Working, Startup = WorkerStartupType.Automatic, UpdatedOn = DateTime.UtcNow }; this.Repository.CreateWorker(workerRecord, null); QueueRecord queueRecord = new QueueRecord() { ApplicationName = workerRecord.ApplicationName, Data = JsonConvert.SerializeObject(job), JobName = job.Name, JobType = job.GetType().FullName + ", " + job.GetType().Assembly.GetName().Name, QueuedOn = DateTime.UtcNow, QueueName = "*", TryNumber = 1 }; this.Repository.CreateQueued(queueRecord, null); ScheduleRecord scheduleRecord = new ScheduleRecord() { ApplicationName = workerRecord.ApplicationName, Name = "Test", RepeatType = ScheduleRepeatType.Days, RepeatValue = 1, StartOn = DateTime.UtcNow }; this.Repository.CreateSchedule(scheduleRecord, null); ScheduledJobRecord scheduledJobRecord = new ScheduledJobRecord() { JobType = JobSerializer.GetTypeName(job.GetType()), ScheduleId = scheduleRecord.Id.Value }; this.Repository.CreateScheduledJob(scheduledJobRecord, null); WorkingRecord workingRecord = new WorkingRecord() { ApplicationName = workerRecord.ApplicationName, Data = JobSerializer.Serialize(job), JobName = job.Name, JobType = JobSerializer.GetTypeName(job.GetType()), QueuedOn = DateTime.UtcNow, QueueName = null, ScheduleId = scheduleRecord.Id, StartedOn = DateTime.UtcNow, TryNumber = 1, WorkerId = workerRecord.Id.Value }; this.Repository.CreateWorking(workingRecord, null); HistoryRecord historyRecord = new HistoryRecord() { ApplicationName = workerRecord.ApplicationName, Data = JobSerializer.Serialize(job), FinishedOn = DateTime.UtcNow, JobName = job.Name, JobType = JobSerializer.GetTypeName(job.GetType()), QueuedOn = DateTime.UtcNow, ScheduleId = scheduleRecord.Id, StartedOn = DateTime.UtcNow, Status = HistoryStatus.Succeeded, TryNumber = 1, WorkerId = workerRecord.Id.Value }; this.Repository.CreateHistory(historyRecord, null); this.Repository.DeleteAll(BlueCollarSection.Section.ApplicationName, null); Assert.AreEqual(0, this.Repository.GetHistoryList(workerRecord.ApplicationName, null, 100, 0, null).TotalCount); Assert.AreEqual(0, this.Repository.GetWorkingList(workerRecord.ApplicationName, null, 100, 0, null).TotalCount); Assert.AreEqual(0, this.Repository.GetWorkerList(workerRecord.ApplicationName, null, 100, 0, null).TotalCount); Assert.AreEqual(0, this.Repository.GetQueuedList(workerRecord.ApplicationName, null, 100, 0, null).TotalCount); Assert.AreEqual(0, this.Repository.GetScheduledJobList(workerRecord.ApplicationName, scheduleRecord.Id.Value, null, 0, 100, null).TotalCount); Assert.AreEqual(0, this.Repository.GetScheduleList(workerRecord.ApplicationName, null, 100, 0, null).TotalCount); } }
/// <summary> /// Update working tests. /// </summary> protected void UpdateWorking() { if (this.Repository != null) { IJob job = new TestJob() { Id = Guid.NewGuid() }; WorkerRecord workerRecord = new WorkerRecord() { ApplicationName = BlueCollarSection.Section.ApplicationName, MachineAddress = Machine.Address, MachineName = Machine.Name, Name = "Test Worker", QueueNames = "*", Signal = WorkerSignal.Stop, Status = WorkerStatus.Working, Startup = WorkerStartupType.Automatic, UpdatedOn = DateTime.UtcNow }; this.Repository.CreateWorker(workerRecord, null); WorkingRecord workingRecord = new WorkingRecord() { ApplicationName = workerRecord.ApplicationName, Data = JobSerializer.Serialize(job), JobName = job.Name, JobType = JobSerializer.GetTypeName(job), QueueName = "*", QueuedOn = DateTime.UtcNow, Signal = WorkingSignal.Cancel, StartedOn = DateTime.UtcNow, TryNumber = 1, WorkerId = workerRecord.Id.Value }; this.Repository.CreateWorking(workingRecord, null); job = new TestJob() { Id = Guid.NewGuid() }; workingRecord.Data = JobSerializer.Serialize(job); workingRecord.JobName = "Updated"; workingRecord.JobType = "Updated"; workingRecord.QueuedOn = new DateTime(2011, 1, 1, 0, 0, 0, DateTimeKind.Utc); workingRecord.QueueName = "test"; workingRecord.Signal = WorkingSignal.None; workingRecord.StartedOn = new DateTime(2011, 1, 1, 0, 0, 0, DateTimeKind.Utc); workingRecord.TryNumber = 2; this.Repository.UpdateWorking(workingRecord, null); WorkingRecord updated = this.Repository.GetWorking(workingRecord.Id.Value, null); Assert.AreEqual(workingRecord.Data, updated.Data); Assert.AreEqual(workingRecord.JobName, updated.JobName); Assert.AreEqual(workingRecord.JobType, updated.JobType); Assert.AreEqual(workingRecord.QueuedOn, updated.QueuedOn); Assert.AreEqual(workingRecord.QueueName, updated.QueueName); Assert.AreEqual(workingRecord.Signal, updated.Signal); Assert.AreEqual(workingRecord.StartedOn, updated.StartedOn); Assert.AreEqual(workingRecord.TryNumber, updated.TryNumber); } }
/// <summary> /// Get working list tests. /// </summary> protected void GetWorkingList() { if (this.Repository != null) { IJob job = new TestJob() { Id = Guid.NewGuid() }; WorkerRecord workerRecord = new WorkerRecord() { ApplicationName = BlueCollarSection.Section.ApplicationName, MachineAddress = Machine.Address, MachineName = Machine.Name, Name = "Test Worker", QueueNames = "*", Signal = WorkerSignal.Stop, Status = WorkerStatus.Working, Startup = WorkerStartupType.Automatic, UpdatedOn = DateTime.UtcNow }; this.Repository.CreateWorker(workerRecord, null); WorkingRecord workingRecord = new WorkingRecord() { ApplicationName = BlueCollarSection.Section.ApplicationName, Data = JobSerializer.Serialize(job), JobName = job.Name, JobType = JobSerializer.GetTypeName(job.GetType()), QueuedOn = DateTime.UtcNow, QueueName = "*", Signal = WorkingSignal.None, StartedOn = DateTime.UtcNow, TryNumber = 1, WorkerId = workerRecord.Id.Value }; this.Repository.CreateWorking(workingRecord, null); Assert.AreEqual(1, this.Repository.GetWorkingList(BlueCollarSection.Section.ApplicationName, null, 100, 0, null).TotalCount); Assert.AreEqual(1, this.Repository.GetWorkingList(BlueCollarSection.Section.ApplicationName, "TestJob", 100, 0, null).TotalCount); Assert.AreEqual(0, this.Repository.GetWorkingList(BlueCollarSection.Section.ApplicationName, "not found search", 100, 0, null).TotalCount); WorkingRecord workingRecord2 = new WorkingRecord() { ApplicationName = BlueCollarSection.Section.ApplicationName, Data = JobSerializer.Serialize(job), JobName = job.Name, JobType = JobSerializer.GetTypeName(job.GetType()), QueuedOn = DateTime.UtcNow, QueueName = "*", Signal = WorkingSignal.None, StartedOn = DateTime.UtcNow, TryNumber = 1, WorkerId = workerRecord.Id.Value }; this.Repository.CreateWorking(workingRecord2, null); Assert.AreEqual(2, this.Repository.GetWorkingList(BlueCollarSection.Section.ApplicationName, null, 100, 0, null).TotalCount); Assert.AreEqual(1, this.Repository.GetWorkingList(BlueCollarSection.Section.ApplicationName, null, 1, 0, null).Records.Count); Assert.AreEqual(1, this.Repository.GetWorkingList(BlueCollarSection.Section.ApplicationName, null, 100, 1, null).Records.Count); } }
/// <summary> /// Get working for worker tests. /// </summary> protected void GetWorkingForWorker() { if (this.Repository != null) { IJob job = new TestJob() { Id = Guid.NewGuid() }; WorkerRecord workerRecord = new WorkerRecord() { ApplicationName = BlueCollarSection.Section.ApplicationName, MachineAddress = Machine.Address, MachineName = Machine.Name, Name = "Test Worker", QueueNames = "*", Signal = WorkerSignal.Stop, Status = WorkerStatus.Working, Startup = WorkerStartupType.Automatic, UpdatedOn = DateTime.UtcNow }; this.Repository.CreateWorker(workerRecord, null); WorkingRecord workingRecord = new WorkingRecord() { ApplicationName = BlueCollarSection.Section.ApplicationName, Data = JobSerializer.Serialize(job), JobName = job.Name, JobType = JobSerializer.GetTypeName(job.GetType()), QueuedOn = DateTime.UtcNow, QueueName = "*", Signal = WorkingSignal.None, StartedOn = DateTime.UtcNow, TryNumber = 1, WorkerId = workerRecord.Id.Value }; this.Repository.CreateWorking(workingRecord, null); WorkerRecord workerRecord2 = new WorkerRecord() { ApplicationName = BlueCollarSection.Section.ApplicationName, MachineAddress = Machine.Address, MachineName = Machine.Name, Name = "Test Worker 2", QueueNames = "*", Signal = WorkerSignal.Stop, Status = WorkerStatus.Working, Startup = WorkerStartupType.Automatic, UpdatedOn = DateTime.UtcNow }; this.Repository.CreateWorker(workerRecord2, null); WorkingRecord workingRecord2 = new WorkingRecord() { ApplicationName = BlueCollarSection.Section.ApplicationName, Data = JobSerializer.Serialize(job), JobName = job.Name, JobType = JobSerializer.GetTypeName(job.GetType()), QueuedOn = DateTime.UtcNow, QueueName = "*", Signal = WorkingSignal.None, StartedOn = DateTime.UtcNow, TryNumber = 1, WorkerId = workerRecord2.Id.Value }; this.Repository.CreateWorking(workingRecord2, null); WorkingRecord workingRecord3 = new WorkingRecord() { ApplicationName = BlueCollarSection.Section.ApplicationName, Data = JobSerializer.Serialize(job), JobName = job.Name, JobType = JobSerializer.GetTypeName(job.GetType()), QueuedOn = DateTime.UtcNow, QueueName = "*", Signal = WorkingSignal.None, StartedOn = DateTime.UtcNow, TryNumber = 1, WorkerId = workerRecord2.Id.Value }; this.Repository.CreateWorking(workingRecord3, null); var working = this.Repository.GetWorkingForWorker(workerRecord.Id.Value, null, null); Assert.AreEqual(1, working.Count()); Assert.AreEqual(workingRecord.Id, working.ElementAt(0).Id); working = this.Repository.GetWorkingForWorker(workerRecord2.Id.Value, null, null); Assert.AreEqual(2, working.Count()); Assert.AreEqual(workingRecord2.Id, working.ElementAt(0).Id); Assert.AreEqual(workingRecord3.Id, working.ElementAt(1).Id); working = this.Repository.GetWorkingForWorker(workerRecord2.Id.Value, workingRecord2.Id, null); Assert.AreEqual(1, working.Count()); Assert.AreEqual(workingRecord3.Id, working.ElementAt(0).Id); } }
/// <summary> /// Get working details tests. /// </summary> protected void GetWorkingDetails() { if (this.Repository != null) { IJob job = new TestJob() { Id = Guid.NewGuid() }; WorkerRecord workerRecord = new WorkerRecord() { ApplicationName = BlueCollarSection.Section.ApplicationName, MachineAddress = Machine.Address, MachineName = Machine.Name, Name = "Test Worker", QueueNames = "*", Signal = WorkerSignal.Stop, Status = WorkerStatus.Working, Startup = WorkerStartupType.Automatic, UpdatedOn = DateTime.UtcNow }; this.Repository.CreateWorker(workerRecord, null); WorkingRecord workingRecord = new WorkingRecord() { ApplicationName = BlueCollarSection.Section.ApplicationName, Data = JobSerializer.Serialize(job), JobName = job.Name, JobType = JobSerializer.GetTypeName(job.GetType()), QueuedOn = DateTime.UtcNow, QueueName = "*", Signal = WorkingSignal.None, StartedOn = DateTime.UtcNow, TryNumber = 1, WorkerId = workerRecord.Id.Value }; this.Repository.CreateWorking(workingRecord, null); WorkingDetailsRecord workingDetailsRecord = this.Repository.GetWorkingDetails(workingRecord.Id.Value, null); Assert.IsNotNull(workingDetailsRecord); Assert.IsFalse(string.IsNullOrEmpty(workingDetailsRecord.Data)); } }