#!/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()