PCM_Report/check_program_status.py

132 lines
4.2 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#!/usr/bin/env python3
"""
检查程序运行状态
"""
import psutil
import os
def check_main_program():
"""检查main.py是否在运行"""
print("🔍 检查程序运行状态")
current_pid = os.getpid()
main_processes = []
for proc in psutil.process_iter(['pid', 'name', 'cmdline']):
try:
if proc.info['pid'] == current_pid:
continue
cmdline = proc.info['cmdline']
if cmdline and len(cmdline) >= 2:
if 'python' in cmdline[0].lower() and 'main.py' in ' '.join(cmdline):
main_processes.append({
'pid': proc.info['pid'],
'cmdline': ' '.join(cmdline)
})
except (psutil.NoSuchProcess, psutil.AccessDenied):
continue
if main_processes:
print("✅ 找到运行中的main.py进程:")
for proc in main_processes:
print(f" PID: {proc['pid']}")
print(f" 命令: {proc['cmdline']}")
return True
else:
print("❌ 没有找到运行中的main.py进程")
print("\n💡 要启动监控功能,请:")
print("1. 运行: python main.py")
print("2. 在程序界面中点击'开始工单'")
print("3. 进入等待状态后,监控器会自动启动")
return False
def check_recent_test_data():
"""检查最近写入的测试数据"""
print("\n📊 检查最近写入的测试数据")
import sys
sys.path.append(os.path.dirname(__file__))
from influx_service import InfluxService, InfluxConnectionParams
from config_model import AppConfig
from pathlib import Path
try:
# 加载配置
config_path = Path("default.json")
config = AppConfig.load(config_path)
# 创建InfluxDB服务
params = InfluxConnectionParams(
url=config.influx.url,
org=config.influx.org,
token=config.influx.token
)
service = InfluxService(params)
bucket = getattr(config.influx, 'bucket', 'PCM')
measurement = getattr(config.influx, 'measurement', 'experiment_status')
# 查询最近1小时的数据按时间排序
df = service.query(
bucket=bucket,
measurement=measurement,
fields=['status'],
filters={},
time_range="-1h"
)
if df.empty:
print("❌ 最近1小时没有数据")
return
# 显示最近的数据
if '_time' in df.columns and '_value' in df.columns:
df_sorted = df.sort_values('_time')
print(f"✅ 找到 {len(df_sorted)} 条数据:")
# 显示最近的5条数据
recent_data = df_sorted.tail(5)
for _, row in recent_data.iterrows():
time_local = row['_time'].astimezone() # 转换为本地时间
time_str = time_local.strftime('%m-%d %H:%M:%S')
value = row['_value']
print(f" {time_str}: status = {value}")
# 检查是否有状态变化
values = df_sorted['_value'].tolist()
changes = []
for i in range(1, len(values)):
if values[i] != values[i-1]:
changes.append(f"{values[i-1]} -> {values[i]}")
if changes:
print(f"\n🔄 检测到状态变化: {', '.join(changes)}")
print("✅ 数据中包含状态变化,监控器应该能检测到")
else:
print("\n⚠️ 数据中没有状态变化")
except Exception as e:
print(f"❌ 检查数据失败: {e}")
def main():
print("程序状态检查工具")
print("=" * 30)
program_running = check_main_program()
check_recent_test_data()
print("\n📋 总结:")
if program_running:
print("✅ 程序正在运行")
print("💡 如果监控器没有响应,请检查程序是否已点击'开始工单'")
else:
print("❌ 程序没有运行")
print("💡 请先启动程序: python main.py")
if __name__ == "__main__":
main()