Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions samples/Hangfire.Microservices.OrdersService/Startup.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using System;
using Hangfire.Microservices.NewsletterService;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
Expand All @@ -20,13 +21,16 @@ public void ConfigureServices(IServiceCollection services)

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IRecurringJobManager manager)
{
var campaignId = 1111;

manager.AddOrUpdateDynamic(
"periodic-newsletter",
() => NewsletterSender.Execute(1111),
() => NewsletterSender.Execute(campaignId),
"* * * * *",
new DynamicRecurringJobOptions
{
Filters = new [] { new QueueAttribute("newsletter") }
Filters = new [] { new QueueAttribute("newsletter") },
DisplayName = $"Process newsletter '{campaignId}'"
});

if (env.IsDevelopment())
Expand Down
8 changes: 7 additions & 1 deletion src/Hangfire.DynamicJobs/DynamicJob.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,15 @@ public DynamicJob(
[NotNull] string method,
[CanBeNull] string parameterTypes,
[CanBeNull] string args,
[CanBeNull] JobFilterAttribute[] filters)
[CanBeNull] JobFilterAttribute[] filters,
[CanBeNull] string displayName)
{
Type = type ?? throw new ArgumentNullException(nameof(type));
Method = method ?? throw new ArgumentNullException(nameof(method));
ParameterTypes = parameterTypes;
Args = args;
Filters = filters;
DisplayName = displayName;
}

[NotNull]
Expand All @@ -49,6 +51,10 @@ public DynamicJob(
[SuppressMessage("Security", "CA2326:Do not use TypeNameHandling values other than None")]
public JobFilterAttribute[] Filters { get; }

[CanBeNull]
[JsonProperty("d", NullValueHandling = NullValueHandling.Ignore)]
public string DisplayName { get; }

[PublicAPI]
[DynamicJobDisplayName]
public static object Execute(DynamicJob dynamicJob, PerformContext context)
Expand Down
5 changes: 5 additions & 0 deletions src/Hangfire.DynamicJobs/DynamicJobDisplayNameAttribute.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,11 @@ public override string Format([NotNull] DashboardContext context, [NotNull] Job
{
if (arg is DynamicJob dynamicJob)
{
if (dynamicJob.DisplayName != null)
{
return dynamicJob.DisplayName;
}

return $"Dynamic: {ExtractTypeName(dynamicJob.Type, out _, out _)}.{dynamicJob.Method}";
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public static void AddOrUpdateDynamic(

manager.AddOrUpdate(
recurringJobId,
ToDynamicJob(job, options?.Filters),
ToDynamicJob(job, options?.Filters, options?.DisplayName),
cronExpression,
options ?? new RecurringJobOptions());
}
Expand Down Expand Up @@ -133,7 +133,7 @@ public static void AddOrUpdateDynamic<T>(
AddOrUpdateDynamic(manager, recurringJobId, job, cronExpression, options);
}

private static Job ToDynamicJob([NotNull] Job job, [CanBeNull] IEnumerable<JobFilterAttribute> filters)
private static Job ToDynamicJob([NotNull] Job job, [CanBeNull] IEnumerable<JobFilterAttribute> filters, [CanBeNull] string displayName)
{
if (job == null) throw new ArgumentNullException(nameof(job));

Expand All @@ -142,7 +142,8 @@ private static Job ToDynamicJob([NotNull] Job job, [CanBeNull] IEnumerable<JobFi
invocationData.Method,
!String.IsNullOrEmpty(invocationData.ParameterTypes) ? invocationData.ParameterTypes : null,
invocationData.Arguments,
filters?.ToArray());
filters?.ToArray(),
!String.IsNullOrEmpty(displayName) ? displayName : null);

return Job.FromExpression(() => DynamicJob.Execute(dynamicJob, default));
}
Expand Down
3 changes: 3 additions & 0 deletions src/Hangfire.DynamicJobs/DynamicRecurringJobOptions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,8 @@ public class DynamicRecurringJobOptions : RecurringJobOptions
{
[CanBeNull]
public IEnumerable<JobFilterAttribute> Filters { get; set; }

[CanBeNull]
public string DisplayName { get; set; }
}
}