Skip to content

Commit 21d26fa

Browse files
author
aden.chen
committed
refactor
1 parent 2f3cbbe commit 21d26fa

3 files changed

Lines changed: 23 additions & 9 deletions

File tree

src/Infrastructure/BotSharp.Core.Crontab/Services/CrontabItemExtension.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@ public static bool CheckNextOccurrenceEveryOneMinute(this CrontabItem item)
1414
});
1515

1616
var currentTime = DateTime.UtcNow;
17+
var currentMinute = new DateTime(currentTime.Year, currentTime.Month, currentTime.Day,
18+
currentTime.Hour, currentTime.Minute, 0, DateTimeKind.Utc);
1719

18-
// Check if there has been an execution point within the past minute.
19-
var oneMinuteAgo = currentTime.AddMinutes(-1);
20-
var nextOccurrenceFromPast = schedule.GetNextOccurrence(oneMinuteAgo);
20+
var oneMinuteAgo = currentMinute.AddMinutes(-1);
21+
var nextOccurrence = schedule.GetNextOccurrence(oneMinuteAgo);
2122

22-
// If the next execution point falls within the past minute up to the present, then it matches.
23-
return nextOccurrenceFromPast > oneMinuteAgo && nextOccurrenceFromPast <= currentTime;
23+
return nextOccurrence == currentMinute;
2424
}
2525
}
2626
}

src/Infrastructure/BotSharp.Core.Crontab/Services/CrontabWatcher.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,11 @@ private async Task RunCronChecker(IServiceProvider services)
5858
{
5959
var cron = services.GetRequiredService<ICrontabService>();
6060
var crons = await cron.GetCrontable();
61+
var allowedCrons = crons.Where(cron => cron.TriggerByWatcher).ToList();
6162
var settings = services.GetRequiredService<CrontabSettings>();
6263
var publisher = services.GetService<IEventPublisher>();
6364

64-
foreach (var item in crons)
65+
foreach (var item in allowedCrons)
6566
{
6667
_logger.LogDebug($"[{DateTime.UtcNow}] Cron task ({item.Title}, {item.Cron}), Last Execution Time: {item.LastExecutionTime}");
6768

src/Infrastructure/BotSharp.OpenAPI/Controllers/Crontab/CrontabController.cs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,27 @@ public CrontabController(
2222
[HttpPost("/crontab/{name}")]
2323
public async Task<bool> RunCrontab(string name)
2424
{
25-
var found = await GetCrontabItems(name);
26-
if (found.IsNullOrEmpty())
25+
var cron = _services.GetRequiredService<ICrontabService>();
26+
var crons = await cron.GetCrontable();
27+
var found = crons.FirstOrDefault(x => x.Title.IsEqualTo(name));
28+
if (found == null)
2729
{
2830
_logger.LogWarning($"Cannnot find crontab {name}");
2931
return false;
3032
}
3133

32-
return await ExecuteTimeArrivedItem(found.First());
34+
try
35+
{
36+
_logger.LogWarning($"Start running crontab {name}");
37+
await cron.ScheduledTimeArrived(found);
38+
_logger.LogWarning($"Complete running crontab {name}");
39+
return true;
40+
}
41+
catch (Exception ex)
42+
{
43+
_logger.LogError(ex, $"Error when running crontab {name}");
44+
return false;
45+
}
3346
}
3447

3548
/// <summary>

0 commit comments

Comments
 (0)