Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,6 @@ namespace BotSharp.Abstraction.Crontab.Models;

public class CrontabItem : ScheduleTaskArgs
{
[JsonPropertyName("id")]
public string Id { get; set; }

[JsonPropertyName("user_id")]
public string UserId { get; set; } = null!;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,6 @@ public class CrontabItemFilter : Pagination
[JsonPropertyName("conversation_ids")]
public IEnumerable<string>? ConversationIds { get; set; }

[JsonPropertyName("titles")]
public IEnumerable<string>? Titles { get; set; }

public CrontabItemFilter()
{

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public class ScheduleTaskArgs
public string Description { get; set; } = null!;

[JsonPropertyName("to_do_list")]
public ScheduleTaskItemArgs[] Tasks { get; set; } = null!;
public ScheduleTaskItemArgs[] Tasks { get; set; } = [];
}

public class ScheduleTaskItemArgs
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ public interface IBotSharpRepository : IHaveServiceProvider
#endregion

#region Crontab
bool InsertCrontabItem(CrontabItem item) => throw new NotImplementedException();
bool InsertCrontabItem(CrontabItem cron) => throw new NotImplementedException();
PagedItems<CrontabItem> GetCrontabItems(CrontabItemFilter filter) => throw new NotImplementedException();
#endregion
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,30 +5,24 @@ namespace BotSharp.Core.Repository;

public partial class FileRepository
{
public bool InsertCrontabItem(CrontabItem item)
public bool InsertCrontabItem(CrontabItem cron)
{
if (item == null)
if (cron == null || string.IsNullOrWhiteSpace(cron.ConversationId))
{
return false;
}

try
{
var baseDir = Path.Combine(_dbSettings.FileRepository, CRONTAB_FOLDER);
item.Id = Guid.NewGuid().ToString();
var dir = Path.Combine(baseDir, item.Id);

if (Directory.Exists(dir))
var baseDir = Path.Combine(_dbSettings.FileRepository, _conversationSettings.DataDir, cron.ConversationId);
if (!Directory.Exists(baseDir))
{
return false;
}

Directory.CreateDirectory(dir);
Thread.Sleep(50);

var itemFile = Path.Combine(dir, CRONTAB_FILE);
var json = JsonSerializer.Serialize(item, _options);
File.WriteAllText(itemFile, json);
var cronFile = Path.Combine(baseDir, CRON_FILE);
var json = JsonSerializer.Serialize(cron, _options);
File.WriteAllText(cronFile, json);
return true;
}
catch (Exception ex)
Expand All @@ -48,17 +42,17 @@ public PagedItems<CrontabItem> GetCrontabItems(CrontabItemFilter filter)
}

var records = new List<CrontabItem>();
var dir = Path.Combine(_dbSettings.FileRepository, CRONTAB_FOLDER);
var baseDir = Path.Combine(_dbSettings.FileRepository, _conversationSettings.DataDir);

if (!Directory.Exists(dir))
if (!Directory.Exists(baseDir))
{
Directory.CreateDirectory(dir);
Directory.CreateDirectory(baseDir);
}

var totalDirs = Directory.GetDirectories(dir);
var totalDirs = Directory.GetDirectories(baseDir);
foreach (var d in totalDirs)
{
var file = Path.Combine(d, CRONTAB_FILE);
var file = Path.Combine(d, CRON_FILE);
if (!File.Exists(file)) continue;

var json = File.ReadAllText(file);
Expand All @@ -78,10 +72,6 @@ public PagedItems<CrontabItem> GetCrontabItems(CrontabItemFilter filter)
{
matched = matched && filter.UserIds.Contains(record.UserId);
}
if (filter?.Titles != null)
{
matched = matched && filter.Titles.Contains(record.Title);
}

if (!matched) continue;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,7 @@ public partial class FileRepository : IBotSharpRepository
private const string PLUGIN_CONFIG_FILE = "config.json";
private const string STATS_FILE = "stats.json";

private const string CRONTAB_FOLDER = "crontabs";
private const string CRONTAB_FILE = "crontab.json";
private const string CRON_FILE = "cron.json";

public FileRepository(
IServiceProvider services,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,20 +11,21 @@ public class CrontabItemDocument : MongoBase
public string Cron { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public IEnumerable<CronTaskMongoElement> Tasks { get; set; } = [];
public DateTime CreatedTime { get; set; } = DateTime.UtcNow;

public static CrontabItem ToDomainModel(CrontabItemDocument item)
{
return new CrontabItem
{
Id = item.Id,
UserId = item.UserId,
AgentId = item.AgentId,
ConversationId = item.ConversationId,
ExecutionResult = item.ExecutionResult,
Cron = item.Cron,
Title = item.Title,
Description = item.Description,
Tasks = item.Tasks?.Select(x => CronTaskMongoElement.ToDomainElement(x))?.ToArray() ?? [],
CreatedTime = item.CreatedTime
};
}
Expand All @@ -33,14 +34,14 @@ public static CrontabItemDocument ToMongoModel(CrontabItem item)
{
return new CrontabItemDocument
{
Id = item.Id,
UserId = item.UserId,
AgentId = item.AgentId,
ConversationId = item.ConversationId,
ExecutionResult = item.ExecutionResult,
Cron = item.Cron,
Title = item.Title,
Description = item.Description,
Tasks = item.Tasks?.Select(x => CronTaskMongoElement.ToMongoElement(x))?.ToList() ?? [],
CreatedTime = item.CreatedTime
};
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
using BotSharp.Abstraction.Crontab.Models;

namespace BotSharp.Plugin.MongoStorage.Models;

public class CronTaskMongoElement
{
public string Topic { get; set; }
public string Script { get; set; }
public string Language { get; set; }

public static CronTaskMongoElement ToMongoElement(ScheduleTaskItemArgs model)
{
return new CronTaskMongoElement
{
Topic = model.Topic,
Script = model.Script,
Language = model.Language
};
}

public static ScheduleTaskItemArgs ToDomainElement(CronTaskMongoElement model)
{
return new ScheduleTaskItemArgs
{
Topic = model.Topic,
Script = model.Script,
Language = model.Language
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -56,18 +56,21 @@ public bool DeleteConversations(IEnumerable<string> conversationIds)
var filterPromptLog = Builders<LlmCompletionLogDocument>.Filter.In(x => x.ConversationId, conversationIds);
var filterContentLog = Builders<ConversationContentLogDocument>.Filter.In(x => x.ConversationId, conversationIds);
var filterStateLog = Builders<ConversationStateLogDocument>.Filter.In(x => x.ConversationId, conversationIds);
var conbTabItems = Builders<CrontabItemDocument>.Filter.In(x => x.ConversationId, conversationIds);

var exeLogDeleted = _dc.ExectionLogs.DeleteMany(filterExeLog);
var promptLogDeleted = _dc.LlmCompletionLogs.DeleteMany(filterPromptLog);
var contentLogDeleted = _dc.ContentLogs.DeleteMany(filterContentLog);
var stateLogDeleted = _dc.StateLogs.DeleteMany(filterStateLog);
var statesDeleted = _dc.ConversationStates.DeleteMany(filterSates);
var dialogDeleted = _dc.ConversationDialogs.DeleteMany(filterDialog);
var cronDeleted = _dc.CrontabItems.DeleteMany(conbTabItems);
var convDeleted = _dc.Conversations.DeleteMany(filterConv);

return convDeleted.DeletedCount > 0 || dialogDeleted.DeletedCount > 0 || statesDeleted.DeletedCount > 0
|| exeLogDeleted.DeletedCount > 0 || promptLogDeleted.DeletedCount > 0
|| contentLogDeleted.DeletedCount > 0 || stateLogDeleted.DeletedCount > 0;
|| contentLogDeleted.DeletedCount > 0 || stateLogDeleted.DeletedCount > 0
|| convDeleted.DeletedCount > 0;
}

[SideCar]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ public bool InsertCrontabItem(CrontabItem item)

try
{
item.Id = Guid.NewGuid().ToString();
var cronDoc = CrontabItemDocument.ToMongoModel(item);
cronDoc.Id = Guid.NewGuid().ToString();
_dc.CrontabItems.InsertOne(cronDoc);
return true;
}
Expand Down Expand Up @@ -46,10 +46,6 @@ public PagedItems<CrontabItem> GetCrontabItems(CrontabItemFilter filter)
{
cronFilters.Add(cronBuilder.In(x => x.ConversationId, filter.ConversationIds));
}
if (filter?.Titles != null)
{
cronFilters.Add(cronBuilder.In(x => x.Title, filter.Titles));
}
if (filter?.UserIds != null)
{
cronFilters.Add(cronBuilder.In(x => x.UserId, filter.UserIds));
Expand Down