AdoEtlInstance.cs 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. namespace Admin.NET.Plugin.AiDOP.Entity.SmartOps;
  2. /// <summary>
  3. /// ETL 执行机实例注册表。每个连本库的后端进程注册一行并定期心跳,
  4. /// <c>is_runner=1</c> 的那一行是当前被指派跑定时 ETL 的实例。
  5. ///
  6. /// <para><b>无租户列是刻意的</b>:实例是部署事实,不属于任何租户。
  7. /// 本类不实现租户过滤接口,SqlSugar 不会给它加租户条件。</para>
  8. ///
  9. /// <para><b>指派唯一性由写入侧保证</b>:置某行 <c>is_runner=1</c> 时必须在同一事务内
  10. /// 把其余行置 0。不要依赖前端或唯一索引——「最多一行为 1」在 MySQL 里没有
  11. /// 直接可用的约束表达(部分索引不支持)。</para>
  12. /// </summary>
  13. [SugarTable("ado_etl_instance", "ETL执行机实例注册")]
  14. public class AdoEtlInstance
  15. {
  16. [SugarColumn(ColumnName = "id", IsPrimaryKey = true, IsIdentity = true)]
  17. public long Id { get; set; }
  18. /// <summary>形如 <c>机器名:进程ID:启动时间</c>,见 <c>AidopInstanceIdentity</c>。唯一索引。</summary>
  19. [SugarColumn(ColumnName = "instance_id", Length = 200)]
  20. public string InstanceId { get; set; } = string.Empty;
  21. [SugarColumn(ColumnName = "machine_name", Length = 128)]
  22. public string MachineName { get; set; } = string.Empty;
  23. [SugarColumn(ColumnName = "process_id")]
  24. public int ProcessId { get; set; }
  25. [SugarColumn(ColumnName = "app_version", Length = 64, IsNullable = true)]
  26. public string AppVersion { get; set; }
  27. /// <summary>是否被指派为执行机。**只由人工指派写入**,注册器不会自行置 1。</summary>
  28. [SugarColumn(ColumnName = "is_runner")]
  29. public bool IsRunner { get; set; }
  30. [SugarColumn(ColumnName = "started_at")]
  31. public DateTime StartedAt { get; set; }
  32. /// <summary>最近一次心跳。页面据此判存活,超过心跳窗口即视为已下线。</summary>
  33. [SugarColumn(ColumnName = "last_heartbeat_at")]
  34. public DateTime LastHeartbeatAt { get; set; }
  35. [SugarColumn(ColumnName = "create_time")]
  36. public DateTime CreateTime { get; set; }
  37. [SugarColumn(ColumnName = "update_time")]
  38. public DateTime UpdateTime { get; set; }
  39. }