@@ -15,9 +15,12 @@ public interface IJobManager
15
15
{
16
16
void AddOrUpdate < TJob > ( Action < ScheduledJobOptionsBuilder > configure = null ) where TJob : class , IJob ;
17
17
void AddOrUpdate ( string jobName , Action < ScheduledJobOptionsBuilder > configure = null ) ;
18
+ void Update < TJob > ( Action < ScheduledJobOptionsBuilder > configure = null ) ;
19
+ void Update ( string jobName , Action < ScheduledJobOptionsBuilder > configure = null ) ;
18
20
void Remove < TJob > ( ) where TJob : class , IJob ;
19
21
void Remove ( string jobName ) ;
20
22
JobStatus [ ] GetJobStatus ( ) ;
23
+ JobStatus GetJobStatus ( string jobName ) ;
21
24
Task RunJobAsync < TJob > ( CancellationToken cancellationToken = default ) where TJob : class , IJob ;
22
25
Task RunJobAsync ( string jobName , CancellationToken cancellationToken = default ) ;
23
26
}
@@ -49,7 +52,7 @@ public void AddOrUpdate<TJob>(Action<ScheduledJobOptionsBuilder> configure = nul
49
52
string jobName = JobOptions . GetDefaultJobName ( typeof ( TJob ) ) ;
50
53
lock ( _lock )
51
54
{
52
- var job = Jobs . FirstOrDefault ( j => j . Options . Name == jobName ) ;
55
+ var job = Jobs . FirstOrDefault ( j => j . Options . Name . Equals ( jobName , StringComparison . OrdinalIgnoreCase ) ) ;
53
56
if ( job == null )
54
57
{
55
58
var options = new ScheduledJobOptions
@@ -74,7 +77,7 @@ public void AddOrUpdate(string jobName, Action<ScheduledJobOptionsBuilder> confi
74
77
{
75
78
lock ( _lock )
76
79
{
77
- var job = Jobs . FirstOrDefault ( j => j . Options . Name == jobName ) ;
80
+ var job = Jobs . FirstOrDefault ( j => j . Options . Name . Equals ( jobName , StringComparison . OrdinalIgnoreCase ) ) ;
78
81
if ( job == null )
79
82
{
80
83
var options = new ScheduledJobOptions
@@ -94,12 +97,39 @@ public void AddOrUpdate(string jobName, Action<ScheduledJobOptionsBuilder> confi
94
97
}
95
98
}
96
99
100
+ public void Update < TJob > ( Action < ScheduledJobOptionsBuilder > configure = null )
101
+ {
102
+ string jobName = JobOptions . GetDefaultJobName ( typeof ( TJob ) ) ;
103
+ lock ( _lock )
104
+ {
105
+ var job = Jobs . FirstOrDefault ( j => j . Options . Name . Equals ( jobName , StringComparison . OrdinalIgnoreCase ) ) ;
106
+ if ( job == null )
107
+ throw new ArgumentException ( "Job not found." , nameof ( jobName ) ) ;
108
+
109
+ var builder = new ScheduledJobOptionsBuilder ( job . Options ) ;
110
+ configure ? . Invoke ( builder ) ;
111
+ }
112
+ }
113
+
114
+ public void Update ( string jobName , Action < ScheduledJobOptionsBuilder > configure = null )
115
+ {
116
+ lock ( _lock )
117
+ {
118
+ var job = Jobs . FirstOrDefault ( j => j . Options . Name . Equals ( jobName , StringComparison . OrdinalIgnoreCase ) ) ;
119
+ if ( job == null )
120
+ throw new ArgumentException ( "Job not found." , nameof ( jobName ) ) ;
121
+
122
+ var builder = new ScheduledJobOptionsBuilder ( job . Options ) ;
123
+ configure ? . Invoke ( builder ) ;
124
+ }
125
+ }
126
+
97
127
public void Remove < TJob > ( ) where TJob : class , IJob
98
128
{
99
129
string jobName = JobOptions . GetDefaultJobName ( typeof ( TJob ) ) ;
100
130
lock ( _lock )
101
131
{
102
- var job = Jobs . FirstOrDefault ( j => j . Options . Name == jobName ) ;
132
+ var job = Jobs . FirstOrDefault ( j => j . Options . Name . Equals ( jobName , StringComparison . OrdinalIgnoreCase ) ) ;
103
133
if ( job == null )
104
134
return ;
105
135
@@ -112,7 +142,7 @@ public void Remove(string jobName)
112
142
{
113
143
lock ( _lock )
114
144
{
115
- var job = _jobs . FirstOrDefault ( j => j . Options . Name == jobName ) ;
145
+ var job = _jobs . FirstOrDefault ( j => j . Options . Name . Equals ( jobName , StringComparison . OrdinalIgnoreCase ) ) ;
116
146
if ( job == null )
117
147
return ;
118
148
@@ -129,13 +159,17 @@ public JobStatus[] GetJobStatus()
129
159
Schedule = j . Options . CronSchedule ,
130
160
LastRun = j . LastRun ,
131
161
LastSuccess = j . LastSuccess ,
162
+ LastDuration = j . LastDuration ,
132
163
LastErrorMessage = j . LastErrorMessage ,
133
164
NextRun = j . NextRun ,
134
165
IsRunning = j . IsRunning ,
135
166
IsEnabled = j . Options . IsEnabled
136
167
} ) . ToArray ( ) ;
137
168
}
138
169
170
+ public JobStatus GetJobStatus ( string jobName ) => GetJobStatus ( ) . FirstOrDefault ( j => j . Name . Equals ( jobName , StringComparison . OrdinalIgnoreCase ) )
171
+ ?? throw new ArgumentException ( "Job not found." , nameof ( jobName ) ) ;
172
+
139
173
public async Task RunJobAsync < TJob > ( CancellationToken cancellationToken = default ) where TJob : class , IJob
140
174
{
141
175
string jobName = JobOptions . GetDefaultJobName ( typeof ( TJob ) ) ;
@@ -144,7 +178,7 @@ public async Task RunJobAsync<TJob>(CancellationToken cancellationToken = defaul
144
178
145
179
public async Task RunJobAsync ( string jobName , CancellationToken cancellationToken = default )
146
180
{
147
- var job = Jobs . FirstOrDefault ( j => j . Options . Name == jobName ) ;
181
+ var job = Jobs . FirstOrDefault ( j => j . Options . Name . Equals ( jobName , StringComparison . OrdinalIgnoreCase ) ) ;
148
182
if ( job == null )
149
183
throw new ArgumentException ( "Job not found." , nameof ( jobName ) ) ;
150
184
@@ -161,6 +195,7 @@ public class JobStatus
161
195
public string Schedule { get ; set ; }
162
196
public DateTime ? LastRun { get ; set ; }
163
197
public DateTime ? LastSuccess { get ; set ; }
198
+ public TimeSpan ? LastDuration { get ; set ; }
164
199
public string LastErrorMessage { get ; set ; }
165
200
public DateTime ? NextRun { get ; set ; }
166
201
public bool IsRunning { get ; set ; }
0 commit comments