feat 获取api日志

This commit is contained in:
cheche
2024-02-22 10:12:04 +08:00
parent 4c77130a18
commit 6d2d62d628
13 changed files with 220 additions and 11 deletions

View File

@@ -1,6 +1,7 @@
using Dlhis.Basic.Device.Request;
using Dlhis.Basic.Device.Response;
using Dlhis.Basic.Device.Services;
using Dlhis.Entity.Basic.Entity;
using Kurisu.Core.DataAccess.Dto;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
@@ -198,8 +199,18 @@ public class DevicesController : ControllerBase
/// </summary>
/// <returns></returns>
[HttpGet("recentnumbers")]
public async Task<Dictionary<string, int>> GetRecentNumbersAsync()
public async Task<List<RecentNumberResponse>> GetRecentNumbersAsync()
{
return await _deviceService.GetRecentNumbersAsync();
}
/// <summary>
/// 获取api日志
/// </summary>
/// <returns></returns>
[HttpGet("logs")]
public async Task<Pagination<ApiLogResponse>> GetLogsAsync([FromQuery]ApiLogRequest request)
{
return await _deviceService.GetLogsAsync(request);
}
}

View File

@@ -0,0 +1,14 @@
using Dlhis.Entity.Basic.Enums;
using Kurisu.Core.DataAccess.Dto;
using System.ComponentModel.DataAnnotations;
namespace Dlhis.Basic.Device.Request
{
public class ApiLogRequest :PageDto
{
public string message { get; set; }
[EnumDataType(typeof(ApiLogEnumType)),]
public ApiLogEnumType? Type { get; set; }
}
}

View File

@@ -0,0 +1,49 @@
using SqlSugar;
namespace Dlhis.Basic.Device.Response
{
public class ApiLogResponse
{
/// <summary>
/// 时间
/// </summary>
[SugarColumn(ColumnDescription = "时间")]
public string Timestamp { get; set; }
/// <summary>
/// 级别
/// </summary>
[SugarColumn(ColumnDescription = "级别")]
public string Level { get; set; }
/// <summary>
/// 模板
/// </summary>
[SugarColumn(ColumnDescription = "模板")]
public string Template { get; set; }
/// <summary>
/// 消息内容
/// </summary>
[SugarColumn(ColumnDescription = "消息内容")]
public string Message { get; set; }
/// <summary>
/// 异常内容
/// </summary>
[SugarColumn(ColumnDescription = "异常内容")]
public string Exception { get; set; }
/// <summary>
/// 属性
/// </summary>
[SugarColumn(ColumnDescription = "属性")]
public string Properties { get; set; }
/// <summary>
/// 时间
/// </summary>
[SugarColumn(ColumnDescription = "时间")]
public DateTime _ts { get; set; }
}
}

View File

@@ -0,0 +1,9 @@
namespace Dlhis.Basic.Device.Response
{
public class RecentNumberResponse
{
public string Date { get; set; }
public int Num { get; set; }
}
}

View File

@@ -1,5 +1,6 @@
using Dlhis.Basic.Device.Request;
using Dlhis.Basic.Device.Response;
using Dlhis.Entity.Basic.Entity;
using Kurisu.Core.DataAccess.Dto;
using Microsoft.AspNetCore.Mvc;
@@ -23,5 +24,7 @@ public interface IDeviceService : IScopeDependency
Task<Pagination<DevicePageResponse>> GetAttendanceOfflineAsync(DeviceOnlineAndofflineRequest request);
Task<Dictionary<string, int>> GetRecentNumbersAsync();
Task<List<RecentNumberResponse>> GetRecentNumbersAsync();
Task<Pagination<ApiLogResponse>> GetLogsAsync(ApiLogRequest request);
}

View File

@@ -3,6 +3,7 @@ using Dlhis.Basic.Device.Response;
using Dlhis.Entity.Basic.Entity;
using Dlhis.Entity.Device.Entities;
using Dlhis.Entity.Device.Enums;
using Kurisu.AspNetCore.Scope;
using Kurisu.AspNetCore.UnifyResultAndValidation;
using Kurisu.AspNetCore.Utils.Extensions;
using Kurisu.Core.DataAccess.Dto;
@@ -246,7 +247,7 @@ public class DeviceService : IDeviceService
return page;
}
public async Task<Dictionary<string, int>> GetRecentNumbersAsync()
public async Task<List<RecentNumberResponse>> GetRecentNumbersAsync()
{
//获取近30天并转化为"yyyy-MM-dd"集合
DateTime currentDate = DateTime.Now;
@@ -260,13 +261,39 @@ public class DeviceService : IDeviceService
var devices = await _dbContext.Queryable<DeviceEntity>().ToListAsync();
var dic = new Dictionary<string, int>();
var list = new List<RecentNumberResponse>();
times.ForEach(time =>
{
var count = devices.Where(x => x.CreateTime.ToString("yyyy-MM-dd") == time).Count();
dic[time] = count;
var res = new RecentNumberResponse
{
Date = time,
Num = count,
};
list.Add(res);
});
return list;
}
public async Task<Pagination<ApiLogResponse>> GetLogsAsync(ApiLogRequest request)
{
var level = request.Type.ToString();
return await Scoped.Request.Value.CreateAsync(async (sp) =>
{
var configuration = sp.GetService<IConfiguration>();
var logConnectionString = configuration.GetSection("SqlSugarOptions:LogConnectionString").Value;
//todo 切换连接字符串
var dbContext = sp.GetService<IDbContext>();
dbContext.Client.CurrentConnectionConfig.ConnectionString = logConnectionString;
var logs = await dbContext.Queryable<ApiLogEntity>()
.WhereIF(!request.message.IsEmpty(), x => x.Message.Contains(request.message))
.WhereIF(!level.IsEmpty(),x => x.Level == level)
.Select<ApiLogResponse>()
.ToPageListAsync(request);
return logs;
});
return dic;
}
}

