Skip to content

Commit 0abd1c8

Browse files
author
aden.chen
committed
Refactor crontab trigger mechanism to use enum type
1 parent 541fece commit 0abd1c8

3 files changed

Lines changed: 16 additions & 12 deletions

File tree

src/Infrastructure/BotSharp.Abstraction/Crontab/Models/CrontabItem.cs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,17 @@ public class CrontabItem : ScheduleTaskArgs
2929
[JsonPropertyName("created_time")]
3030
public DateTime CreatedTime { get; set; } = DateTime.UtcNow;
3131

32-
[JsonPropertyName("trigger_by_watcher")]
33-
public bool TriggerByWatcher { get; set; } = true;
34-
35-
[JsonPropertyName("trigger_by_openapi")]
36-
public bool TriggerByOpenAPI { get; set; }
32+
[JsonPropertyName("trigger_type")]
33+
public CronTabItemTriggerType TriggerType { get; set; } = CronTabItemTriggerType.BackgroundWatcher;
3734

3835
public override string ToString()
3936
{
4037
return $"{Title}: {Description} [AgentId: {AgentId}, UserId: {UserId}]";
4138
}
4239
}
40+
41+
public enum CronTabItemTriggerType
42+
{
43+
BackgroundWatcher,
44+
OpenAPI
45+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ 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();
61+
var allowedCrons = crons.Where(cron => cron.TriggerType == CronTabItemTriggerType.BackgroundWatcher).ToList();
6262
var settings = services.GetRequiredService<CrontabSettings>();
6363
var publisher = services.GetService<IEventPublisher>();
6464

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

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,19 +61,20 @@ public async Task<CrontabSchedulingResult> SchedulingCrontab()
6161
if (item.CheckNextOccurrenceEveryOneMinute())
6262
{
6363
_logger.LogInformation("Crontab: {0}, One occurrence was matched, Beginning execution...", item.Title);
64-
Task.Run(() => ExecuteTimeArrivedItem(item));
64+
Task.Run(() => ExecuteTimeArrivedItem(item, _services));
6565
result.OccurrenceMatchedItems.Add(item.Title);
6666
}
6767
}
6868

69+
await Task.Delay(1000);
6970
return result;
7071
}
7172

7273
private async Task<List<CrontabItem>> GetCrontabItems(string? title = null)
7374
{
7475
var crontabService = _services.GetRequiredService<ICrontabService>();
7576
var crons = await crontabService.GetCrontable();
76-
var allowedCrons = crons.Where(cron => cron.TriggerByOpenAPI).ToList();
77+
var allowedCrons = crons.Where(cron => cron.TriggerType == CronTabItemTriggerType.OpenAPI).ToList();
7778

7879
if (title is null)
7980
{
@@ -83,15 +84,15 @@ private async Task<List<CrontabItem>> GetCrontabItems(string? title = null)
8384
return allowedCrons.Where(cron => cron.Title.IsEqualTo(title)).ToList();
8485
}
8586

86-
private async Task<bool> ExecuteTimeArrivedItem(CrontabItem item)
87+
private async Task<bool> ExecuteTimeArrivedItem(CrontabItem item, IServiceProvider services)
8788
{
8889
try
8990
{
90-
using var scope = _services.CreateScope();
91+
using var scope = services.CreateScope();
9192
var crontabService = scope.ServiceProvider.GetRequiredService<ICrontabService>();
92-
_logger.LogWarning($"Start running crontab {item.Title}");
93+
_logger.LogInformation($"Start running crontab {item.Title}");
9394
await crontabService.ScheduledTimeArrived(item);
94-
_logger.LogWarning($"Complete running crontab {item.Title}");
95+
_logger.LogInformation($"Complete running crontab {item.Title}");
9596
return true;
9697
}
9798
catch (Exception ex)

0 commit comments

Comments
 (0)