添加上传日志相关的接口

This commit is contained in:
huangxianguo 2024-07-09 16:27:33 +08:00
parent 1076bc6ea8
commit 5464aa361a
7 changed files with 125 additions and 10 deletions

View File

@ -0,0 +1,20 @@
using System.ComponentModel;
using SQLite;
namespace MasstransferCommon.Model.Entity;
[Table("minio_params"), Description("MinIO参数")]
public class MinioParams : Entity
{
[Column("minio_access_key"), Description("Minio AccessKey")]
public string MinioAccessKey { get; set; }
[Column("minio_secret_key"), Description("Minio SecretKey")]
public string MinioSecretKey { get; set; }
[Column("minio_bucket"), Description("Minio Bucket")]
public string MinioBucket { get; set; }
[Column("minio_endpoint"), Description("Minio Endpoint")]
public string MinioEndpoint { get; set; }
}

View File

@ -0,0 +1,19 @@
using System.ComponentModel;
using SQLite;
namespace MasstransferCommon.Model.Entity;
[Table("mqtt_params"), Description("Mqtt连接参数")]
public class MqttParams : Entity
{
[Column("server_address"), Description("服务器地址")]
public string ServerAddress { get; set; }
[Column("port"), Description("端口")] public int Port { get; set; }
[Column("user_name"), Description("用户名")]
public string UserName { get; set; }
[Column("password"), Description("密码")]
public string Password { get; set; }
}

View File

@ -4,12 +4,11 @@ namespace MasstransferCommon.Utils;
public class TimeUtil
{
public static void Sleep(int milliseconds)
{
Thread.Sleep(milliseconds);
}
/// <summary>
/// 获取当前的时间戳
/// </summary>
@ -32,6 +31,12 @@ public class TimeUtil
return dateTime.ToString(format);
}
public static string FormatTime(DateTime dateTime, string format = "yyyy-MM-dd HH:mm:ss")
{
return dateTime.ToString(format);
}
public static string ToTimeSpan(long time)
{
// 使用TimeSpan.FromMilliseconds来创建TimeSpan对象

View File

@ -1,11 +1,63 @@
namespace MasstransferExporter.LogExporter;
using MasstransferCommon.Model.Entity;
using MasstransferCommon.Utils;
using MasstransferCommunicate.Minio;
using MasstransferInfrastructure.Database.Sqlite;
namespace MasstransferExporter.LogExporter;
public class LogFileExporter
{
public async Task Export(string logFilePath)
private static readonly SqliteHelper Helper = SqliteHelper.GetInstance();
private static readonly string[] Levels = ["debug", "info", "warning", "error"];
private static MinioHelper _minio = MinioHelper.GetInstance();
public static async Task ExportLogFile()
{
var logParams = Helper.Query<LogParams>("select * from log_params limit 1").FirstOrDefault();
var yesterday = DateTime.Today.AddDays(-1);
var path =
"C:\\workspace\\code_repos\\haiju\\MasstransferHost\\MasstransferDesktop\\bin\\Debug\\net7.0";
foreach (var level in Levels)
{
List<FileInfo> files = [];
var directory = new DirectoryInfo(path + "\\logs");
GetLogFiles(directory, level, files, yesterday);
foreach (var file in files)
{
var fileName = $"sn/{TimeUtil.FormatTime(yesterday, "yyyy-MM-dd")}/{level}/{file.Name}";
await _minio.UploadFileAsync("log", fileName, file.FullName);
}
}
}
/// <summary>
/// 重新加载日志文件列表
/// </summary>
private static void GetLogFiles(DirectoryInfo directory, string level, List<FileInfo> files, DateTime yesterday)
{
// 获取文件夹下所有文件的信息
var fs = directory.GetFiles();
var directoryName = directory.Name;
if (!directoryName.Equals("logs") && !directoryName.Equals(level))
{
return;
}
// 遍历所有文件
files.AddRange(fs.Where(f => f.CreationTime.Date.Equals(yesterday)));
// 递归遍历当前目录下的所有文件夹
foreach (var subdir in directory.GetDirectories()) GetLogFiles(subdir, level, files, yesterday);
}
}

View File

@ -5,6 +5,7 @@
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<LangVersion>preview</LangVersion>
</PropertyGroup>
<ItemGroup>

View File

@ -15,7 +15,7 @@ class Program
await MessageQueueHelper.InitConnect(options);
await OperationLogExporter.ExportOperationLog();
await LogFileExporter.ExportLogFile();
Console.WriteLine("按任意键退出");

View File

@ -1,4 +1,6 @@
using Minio;
using MasstransferCommon.Model.Entity;
using MasstransferInfrastructure.Database.Sqlite;
using Minio;
using Minio.DataModel.Args;
namespace MasstransferCommunicate.Minio;
@ -10,7 +12,13 @@ public class MinioHelper
{
private readonly IMinioClient _client;
public MinioHelper(string endpoint, string accessKey, string secretKey)
private static MinioHelper? _instance;
private static readonly object Lock = new();
private static SqliteHelper _sqliteHelper = SqliteHelper.GetInstance();
private MinioHelper(string endpoint, string accessKey, string secretKey)
{
_client = new MinioClient()
.WithEndpoint(endpoint)
@ -18,6 +26,16 @@ public class MinioHelper
.Build();
}
public static MinioHelper GetInstance()
{
lock (Lock)
{
var minio = _sqliteHelper.Query<MinioParams>("select * from minio_params limit 1").FirstOrDefault();
_instance ??= new MinioHelper(minio.MinioEndpoint, minio.MinioAccessKey, minio.MinioSecretKey);
return _instance;
}
}
/// <summary>
/// 判断bucket 是否存在
/// </summary>