PCM_Report/debug_write_test.py

153 lines
4.7 KiB
Python
Raw Normal View History

2025-12-11 14:32:31 +08:00
#!/usr/bin/env python3
"""
调试数据写入问题
"""
import datetime
import json
import os
from influxdb_client import InfluxDBClient, Point
from influxdb_client.client.write_api import SYNCHRONOUS
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 debug_write_and_read():
"""调试写入和读取过程"""
config = load_config()
url = config.get('url', '')
org = config.get('org', '')
token = config.get('token', '')
bucket = config.get('bucket', 'PCM')
measurement = config.get('measurement', 'experiment_status')
print("🔧 调试写入和读取")
print(f"URL: {url}")
print(f"Org: {org}")
print(f"Token: {token[:20]}...")
print(f"Bucket: {bucket}")
print(f"Measurement: {measurement}")
print()
try:
client = InfluxDBClient(url=url, token=token, org=org)
# 1. 写入测试数据
print("1⃣ 写入测试数据...")
write_api = client.write_api(write_options=SYNCHRONOUS)
now = datetime.datetime.now()
print(f"当前时间: {now}")
# 创建数据点
point = Point(measurement) \
.field("status", "1") \
.field("temperature", 25.5) \
.field("debug_timestamp", now.isoformat()) \
.time(now)
print(f"数据点: {point}")
# 写入数据
write_api.write(bucket=bucket, record=point)
print("✅ 数据写入成功")
# 2. 立即读取数据
print("\n2⃣ 立即读取数据...")
query_api = client.query_api()
# 查询最近5分钟的数据
query = f'''
from(bucket: "{bucket}")
|> range(start: -5m)
|> filter(fn: (r) => r["_measurement"] == "{measurement}")
|> sort(columns: ["_time"], desc: true)
|> limit(n: 5)
'''
print("查询语句:")
print(query)
print()
result = query_api.query(query)
data_found = False
for table in result:
for record in table.records:
data_found = True
print(f"时间: {record.get_time()}")
print(f"字段: {record.get_field()}")
print(f"值: {record.get_value()}")
print("---")
if not data_found:
print("❌ 没有找到刚写入的数据")
# 3. 尝试查询更大的时间范围
print("\n3⃣ 扩大时间范围查询...")
query2 = f'''
from(bucket: "{bucket}")
|> range(start: -1h)
|> filter(fn: (r) => r["_measurement"] == "{measurement}")
|> sort(columns: ["_time"], desc: true)
|> limit(n: 10)
'''
result2 = query_api.query(query2)
data_found2 = False
for table in result2:
for record in table.records:
data_found2 = True
print(f"时间: {record.get_time()}")
print(f"字段: {record.get_field()}")
print(f"值: {record.get_value()}")
print("---")
if not data_found2:
print("❌ 1小时内也没有找到数据")
# 4. 检查bucket中是否有任何experiment_status数据
print("\n4⃣ 检查所有experiment_status数据...")
query3 = f'''
from(bucket: "{bucket}")
|> range(start: -24h)
|> filter(fn: (r) => r["_measurement"] == "{measurement}")
|> count()
'''
result3 = query_api.query(query3)
total_count = 0
for table in result3:
for record in table.records:
total_count += record.get_value()
print(f"24小时内总数据量: {total_count}")
else:
print("✅ 成功找到刚写入的数据")
client.close()
except Exception as e:
print(f"❌ 操作失败: {e}")
import traceback
traceback.print_exc()
def main():
print("数据写入调试工具")
print("=" * 50)
debug_write_and_read()
if __name__ == "__main__":
main()