-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathOptions.cs
More file actions
103 lines (97 loc) · 5.23 KB
/
Copy pathOptions.cs
File metadata and controls
103 lines (97 loc) · 5.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
using System;
using Cleipnir.ResilientFunctions.CoreRuntime;
using Cleipnir.ResilientFunctions.CoreRuntime.Serialization;
using Cleipnir.ResilientFunctions.Domain;
using Cleipnir.ResilientFunctions.Domain.Exceptions;
namespace Cleipnir.Flows;
public class Options
{
public static Options Default { get; } = new();
internal Action<FrameworkException>? UnhandledExceptionHandler { get; }
internal TimeSpan? RetentionPeriod { get; }
internal TimeSpan? RetentionCleanUpFrequency { get; }
internal bool? EnableWatchdogs { get; }
internal TimeSpan? WatchdogCheckFrequency { get; }
internal TimeSpan? DelayStartup { get; }
internal int? MaxParallelRetryInvocations { get; }
internal TimeSpan? MessagesPullFrequency { get; }
internal TimeSpan? MessagesDefaultMaxWaitForCompletion { get; }
internal ISerializer? Serializer { get; }
internal UtcNow? UtcNow { get; }
internal TimeSpan? ReplicaHeartbeatFrequency { get; }
/// <summary>
/// Configuration options for Cleipnir
/// </summary>
/// <param name="unhandledExceptionHandler">Callback handler for unhandled flow exceptions</param>
/// <param name="retentionPeriod">Period to keep completed flows before deletion. Default infinite.</param>
/// <param name="retentionCleanUpFrequency">Retention clean-up check frequency. Default 1 hour when retention period is not infinite.</param>
/// <param name="enableWatchdogs">Enable background crashed, interrupted and postponed flow scheduling. Default true.</param>
/// <param name="watchdogCheckFrequency">Check frequency for eligible crashed, interrupted and postponed flows. Default 1 second.</param>
/// <param name="messagesPullFrequency">Pull frequency for active/max-waiting messages. Default: 250ms</param>
/// <param name="messagesDefaultMaxWaitForCompletion">Default wait duration before suspension for messages. Defaults to none.</param>
/// <param name="delayStartup">Delay watchdog start-up. Defaults to none.</param>
/// <param name="maxParallelRetryInvocations">Limit the number of watchdog started invocations. Default: 100.</param>
/// <param name="serializer">Specify custom serializer. Default built-in json-serializer.</param>
/// <param name="utcNow">Provide custom delegate for providing current utc datetime. Default: () => DateTime.UtcNow</param>
/// <param name="replicaHeartbeatFrequency">Heartbeat frequency for replica liveness detection. Default 1 second.</param>
public Options(
Action<FrameworkException>? unhandledExceptionHandler = null,
TimeSpan? retentionPeriod = null,
TimeSpan? retentionCleanUpFrequency = null,
bool? enableWatchdogs = null,
TimeSpan? watchdogCheckFrequency = null,
TimeSpan? messagesPullFrequency = null,
TimeSpan? messagesDefaultMaxWaitForCompletion = null,
TimeSpan? delayStartup = null,
int? maxParallelRetryInvocations = null,
ISerializer? serializer = null,
UtcNow? utcNow = null,
TimeSpan? replicaHeartbeatFrequency = null
)
{
UnhandledExceptionHandler = unhandledExceptionHandler;
WatchdogCheckFrequency = watchdogCheckFrequency;
RetentionPeriod = retentionPeriod;
RetentionCleanUpFrequency = retentionCleanUpFrequency;
EnableWatchdogs = enableWatchdogs;
MessagesPullFrequency = messagesPullFrequency;
MessagesDefaultMaxWaitForCompletion = messagesDefaultMaxWaitForCompletion;
DelayStartup = delayStartup;
MaxParallelRetryInvocations = maxParallelRetryInvocations;
Serializer = serializer;
UtcNow = utcNow;
ReplicaHeartbeatFrequency = replicaHeartbeatFrequency;
}
public Options Merge(Options options)
{
return new Options(
UnhandledExceptionHandler ?? options.UnhandledExceptionHandler,
RetentionPeriod ?? options.RetentionPeriod,
RetentionCleanUpFrequency ?? options.RetentionCleanUpFrequency,
EnableWatchdogs ?? options.EnableWatchdogs,
WatchdogCheckFrequency ?? options.WatchdogCheckFrequency,
MessagesPullFrequency ?? options.MessagesPullFrequency,
MessagesDefaultMaxWaitForCompletion ?? options.MessagesDefaultMaxWaitForCompletion,
DelayStartup ?? options.DelayStartup,
MaxParallelRetryInvocations ?? options.MaxParallelRetryInvocations,
Serializer ?? options.Serializer,
UtcNow ?? options.UtcNow,
ReplicaHeartbeatFrequency ?? options.ReplicaHeartbeatFrequency
);
}
internal Settings MapToSettings()
=> new(
unhandledExceptionHandler: UnhandledExceptionHandler,
retentionPeriod: RetentionPeriod,
retentionCleanUpFrequency: RetentionCleanUpFrequency,
enableWatchdogs: EnableWatchdogs,
watchdogCheckFrequency: WatchdogCheckFrequency,
messagesPullFrequency: MessagesPullFrequency,
messagesDefaultMaxWaitForCompletion: MessagesDefaultMaxWaitForCompletion,
delayStartup: DelayStartup,
maxParallelRetryInvocations: MaxParallelRetryInvocations,
serializer: Serializer,
utcNow: UtcNow,
replicaHeartbeatFrequency: ReplicaHeartbeatFrequency
);
}