using BotSharp.Abstraction.Loggers.Models; using BotSharp.Abstraction.Loggers.Services; using BotSharp.OpenAPI.ViewModels.Instructs; using Microsoft.AspNetCore.Hosting; namespace BotSharp.OpenAPI.Controllers; [Authorize] [ApiController] public class LoggerController : ControllerBase { private readonly IServiceProvider _services; public LoggerController( IServiceProvider services) { _services = services; } [HttpGet("/logger/full-log")] public async Task GetFullLog() { var env = _services.GetRequiredService(); var logFile = Path.Combine(env.ContentRootPath, "logs", $"log-{DateTime.Now:yyyyMMdd}.txt"); if (System.IO.File.Exists(logFile)) { using Stream stream = System.IO.File.Open(logFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); var bytes = new byte[stream.Length]; stream.Read(bytes, 0, (int)stream.Length); return File(bytes, "application/octet-stream", Path.GetFileName(logFile)); } else { return NotFound(); } } #region Conversation log [HttpGet("/logger/conversation/{conversationId}/content-log")] public async Task> GetConversationContentLogs( [FromRoute] string conversationId, [FromQuery] ConversationLogFilter request) { var logging = _services.GetRequiredService(); return await logging.GetConversationContentLogs(conversationId, request); } [HttpGet("/logger/conversation/{conversationId}/state-log")] public async Task> GetConversationStateLogs( [FromRoute] string conversationId, [FromQuery] ConversationLogFilter request) { var logging = _services.GetRequiredService(); return await logging.GetConversationStateLogs(conversationId, request); } #endregion #region Instruction log [HttpGet("/logger/instruction/log")] public async Task> GetInstructionLogs([FromQuery] InstructLogFilter request) { var logging = _services.GetRequiredService(); var logs = await logging.GetInstructionLogs(request); return new PagedItems { Items = logs.Items.Select(x => InstructionLogViewModel.From(x)), Count = logs.Count }; } [HttpGet("/logger/instruction/log/keys")] public async Task> GetInstructionLogKeys([FromQuery] InstructLogKeysFilter request) { var logging = _services.GetRequiredService(); var keys = await logging.GetInstructionLogSearchKeys(request); return keys; } #endregion }