public VcsPluginTelemetryCreator([NotNull] ITelemetryQueue telemetryQueue) { if (telemetryQueue == null) { throw new ArgumentNullException(nameof(telemetryQueue)); } _telemetryQueue = telemetryQueue; }
/// <summary> /// Called by the <see cref="T:Quartz.IScheduler"/> when a <see cref="T:Quartz.ITrigger"/> /// fires that is associated with the <see cref="T:Quartz.IJob"/>. /// </summary> /// <remarks> /// The implementation may wish to set a result object on the /// JobExecutionContext before this method exits. The result itself /// is meaningless to Quartz, but may be informative to /// <see cref="T:Quartz.IJobListener"/>s or /// <see cref="T:Quartz.ITriggerListener"/>s that are watching the job's /// execution. /// </remarks> /// <param name="context">The execution context.</param> public virtual void Execute(IJobExecutionContext context) { JobExecutionContext = context; var log = Container.Resolve <ILog>(); var unitOfWork = Container.Resolve <IUnitOfWork>(); var timeService = Container.Resolve <ITimeService>(); ITelemetryQueue telemetryQueue = null; if (TelemetryRequired) { telemetryQueue = Container.Resolve <ITelemetryQueue>(); telemetryQueue.AutoCommit = false; } var totalEntitiesProcessed = 0; var iterationEntitiesProcessed = 0; var startTime = timeService.GetUtc(); do { log.Trace($"Scheduler job started. Job name='{GetType().FullName}'"); try { using (var transaction = unitOfWork.BeginTransaction()) { iterationEntitiesProcessed = Process(); unitOfWork.Commit(); transaction.Commit(); } totalEntitiesProcessed += iterationEntitiesProcessed; log.Trace( $"Scheduler job iteration done. Job name='{GetType().FullName}', Entities processed='{iterationEntitiesProcessed}'"); OnIterationDone(iterationEntitiesProcessed); } catch (Exception ex) { unitOfWork.Reset(); log.Error($"Scheduler job failed. Job name='{GetType().FullName}'", ex); OnFailed(ex); } if (TelemetryRequired) { telemetryQueue?.Commit(); } }while(iterationEntitiesProcessed > 0); var finishTime = timeService.GetUtc(); var executionTime = finishTime - startTime; log.Debug( $"Scheduler job execution finished. Job name='{GetType().FullName}', Entities processed='{totalEntitiesProcessed}', Execution time='{executionTime}'"); }
public void Init(ITelemetryRequester telemetryRequester) { telemetryQueue = new SafeTelemetryQueue(telemetryRequester); lastTimestamp = Double.NegativeInfinity; initialized = true; }