225 lines
6.0 KiB
Python
225 lines
6.0 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
实验状态监控器测试脚本
|
|
用于测试监控器的基本功能
|
|
"""
|
|
import sys
|
|
import time
|
|
import datetime
|
|
from pathlib import Path
|
|
|
|
# 添加项目路径
|
|
sys.path.insert(0, str(Path(__file__).parent))
|
|
|
|
from experiment_monitor import ExperimentStateMonitor
|
|
from influx_service import InfluxConnectionParams
|
|
from logger import get_logger
|
|
|
|
logger = get_logger()
|
|
|
|
|
|
def test_monitor_initialization():
|
|
"""测试监控器初始化"""
|
|
print("\n=== 测试1: 监控器初始化 ===")
|
|
|
|
try:
|
|
influx_params = InfluxConnectionParams(
|
|
url="http://127.0.0.1:8086",
|
|
org="MEASCON",
|
|
token="test_token"
|
|
)
|
|
|
|
query_config = {
|
|
'bucket': 'default',
|
|
'measurement': 'status',
|
|
'fields': ['status'],
|
|
'filters': {},
|
|
'status_field': 'status',
|
|
'status_values': {
|
|
'start': '1',
|
|
'end': '0'
|
|
}
|
|
}
|
|
|
|
monitor = ExperimentStateMonitor(
|
|
experiment_id=1,
|
|
work_order_no="TEST-001",
|
|
start_time=datetime.datetime.now(),
|
|
influx_params=influx_params,
|
|
query_config=query_config,
|
|
poll_interval=5
|
|
)
|
|
|
|
print(f"✓ 监控器初始化成功")
|
|
print(f" 实验ID: {monitor.experiment_id}")
|
|
print(f" 工单号: {monitor.work_order_no}")
|
|
print(f" 轮询间隔: {monitor.poll_interval}秒")
|
|
|
|
return monitor
|
|
|
|
except Exception as e:
|
|
print(f"✗ 监控器初始化失败: {e}")
|
|
return None
|
|
|
|
|
|
def test_monitor_status():
|
|
"""测试监控器状态查询"""
|
|
print("\n=== 测试2: 监控器状态查询 ===")
|
|
|
|
try:
|
|
influx_params = InfluxConnectionParams(
|
|
url="http://127.0.0.1:8086",
|
|
org="MEASCON",
|
|
token="test_token"
|
|
)
|
|
|
|
query_config = {
|
|
'bucket': 'default',
|
|
'measurement': 'status',
|
|
'fields': ['status'],
|
|
'filters': {},
|
|
'status_field': 'status',
|
|
'status_values': {
|
|
'start': '1',
|
|
'end': '0'
|
|
}
|
|
}
|
|
|
|
monitor = ExperimentStateMonitor(
|
|
experiment_id=1,
|
|
work_order_no="TEST-001",
|
|
start_time=datetime.datetime.now(),
|
|
influx_params=influx_params,
|
|
query_config=query_config,
|
|
poll_interval=5
|
|
)
|
|
|
|
status = monitor.get_status()
|
|
print(f"✓ 监控器状态查询成功")
|
|
print(f" 运行状态: {status['is_running']}")
|
|
print(f" 最后状态: {status['last_state']}")
|
|
print(f" 实验已开始: {status['experiment_started']}")
|
|
print(f" 实验已结束: {status['experiment_ended']}")
|
|
|
|
except Exception as e:
|
|
print(f"✗ 监控器状态查询失败: {e}")
|
|
|
|
|
|
def test_state_change_callback():
|
|
"""测试状态变化回调"""
|
|
print("\n=== 测试3: 状态变化回调 ===")
|
|
|
|
state_changes = []
|
|
|
|
def on_state_changed(old_state, new_state):
|
|
state_changes.append((old_state, new_state))
|
|
print(f" 状态变化: {old_state} -> {new_state}")
|
|
|
|
try:
|
|
influx_params = InfluxConnectionParams(
|
|
url="http://127.0.0.1:8086",
|
|
org="MEASCON",
|
|
token="test_token"
|
|
)
|
|
|
|
query_config = {
|
|
'bucket': 'default',
|
|
'measurement': 'status',
|
|
'fields': ['status'],
|
|
'filters': {},
|
|
'status_field': 'status',
|
|
'status_values': {
|
|
'start': '1',
|
|
'end': '0'
|
|
}
|
|
}
|
|
|
|
monitor = ExperimentStateMonitor(
|
|
experiment_id=1,
|
|
work_order_no="TEST-001",
|
|
start_time=datetime.datetime.now(),
|
|
influx_params=influx_params,
|
|
query_config=query_config,
|
|
on_state_changed=on_state_changed,
|
|
poll_interval=5
|
|
)
|
|
|
|
print(f"✓ 回调函数已注册")
|
|
print(f" 回调函数: {on_state_changed.__name__}")
|
|
|
|
except Exception as e:
|
|
print(f"✗ 回调函数注册失败: {e}")
|
|
|
|
|
|
def test_monitor_lifecycle():
|
|
"""测试监控器生命周期"""
|
|
print("\n=== 测试4: 监控器生命周期 ===")
|
|
|
|
try:
|
|
influx_params = InfluxConnectionParams(
|
|
url="http://127.0.0.1:8086",
|
|
org="MEASCON",
|
|
token="test_token"
|
|
)
|
|
|
|
query_config = {
|
|
'bucket': 'default',
|
|
'measurement': 'status',
|
|
'fields': ['status'],
|
|
'filters': {},
|
|
'status_field': 'status',
|
|
'status_values': {
|
|
'start': '1',
|
|
'end': '0'
|
|
}
|
|
}
|
|
|
|
monitor = ExperimentStateMonitor(
|
|
experiment_id=1,
|
|
work_order_no="TEST-001",
|
|
start_time=datetime.datetime.now(),
|
|
influx_params=influx_params,
|
|
query_config=query_config,
|
|
poll_interval=5
|
|
)
|
|
|
|
# 测试启动
|
|
print(" 启动监控器...")
|
|
monitor.start()
|
|
time.sleep(1)
|
|
|
|
status = monitor.get_status()
|
|
print(f" ✓ 监控器已启动: {status['is_running']}")
|
|
|
|
# 测试停止
|
|
print(" 停止监控器...")
|
|
monitor.stop()
|
|
time.sleep(1)
|
|
|
|
status = monitor.get_status()
|
|
print(f" ✓ 监控器已停止: {not status['is_running']}")
|
|
|
|
except Exception as e:
|
|
print(f"✗ 生命周期测试失败: {e}")
|
|
|
|
|
|
def main():
|
|
"""运行所有测试"""
|
|
print("=" * 60)
|
|
print("实验状态监控器测试")
|
|
print("=" * 60)
|
|
|
|
test_monitor_initialization()
|
|
test_monitor_status()
|
|
test_state_change_callback()
|
|
test_monitor_lifecycle()
|
|
|
|
print("\n" + "=" * 60)
|
|
print("测试完成")
|
|
print("=" * 60)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|