PCM_Report/test_monitor_fix.py

124 lines
3.8 KiB
Python
Raw 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 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()