PCM_Report/test_monitor_fix.py

124 lines
3.8 KiB
Python
Raw Permalink Normal View History

2025-12-11 14:32:31 +08:00
#!/usr/bin/env python3
"""
测试修复后的监控器查询
"""
import sys
import os
import datetime
sys.path.append(os.path.dirname(__file__))
from influx_service import InfluxService, InfluxConnectionParams
from config_model import AppConfig
from pathlib import Path
def test_time_range_formats():
"""测试不同的时间范围格式"""
print("🧪 测试时间范围格式")
# 加载配置
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')
fields = ['status']
filters = {}
# 测试不同的时间范围格式
test_cases = [
("-1h", "相对时间1小时前"),
("-30m", "相对时间30分钟前"),
('"2025-11-25T15:00:00Z"', "绝对时间(带引号和时区)"),
('2025-11-25T15:00:00Z', "绝对时间(无引号)- 应该失败"),
]
for time_range, description in test_cases:
print(f"\n🔍 测试: {description}")
print(f" 时间范围: {time_range}")
try:
# 生成查询
flux = service.build_flux(
bucket=bucket,
measurement=measurement,
fields=fields,
filters=filters,
time_range=time_range
)
print(" 生成的查询:")
for i, line in enumerate(flux.split('\n'), 1):
if line.strip():
print(f" {i}: {line}")
# 执行查询
df = service.query(
bucket=bucket,
measurement=measurement,
fields=fields,
filters=filters,
time_range=time_range
)
print(f" ✅ 查询成功! 返回 {len(df)} 行数据")
except Exception as e:
print(f" ❌ 查询失败: {e}")
def test_monitor_time_logic():
"""测试监控器的时间逻辑"""
print("\n🕐 测试监控器时间逻辑")
# 模拟不同的start_time情况
test_times = [
(datetime.datetime.now(), "当前时间(无时区)"),
(datetime.datetime.now(datetime.timezone.utc), "当前时间UTC时区"),
("2025-11-25T15:00:00", "字符串时间"),
(None, "None值"),
]
for start_time, description in test_times:
print(f"\n🔍 测试: {description}")
print(f" start_time: {start_time}")
try:
# 模拟监控器的时间处理逻辑
if hasattr(start_time, 'isoformat'):
if start_time.tzinfo is None:
start_time_utc = start_time.replace(tzinfo=datetime.timezone.utc)
else:
start_time_utc = start_time.astimezone(datetime.timezone.utc)
start_iso = start_time_utc.isoformat()
else:
start_iso = "-1h"
if start_iso.startswith('-'):
time_range = start_iso
else:
time_range = f'"{start_iso}"'
print(f" 处理后的时间范围: {time_range}")
print(" ✅ 时间处理成功")
except Exception as e:
print(f" ❌ 时间处理失败: {e}")
def main():
print("监控器修复测试工具")
print("=" * 40)
test_time_range_formats()
test_monitor_time_logic()
if __name__ == "__main__":
main()