#!/usr/bin/env python3 """ 调试监控器运行状态 """ import psutil import sqlite3 from pathlib import Path def check_main_process(): """检查主程序进程""" print("检查主程序进程") print("=" * 40) main_processes = [] try: for proc in psutil.process_iter(['pid', 'name', 'cmdline']): try: if proc.info['name'] and 'python' in proc.info['name'].lower(): cmdline = proc.info['cmdline'] if cmdline and any('main.py' in arg for arg in cmdline): main_processes.append(proc) print(f"找到主程序: PID {proc.info['pid']}") print(f"命令行: {' '.join(cmdline)}") except (psutil.NoSuchProcess, psutil.AccessDenied): continue if not main_processes: print("ERROR 没有找到运行中的main.py进程") return False return True except Exception as e: print(f"ERROR 检查进程失败: {e}") return False def check_waiting_experiments(): """检查等待中的实验""" print("\n检查等待中的实验") print("=" * 40) try: db_path = Path(__file__).parent / "experiments.db" db = sqlite3.connect(str(db_path)) cur = db.cursor() # 查询等待开始的实验 cur.execute(""" SELECT id, work_order_no, created_at, remark FROM experiments WHERE start_ts IS NULL ORDER BY id DESC LIMIT 10 """) results = cur.fetchall() if results: print("等待开始的实验:") for row in results: exp_id, work_order, created_at, remark = row print(f" ID: {exp_id} - 工单: {work_order} - 创建: {created_at}") else: print("没有等待开始的实验") db.close() return results except Exception as e: print(f"ERROR 检查失败: {e}") return [] def check_recent_influx_data(): """检查最近的InfluxDB数据""" print("\n检查最近的InfluxDB数据") print("=" * 40) try: import json from influxdb_client import InfluxDBClient # 加载配置 with open("default.json", 'r', encoding='utf-8') as f: config = json.load(f) influx_config = config.get('influx', {}) client = InfluxDBClient( url=influx_config.get('url', 'http://127.0.0.1:8086'), token=influx_config.get('token', ''), org=influx_config.get('org', 'MEASCON') ) # 查询最近的数据 query = ''' from(bucket: "PCM") |> range(start: -30m) |> filter(fn: (r) => r["_measurement"] == "PCM_Measurement") |> filter(fn: (r) => r["data_type"] == "Breaker") |> filter(fn: (r) => r["_field"] == "load_status") |> sort(columns: ["_time"], desc: true) |> limit(n: 5) ''' result = client.query_api().query(query) if result: print("最近30分钟的load_status数据:") for table in result: for record in table.records: print(f" 时间: {record.get_time()}") print(f" 值: {record.get_value()}") print("-" * 20) else: print("没有找到最近的数据") client.close() except Exception as e: print(f"ERROR 检查InfluxDB失败: {e}") def main(): print("监控器运行状态调试") print("=" * 50) # 1. 检查主程序是否运行 is_running = check_main_process() # 2. 检查等待中的实验 waiting_experiments = check_waiting_experiments() # 3. 检查最近的数据 check_recent_influx_data() print("\n" + "=" * 50) print("诊断结果:") if not is_running: print("❌ 主程序未运行") print("解决方案: 启动主程序 python main.py") else: print("✅ 主程序正在运行") if not waiting_experiments: print("❌ 没有等待开始的实验") print("解决方案: 在UI中创建新工单并进入等待状态") else: print(f"✅ 有 {len(waiting_experiments)} 个等待开始的实验") print("监控器应该正在监控这些实验") if is_running and waiting_experiments: print("\n可能的问题:") print("1. 监控器配置错误(measurement、field、data_type不匹配)") print("2. 监控器没有正确启动") print("3. 监控器查询逻辑有问题") print("4. 时间戳问题导致查询不到数据") print("\n建议:") print("1. 检查监控器日志输出") print("2. 在UI中手动刷新实验列表") print("3. 重启程序并重新测试") if __name__ == "__main__": main()