View File

@@ -24,9 +24,9 @@ public class Startup : DefaultStartup
base.ConfigureServices(services);
//todo
var redis = ConnectionMultiplexer.Connect($"10.27.21.15:30050,defaultDatabase:1,password=dlhis123");
/*var redis = ConnectionMultiplexer.Connect($"10.27.21.15:30050,defaultDatabase:1,password=dlhis123");
services.AddDataProtection()
.SetApplicationName("basic")
.PersistKeysToStackExchangeRedis(redis, "DataProtection-Keys");
.PersistKeysToStackExchangeRedis(redis, "DataProtection-Keys");*/
}
}

View File

@@ -18,6 +18,7 @@
"DefaultConnectionString": "server=192.168.199.124;port=3306;userid=root;password=dlhis123;database=yikatong;charset=utf8mb4;",
"SlaveConnectionString": [],
"FaceConnectionString": "server=192.168.199.124;port=3306;userid=root;password=dlhis123;database=face;charset=utf8mb4;",
"LogConnectionString": "server=192.168.199.124;port=3306;userid=root;password=dlhis123;database=log;charset=utf8mb4;",
"Timeout": 30,
"SlowSqlTime": 1,
"EnableSqlLog": false

View File

@@ -0,0 +1,61 @@
using Kurisu.Core.DataAccess.Entity;
using Kurisu.SqlSugar;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Dlhis.Entity.Basic.Entity
{
/// <summary>
/// api日志表
/// </summary>
[SugarTable(TableName = "Logs", TableDescription = "api日志表")]
public class ApiLogEntity
{
/// <summary>
/// 时间
/// </summary>
[SugarColumn(ColumnDescription = "时间")]
public string Timestamp { get; set; }
/// <summary>
/// 级别
/// </summary>
[SugarColumn(ColumnDescription = "级别")]
public string Level { get; set; }
/// <summary>
/// 模板
/// </summary>
[SugarColumn(ColumnDescription = "模板")]
public string Template { get; set; }
/// <summary>
/// 消息内容
/// </summary>
[SugarColumn(ColumnDescription = "消息内容")]
public string Message { get; set; }
/// <summary>
/// 异常内容
/// </summary>
[SugarColumn(ColumnDescription = "异常内容")]
public string Exception { get; set; }
/// <summary>
/// 属性
/// </summary>
[SugarColumn(ColumnDescription = "属性")]
public string Properties { get; set; }
/// <summary>
/// 时间
/// </summary>
[SugarColumn(ColumnDescription = "时间")]
public DateTime _ts { get; set; }
}
}

View File

@@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Dlhis.Entity.Basic.Enums
{
/// <summary>
/// api日志状态
/// </summary>
[Description("api日志状态")]
public enum ApiLogEnumType
{
Information = 1,
Warning = 2,
Error = 3,
Fatal = 4,
}
}

View File

@@ -1,4 +1,5 @@
using Dlhis.ScheduledTask.DeviceUploadLog.Request;
using Dlhis.Entity.Basic.Entity;
using Dlhis.ScheduledTask.DeviceUploadLog.Request;
using Dlhis.ScheduledTask.DeviceUploadLog.Response;
using Dlhis.ScheduledTask.DeviceUploadLog.Services;
using Kurisu.Core.DataAccess.Dto;
@@ -54,4 +55,5 @@ public class DeviceUploadLogsController : ControllerBase
{
await _deviceUploadLogService.UploadLogsAsync(requests);
}
}

View File

@@ -1,4 +1,5 @@
using Dlhis.ScheduledTask.DeviceUploadLog.Request;
using Dlhis.Entity.Basic.Entity;
using Dlhis.ScheduledTask.DeviceUploadLog.Request;
using Dlhis.ScheduledTask.DeviceUploadLog.Response;
using Kurisu.Core.DataAccess.Dto;
@@ -11,4 +12,5 @@ public interface IDeviceUploadLogService : IScopeDependency
Task UploadLogAsync(DeviceUploadLogUploadRequest request);
Task UploadLogsAsync(List<DeviceUploadLogUploadRequest> requests);
}

View File

@@ -1,13 +1,18 @@
using System.Linq.Expressions;
using System.Configuration;
using System.Linq.Expressions;
using Dlhis.Entity.Basic.Entity;
using Dlhis.Entity.Device.Entities;
using Dlhis.ScheduledTask.DeviceUploadLog.Request;
using Dlhis.ScheduledTask.DeviceUploadLog.Response;
using Kurisu.AspNetCore.Scope;
using Kurisu.AspNetCore.Utils.Extensions;
using Kurisu.Core.DataAccess.Dto;
using Kurisu.SqlSugar.Attributes;
using Kurisu.SqlSugar.Extensions;
using Kurisu.SqlSugar.Services;
using Microsoft.AspNetCore.DataProtection;
using Microsoft.AspNetCore.Mvc;
using NetTaste;
using SqlSugar;
namespace Dlhis.ScheduledTask.DeviceUploadLog.Services.Implements;
@@ -101,4 +106,5 @@ public class DeviceUploadLogService : IDeviceUploadLogService
await _dbContext.InsertAsync(records);
}
}