PCM_Report/debug_flux_query.py

105 lines
2.8 KiB
Python

#!/usr/bin/env python3
"""
调试Flux查询语句
"""
import json
import os
from influx_service import InfluxService, InfluxConnectionParams
def load_config():
"""从default.json加载配置"""
config_path = os.path.join(os.path.dirname(__file__), "default.json")
try:
with open(config_path, 'r', encoding='utf-8') as f:
config = json.load(f)
return config.get('influx', {})
except Exception as e:
print(f"❌ 加载配置文件失败: {e}")
return {}
def test_flux_query():
"""测试Flux查询语句"""
config = load_config()
# 创建连接参数
params = InfluxConnectionParams(
url=config.get('url', ''),
org=config.get('org', ''),
token=config.get('token', '')
)
# 创建服务
service = InfluxService(params)
# 测试参数
bucket = config.get('bucket', 'default')
measurement = config.get('measurement', 'status')
fields = ['status']
filters = {}
time_range = "-1h"
print("🔍 测试Flux查询")
print(f"Bucket: {bucket}")
print(f"Measurement: {measurement}")
print(f"Fields: {fields}")
print(f"Time Range: {time_range}")
print()
# 生成Flux查询语句
flux = service.build_flux(
bucket=bucket,
measurement=measurement,
fields=fields,
filters=filters,
time_range=time_range
)
print("📝 生成的Flux查询语句:")
print("-" * 50)
print(flux)
print("-" * 50)
print()
# 尝试执行查询
try:
print("🚀 执行查询...")
df = service.query(
bucket=bucket,
measurement=measurement,
fields=fields,
filters=filters,
time_range=time_range
)
print(f"✅ 查询成功! 返回 {len(df)} 行数据")
if not df.empty:
print("📊 数据预览:")
print(df.head())
# 检查status字段的值
if 'status' in df.columns:
status_values = df['status'].unique()
print(f"🎯 Status字段的唯一值: {status_values}")
elif '_value' in df.columns:
status_values = df['_value'].unique()
print(f"🎯 _value字段的唯一值: {status_values}")
else:
print("⚠️ 查询结果为空")
except Exception as e:
print(f"❌ 查询失败: {e}")
print("\n🔧 可能的原因:")
print("1. Bucket不存在")
print("2. Measurement不存在")
print("3. 时间范围内没有数据")
print("4. Flux语法错误")
def main():
print("Flux查询调试工具")
print("=" * 50)
test_flux_query()
if __name__ == "__main__":
main()