Как я могу получить время окончания работы на Hangfire? - PullRequest
0 голосов
/ 30 сентября 2019

Учитывая идентификатор задания Hangfire, как я могу получить время, когда задание закончилось?

Я пробовал следующее, но класс JobData не имеет свойства для завершения заданиявремя.

IStorageConnection connection = JobStorage.Current.GetConnection();
JobData jobData = connection.GetJobData(jobId);

Ответы [ 2 ]

1 голос
/ 01 октября 2019

У меня было подобное требование раньше. Вот метод, который я написал, чтобы получить свойство SucceededAt, используя имя запущенного метода и текущий PerformContext:

public static DateTime? GetCompareDate(PerformContext context, string methodName)
{
    return long.TryParse(context.BackgroundJob.Id, out var currentJobId)
        ? JobStorage.Current
            ?.GetMonitoringApi()
            ?.SucceededJobs(0, (int)currentJobId)
            ?.LastOrDefault(x => x.Value?.Job?.Method?.Name == methodName).Value?.SucceededAt
        : null;
}

Вы можете также легко получить DeletedJobs, EnqueuedJobs,FailedJobs и т. Д.

Вы можете вызвать его из метода задания следующим образом:

public async Task SomeJob(PerformContext context, CancellationToken token)
{
    ⋮
    var compareDate = GetCompareDate(context, nameof(SomeJob));
    ⋮
}

Вам просто нужно добавить PerformContext при добавлении задания, передав null:

RecurringJobManager.AddOrUpdate(
        recurringJobId: "1",
        job: Job.FromExpression(() => SomeJob(null, CancellationToken.None)),
        cronExpression: Cron.Hourly(15),
        options: new RecurringJobOptions
        {
            TimeZone = TimeZoneInfo.Local
        });

Примечание. Это будет работать только в том случае, если срок выполнения успешного задания еще не истек. Успешные задания истекают через один день - если вам нужно сохранить их дольше (чтобы получить свойство SucceededAt), вот пример для этого: Как настроить время хранения задания?

0 голосов
/ 30 сентября 2019

Вы можете попытаться использовать класс Секундомер при первом вызове задачи и остановке ее по завершении задачи.

Затем вы можете использовать слепок журнала для создания файла журнала txt, содержащего время начала и время окончания вашей работы. Или напрямую сохраните эти значения в своей базе данных, чтобы вы могли просмотреть их позже.

...