PCM_Report/debug_monitor_running.py

167 lines
5.0 KiB
Python
Raw Permalink Normal View History

2025-12-11 14:32:31 +08:00
#!/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()