forked from SciSharp/BotSharp
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathIdleConversationCleanupCrontabHook.cs
More file actions
53 lines (46 loc) · 1.93 KB
/
Copy pathIdleConversationCleanupCrontabHook.cs
File metadata and controls
53 lines (46 loc) · 1.93 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
using BotSharp.Abstraction.Conversations;
using BotSharp.Abstraction.Conversations.Settings;
using BotSharp.Abstraction.Crontab;
using BotSharp.Abstraction.Crontab.Models;
using BotSharp.OpenAPI.RuleTriggers;
using Microsoft.Extensions.Logging;
namespace BotSharp.OpenAPI.Hooks
{
public class IdleConversationCleanupCrontabHook : ICrontabHook
{
private readonly ConversationSetting _settings;
private readonly IConversationService _conversationService;
private readonly ILogger<IdleConversationCleanupCrontabHook> _logger;
public string[]? Triggers => new[] { nameof(IdleConversationCleanupRuleTrigger) };
public IdleConversationCleanupCrontabHook(
ConversationSetting settings,
IConversationService conversationService,
ILogger<IdleConversationCleanupCrontabHook> logger)
{
_settings = settings;
_conversationService = conversationService;
_logger = logger;
}
public async Task OnCronTriggered(CrontabItem item)
{
var cleanSetting = _settings.CleanSetting;
if (cleanSetting == null || !cleanSetting.Enable) return;
try
{
var batchSize = cleanSetting.BatchSize;
var limit = cleanSetting.MessageLimit;
var bufferHours = cleanSetting.BufferHours;
var excludeAgentIds = cleanSetting.ExcludeAgentIds ?? new List<string>();
var conversationIds = await _conversationService.GetIdleConversations(batchSize, limit, bufferHours, excludeAgentIds);
if (!conversationIds.IsNullOrEmpty())
{
await _conversationService.DeleteConversations(conversationIds);
}
}
catch (Exception ex)
{
_logger.LogError(ex, "Error occurred closing conversations.");
}
}
}
}