/// <summary> /// Create job information from the job /// </summary> public JobInfo(IJobState job, IEnumerable <IJobSchedule> schedule) { if (job is IAmiIdentified ident) { this.Key = ident.Key; this.Tag = ident.Tag; this.ModifiedOn = ident.ModifiedOn; } else { this.Key = job.Job.Id.ToString(); this.Tag = job.GetType().Assembly.GetName().Version.ToString(); this.ModifiedOn = ApplicationServiceContext.Current.StartTime; } this.Name = job.Job.Name; this.CanCancel = job.Job.CanCancel; this.State = job.CurrentState; this.Description = job.Job.Description; this.Parameters = job.Job.Parameters?.Select(o => new JobParameter() { Key = o.Key, Type = o.Value.Name }).ToList(); this.LastStart = job.LastStartTime; this.LastFinish = job.LastStopTime; this.JobType = job.GetType().AssemblyQualifiedName; this.Schedule = schedule?.Select(o => new JobScheduleInfo(o)).ToList(); this.Progress = job.Progress; this.StatusText = job.StatusText; }
public DateTime? NextExecution(IJobState state, ISchedulerContext context) { if (state.Status != JobStatus.Pending) { return null; // Have no clue } return context.GetCurrentTime().Date.Add(_dayTime); }
protected internal virtual void InitHistoricJobLogEvent(HistoricJobLogEventEntity evt, IJob job, HistoryEventTypes eventType) { evt.TimeStamp = ClockUtil.CurrentTime; JobEntity jobEntity = (JobEntity)job; evt.JobId = jobEntity.Id; evt.JobDueDate = jobEntity.Duedate; evt.JobRetries = jobEntity.Retries; evt.JobPriority = jobEntity.Priority; IJobDefinition jobDefinition = jobEntity.JobDefinition; if (jobDefinition != null) { evt.JobDefinitionId = jobDefinition.Id; evt.JobDefinitionType = jobDefinition.JobType; evt.JobDefinitionConfiguration = jobDefinition.JobConfiguration; } else { // in case of async signal there does not exist a job definition // but we use the jobHandlerType as jobDefinitionType evt.JobDefinitionType = jobEntity.JobHandlerType; } evt.ActivityId = jobEntity.ActivityId; evt.ExecutionId = jobEntity.ExecutionId; evt.ProcessInstanceId = jobEntity.ProcessInstanceId; evt.ProcessDefinitionId = jobEntity.ProcessDefinitionId; evt.ProcessDefinitionKey = jobEntity.ProcessDefinitionKey; evt.DeploymentId = jobEntity.DeploymentId; evt.TenantId = jobEntity.TenantId; // initialize sequence counter InitSequenceCounter(jobEntity, evt); IJobState state = null; if (HistoryEventTypes.JobCreate.Equals(eventType)) { state = JobStateFields.Created; } else if (HistoryEventTypes.JobFail.Equals(eventType)) { state = JobStateFields.Failed; } else if (HistoryEventTypes.JobSuccess.Equals(eventType)) { state = JobStateFields.Successful; } else if (HistoryEventTypes.JobDelete.Equals(eventType)) { state = JobStateFields.Deleted; } evt.State = state.StateCode; }
public static void AddOrUpdateJobState(IJobState jobState, string jobName) { var job = GetJobByName(jobName); if (job != null) { StateBag[jobName.ToLowerInvariant().Trim()] = jobState; } else { StateBag.Add(jobName.ToLowerInvariant().Trim(), jobState); } }
public DateTime?NextExecution(IJobState state, ISchedulerContext context) { if (state.Status != JobStatus.Pending) { return(null); // Have no clue } if (state.LastComplete != null) { return(state.LastComplete.Value.Date.AddDays(1).Add(_dayTime)); } return(context.GetCurrentTime().Date.Add(_dayTime)); }
public DateTime? NextExecution(IJobState state, ISchedulerContext context) { if (state.Status != JobStatus.Pending) { return null; // Have no clue } if (state.LastComplete != null) { return state.LastComplete.Value.Date.AddDays(1).Add(_dayTime); } return context.GetCurrentTime().Date.Add(_dayTime); }
public TUIRoutine(ILogger <TUIRoutine> log, IConfiguration config, IDataSetNameValidator dataSetNameValidator, IConfigurationState configurationState, IDirectoryValidator directoryValidator, IFileValidator fileValidator, IRuleChecker ruleChecker, /*IFileLineCounter fileLineCounter,*/ IJobState jobState, ILineProducerConsumerOrechestrator lineProducerConsumerOrechestrator, /*IOutputDatasetFactory outputDatasetFactory,*/ IInputDatasetFactory inputDatasetFactory) { _log = log; _config = config; _dataSetNameValidator = dataSetNameValidator; _configurationState = configurationState; _directoryValidator = directoryValidator; _fileValidator = fileValidator; _ruleChecker = ruleChecker; //_fileLineCounter = fileLineCounter; _jobState = jobState; _lineProducerConsumerOrechestrator = lineProducerConsumerOrechestrator; //_outputDatasetFactory = outputDatasetFactory; _inputDatasetFactory = inputDatasetFactory; }
public DateTime?NextExecution(IJobState state, ISchedulerContext context) { if (state.Status != JobStatus.Pending) { return(null); // Have no clue } if (state.LastComplete != null) { return(state.LastComplete + _interval); } else { var shift = context.GetNextRandom(200, (int)_interval.TotalMilliseconds / 3); return(state.Created.AddMilliseconds(shift)); } }
public LineProducerConsumerOrechestrator(IJobState jobState) { _jobState = jobState; }
/// <summary> /// Determine if the <see cref="IJobState"/> is running /// </summary> /// <param name="me">The job state structure</param> /// <returns>True if the status of the job state implies the job is running</returns> public static bool IsRunning(this IJobState me) => me.CurrentState == JobStateType.Running || me.CurrentState == JobStateType.Starting;