S3MdpMonitorService.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. namespace Admin.NET.Plugin.AiDOP.Supply;
  2. /// <summary>
  3. /// S3 MDP 运行监控。
  4. /// </summary>
  5. [ApiDescriptionSettings(Order = 320, Description = "S3 MDP运行监控")]
  6. [Route("api/Supply")]
  7. [AllowAnonymous]
  8. [NonUnify]
  9. public class S3MdpMonitorService : IDynamicApiController, ITransient
  10. {
  11. private readonly ISqlSugarClient _db;
  12. public S3MdpMonitorService(ISqlSugarClient db)
  13. {
  14. _db = db;
  15. }
  16. [DisplayName("S3 MDP最近运行状态")]
  17. [HttpGet("s3-mdp-monitor/latest")]
  18. public async Task<object> GetLatest()
  19. {
  20. return await _db.Ado.SqlQuerySingleAsync<S3MdpRunLogRow>(
  21. $"{SelectColumnsSql()} FROM mdp_transform_run_log WHERE job_code='S3_MDP_SYNC_TRANSFORM' ORDER BY start_time DESC, id DESC LIMIT 1")
  22. ?? new S3MdpRunLogRow();
  23. }
  24. [DisplayName("S3 MDP运行日志列表")]
  25. [HttpGet("s3-mdp-monitor/list")]
  26. public async Task<object> GetList([FromQuery] S3MdpMonitorListInput input)
  27. {
  28. var page = input.Page <= 0 ? 1 : input.Page;
  29. var pageSize = input.PageSize <= 0 ? 10 : input.PageSize;
  30. var offset = (page - 1) * pageSize;
  31. var where = new List<string> { "job_code='S3_MDP_SYNC_TRANSFORM'" };
  32. var pars = new List<SugarParameter>();
  33. if (!string.IsNullOrWhiteSpace(input.BatchId))
  34. {
  35. where.Add("batch_id LIKE @BatchId");
  36. pars.Add(new SugarParameter("@BatchId", $"%{input.BatchId.Trim()}%"));
  37. }
  38. if (!string.IsNullOrWhiteSpace(input.Status))
  39. {
  40. where.Add("status=@Status");
  41. pars.Add(new SugarParameter("@Status", input.Status.Trim().ToUpperInvariant()));
  42. }
  43. if (input.StartTime.HasValue)
  44. {
  45. where.Add("start_time >= @StartTime");
  46. pars.Add(new SugarParameter("@StartTime", input.StartTime.Value));
  47. }
  48. if (input.EndTime.HasValue)
  49. {
  50. where.Add("start_time <= @EndTime");
  51. pars.Add(new SugarParameter("@EndTime", input.EndTime.Value));
  52. }
  53. var whereSql = string.Join(" AND ", where);
  54. var total = await _db.Ado.GetIntAsync($"SELECT COUNT(1) FROM mdp_transform_run_log WHERE {whereSql}", pars);
  55. var list = await _db.Ado.SqlQueryAsync<S3MdpRunLogRow>(
  56. $"""
  57. {SelectColumnsSql()}
  58. FROM mdp_transform_run_log
  59. WHERE {whereSql}
  60. ORDER BY start_time DESC, id DESC
  61. LIMIT {pageSize} OFFSET {offset}
  62. """,
  63. pars);
  64. return new { total, page, pageSize, list };
  65. }
  66. [DisplayName("S3 MDP运行日志详情")]
  67. [HttpGet("s3-mdp-monitor/detail/{id}")]
  68. public async Task<object> GetDetail(long id)
  69. {
  70. var row = await _db.Ado.SqlQuerySingleAsync<S3MdpRunLogRow>(
  71. $"{SelectColumnsSql()} FROM mdp_transform_run_log WHERE id=@Id LIMIT 1",
  72. new SugarParameter("@Id", id));
  73. return row ?? throw Oops.Oh("运行日志不存在");
  74. }
  75. private static string SelectColumnsSql()
  76. {
  77. return """
  78. SELECT id AS Id, tenant_id AS TenantId, job_code AS JobCode, job_name AS JobName, trigger_type AS TriggerType,
  79. batch_id AS BatchId, status AS Status, start_time AS StartTime, end_time AS EndTime, duration_ms AS DurationMs,
  80. stage_rows AS StageRows, standard_rows AS StandardRows, dwd_rows AS DwdRows,
  81. error_message AS ErrorMessage, summary_json AS SummaryJson, create_time AS CreateTime, update_time AS UpdateTime
  82. """;
  83. }
  84. }
  85. public sealed class S3MdpMonitorListInput
  86. {
  87. public string? BatchId { get; set; }
  88. public string? Status { get; set; }
  89. public DateTime? StartTime { get; set; }
  90. public DateTime? EndTime { get; set; }
  91. public int Page { get; set; } = 1;
  92. public int PageSize { get; set; } = 10;
  93. }
  94. public sealed class S3MdpRunLogRow
  95. {
  96. public long Id { get; set; }
  97. public long TenantId { get; set; }
  98. public string? JobCode { get; set; }
  99. public string? JobName { get; set; }
  100. public string? TriggerType { get; set; }
  101. public string? BatchId { get; set; }
  102. public string? Status { get; set; }
  103. public DateTime? StartTime { get; set; }
  104. public DateTime? EndTime { get; set; }
  105. public int? DurationMs { get; set; }
  106. public int? StageRows { get; set; }
  107. public int? StandardRows { get; set; }
  108. public int? DwdRows { get; set; }
  109. public string? ErrorMessage { get; set; }
  110. public string? SummaryJson { get; set; }
  111. public DateTime? CreateTime { get; set; }
  112. public DateTime? UpdateTime { get; set; }
  113. }