| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- using System;
- using System.Collections.Generic;
- namespace ivf_tl_Control
- {
- /// <summary>
- /// M5-03-1:只读服务监控快照 DTO。
- /// 由 <see cref="AppData.GetMonitorSnapshot"/> 在 operate 同进程内聚合 control 内存/事件的当前状态,
- /// 供 operate 设置页「服务监控」只读页呈现(需求 7 只读服务监控、需求 10 链路健康)。
- ///
- /// 纯数据载体:所有成员均为 get-only/赋值一次性快照,**不暴露任何写入口/控制方法/可变引用**,
- /// 监控页拿到本 DTO 即拿不到任何能改变 control 状态的句柄(约束 4 只读边界)。
- /// 时间戳类字段用于「最后成功通讯时间 / 不假装实时」判定,阈值上色由 operate 侧 [D10] 占位。
- /// </summary>
- public class MonitorSnapshot
- {
- /// <summary>快照采集时刻(operate 侧据此判定数据是否过期)。</summary>
- public DateTime SnapshotAt { get; set; } = DateTime.Now;
- /// <summary>control 后台是否已完成初始化(AppData 单例存在即视为已托管)。</summary>
- public bool ControlHosted { get; set; }
- // —— MQTT 链路 ——
- /// <summary>MQTT 是否已连接(来源 MqttService.MqttIsConnected())。</summary>
- public bool MqttConnected { get; set; }
- /// <summary>最后一次 MQTT 上报成功时间(来源 StartSendMqttMsg 成功分支);null=尚未成功。</summary>
- public DateTime? LastMqttOkAt { get; set; }
- /// <summary>最近一次 MQTT 连接成功时刻(M5-04,断线提示「恢复时清除」据此判定);null=尚未连接。</summary>
- public DateTime? MqttLastConnectedAt { get; set; }
- /// <summary>最近一次 MQTT 断开时刻(M5-04,断线提示据此判定失联);null=未断开过。</summary>
- public DateTime? MqttLastDisconnectedAt { get; set; }
- // —— Kafka / 图片上传链路 ——
- /// <summary>最后一次 Kafka 图片上传成功时间(来源 KafkaUploadImageAsync 成功分支);null=尚未成功。</summary>
- public DateTime? LastKafkaOkAt { get; set; }
- /// <summary>内存待传图片缓存数(ImageDTODic.Count)。</summary>
- public int ImageCacheCount { get; set; }
- /// <summary>落盘目录待传图片数(自动对焦 + CCD 两目录 *.jpg 计数)。</summary>
- public int PendingDiskImageCount { get; set; }
- /// <summary>断网累积告警(M5-04-3:落盘待传数超阈值,疑似上传链路断开堆积,只读提示,不删图)。</summary>
- public bool ImageBacklogAlarm { get; set; }
- /// <summary>断网累积告警阈值(M5-04-3,[D10] 占位,留 M7 校准)。</summary>
- public int PendingImageAlarmThreshold { get; set; }
- // —— 服务器(HTTP)链路 ——
- /// <summary>服务器接口基址(脱敏展示用,仅 host:port)。</summary>
- public string ServerUrl { get; set; }
- /// <summary>最后一次 HTTP 通讯成功时间(M5-04-4 operate 侧轮询写入,本快照透传 control 已知值);null=未知。</summary>
- public DateTime? LastHttpOkAt { get; set; }
- // —— 磁盘 ——
- /// <summary>缓存盘符。</summary>
- public string DiskPath { get; set; }
- /// <summary>缓存盘是否存在(0=存在,1=不存在,沿用 DiskInfo.diskExist 语义)。</summary>
- public bool DiskExist { get; set; }
- /// <summary>缓存盘剩余空间 GB。</summary>
- public decimal DiskFreeGb { get; set; }
- // —— 各舱室温度/气体/CCD 只读态 ——
- /// <summary>各舱室只读状态行(温度/压力/CCD/运行态)。</summary>
- public List<HouseMonitorRow> Houses { get; set; } = new List<HouseMonitorRow>();
- /// <summary>舱故障列表(启动排除 + 运行期突发),供 operate 监控页红色高亮展示。</summary>
- public List<HouseFaultRow> Faults { get; set; } = new List<HouseFaultRow>();
- }
- /// <summary>单条舱故障只读行(operate/front 展示用,字符串化枚举便于跨端)。</summary>
- public class HouseFaultRow
- {
- public int HouseSn { get; set; }
- public string FaultType { get; set; }
- public string Reason { get; set; }
- public string Stage { get; set; }
- public DateTime At { get; set; }
- public bool Isolated { get; set; }
- }
- /// <summary>单个舱室只读监控行(取 HouseBin 已有只读字段聚合,不触发任何动作)。</summary>
- public class HouseMonitorRow
- {
- public int HouseSn { get; set; }
- public string PortName { get; set; }
- /// <summary>运行状态文案(HouseBin.RunState)。</summary>
- public string RunState { get; set; }
- /// <summary>主温度(HouseBin.Temperature)。</summary>
- public decimal Temperature { get; set; }
- /// <summary>压力(HouseBin.Pressure)。</summary>
- public decimal Pressure { get; set; }
- /// <summary>舱门状态文本(HouseBin.IsDoorOpen)。</summary>
- public string HouseState { get; set; }
- /// <summary>通讯连接状态文本(ComBin 是否就绪)。</summary>
- public string ComState { get; set; }
- /// <summary>CCD 状态文本(由 CCDError 派生:正常/异常)。</summary>
- public string CcdState { get; set; }
- /// <summary>是否有 CCD 错误标记(HouseBin.CCDError)。</summary>
- public bool CcdError { get; set; }
- // —— 阶段2 监控补全(§6 三块)——
- /// <summary>各舱实时活动类型(HouseBin.WorkingType:DoNothing/AirSwapWorking/CCDWorking/AutoFocusWorking)。</summary>
- public string WorkingType { get; set; }
- /// <summary>排气阀状态文本(HouseBin.ValveState)。</summary>
- public string ValveState { get; set; }
- /// <summary>串口借用:该舱采集是否被前台(调试/对焦)让路中(HouseBin.CapturePausedByGate)。</summary>
- public bool CapturePausedByGate { get; set; }
- }
- }
|