本文目录导读:

我来帮你编写一个Python脚本来统计各模块的同步成功率。
基础版本
假设数据格式为CSV或JSON,这里提供几种常见场景的解决方案:
从CSV文件统计
import pandas as pd
import csv
from collections import defaultdict
def analyze_sync_from_csv(csv_file_path):
"""
从CSV文件统计同步成功率
CSV格式:module, status, timestamp
status: success/failed
"""
# 方法1:使用pandas
try:
df = pd.read_csv(csv_file_path)
return calculate_success_rate(df)
except:
# 方法2:使用csv模块
data = defaultdict(lambda: {'success': 0, 'failed': 0})
with open(csv_file_path, 'r') as file:
reader = csv.DictReader(file)
for row in reader:
module = row.get('module', 'unknown')
status = row.get('status', '').strip().lower()
if status == 'success':
data[module]['success'] += 1
elif status == 'failed':
data[module]['failed'] += 1
return calculate_stats(data)
def calculate_success_rate(data):
"""计算成功率"""
results = {}
if isinstance(data, pd.DataFrame):
# pandas DataFrame处理
for module in data['module'].unique():
module_data = data[data['module'] == module]
total = len(module_data)
success = len(module_data[module_data['status'] == 'success'])
rate = (success / total * 100) if total > 0 else 0
results[module] = {
'total': total,
'success': success,
'failed': total - success,
'success_rate': round(rate, 2)
}
else:
# dict数据
for module, stats in data.items():
total = stats['success'] + stats['failed']
rate = (stats['success'] / total * 100) if total > 0 else 0
results[module] = {
'total': total,
'success': stats['success'],
'failed': stats['failed'],
'success_rate': round(rate, 2)
}
return results
def print_statistics(results):
"""打印统计结果"""
print(f"{'模块名称':<20} {'总数':<8} {'成功':<8} {'失败':<8} {'成功率':<10}")
print("=" * 54)
for module, stats in sorted(results.items()):
print(f"{module:<20} {stats['total']:<8} {stats['success']:<8} "
f"{stats['failed']:<8} {stats['success_rate']:.2f}%")
# 主函数
def main():
# 假设CSV文件路径
csv_file = "sync_logs.csv"
# 模拟数据
sample_data = [
{"module": "user_sync", "status": "success", "timestamp": "2024-01-01 10:00:00"},
{"module": "user_sync", "status": "failed", "timestamp": "2024-01-01 10:01:00"},
{"module": "order_sync", "status": "success", "timestamp": "2024-01-01 10:02:00"},
{"module": "order_sync", "status": "success", "timestamp": "2024-01-01 10:03:00"},
{"module": "inventory_sync", "status": "failed", "timestamp": "2024-01-01 10:04:00"},
]
# 写入示例数据
import json
with open(csv_file, 'w', newline='') as f:
writer = csv.DictWriter(f, fieldnames=['module', 'status', 'timestamp'])
writer.writeheader()
writer.writerows(sample_data)
# 分析数据
results = analyze_sync_from_csv(csv_file)
print_statistics(results)
if __name__ == "__main__":
main()
从JSON日志文件统计
import json
from datetime import datetime, timedelta
def analyze_sync_from_json(json_file_path, time_range=None):
"""
从JSON日志文件统计同步成功率
JSON格式:[{"module": "xxx", "status": "success/failed", "timestamp": "ISO格式时间"}]
time_range: 可选的时间范围,如 timedelta(hours=24)
"""
with open(json_file_path, 'r') as file:
logs = json.load(file)
stats = defaultdict(lambda: {'success': 0, 'failed': 0, 'total': 0})
for log in logs:
# 时间过滤
if time_range:
log_time = datetime.fromisoformat(log.get('timestamp'))
if datetime.now() - log_time > time_range:
continue
module = log.get('module', 'unknown')
status = log.get('status', '').lower()
stats[module]['total'] += 1
if status == 'success':
stats[module]['success'] += 1
else:
stats[module]['failed'] += 1
return calculate_stats(stats)
实时采集统计(从数据库)
import sqlite3
from datetime import datetime
def analyze_sync_from_database(db_path, table_name='sync_logs'):
"""
从SQLite数据库统计同步成功率
数据库表结构:
CREATE TABLE sync_logs (
id INTEGER PRIMARY KEY,
module TEXT,
status TEXT,
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
)
"""
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
# 查询每个模块的统计信息
query = """
SELECT
module,
COUNT(*) as total,
SUM(CASE WHEN status = 'success' THEN 1 ELSE 0 END) as success,
SUM(CASE WHEN status = 'failed' THEN 1 ELSE 0 END) as failed
FROM {}
GROUP BY module
""".format(table_name)
cursor.execute(query)
rows = cursor.fetchall()
results = {}
for row in rows:
module, total, success, failed = row
rate = (success / total * 100) if total > 0 else 0
results[module] = {
'total': total,
'success': success,
'failed': failed,
'success_rate': round(rate, 2)
}
conn.close()
return results
带时间维度的详细分析
from datetime import datetime, timedelta
class SyncStatisticsAnalyzer:
def __init__(self):
self.sync_data = []
def add_sync_record(self, module, status, timestamp=None):
"""添加同步记录"""
record = {
'module': module,
'status': status,
'timestamp': timestamp or datetime.now()
}
self.sync_data.append(record)
def analyze_by_time_period(self, period='day'):
"""按时间段分析成功率"""
period_stats = defaultdict(lambda: defaultdict(lambda: {'success': 0, 'failed': 0}))
for record in self.sync_data:
if period == 'day':
time_key = record['timestamp'].strftime('%Y-%m-%d')
elif period == 'hour':
time_key = record['timestamp'].strftime('%Y-%m-%d %H:00')
elif period == 'month':
time_key = record['timestamp'].strftime('%Y-%m')
module = record['module']
status = record['status']
if status == 'success':
period_stats[time_key][module]['success'] += 1
else:
period_stats[time_key][module]['failed'] += 1
return self._calculate_period_rates(period_stats)
def identify_failure_patterns(self):
"""识别失败模式"""
failures = [r for r in self.sync_data if r['status'] == 'failed']
patterns = defaultdict(int)
for failure in failures:
hour = failure['timestamp'].hour
patterns[f"hour_{hour}"] += 1
return patterns
def generate_report(self):
"""生成统计报告"""
total_stats = self.analyze_by_time_period('day')
failure_patterns = self.identify_failure_patterns()
report = {
'total_records': len(self.sync_data),
'time_period_stats': total_stats,
'failure_patterns': failure_patterns,
'overall_rate': self._calculate_overall_rate()
}
return report
def _calculate_period_rates(self, period_stats):
"""计算各时段成功率"""
rates = {}
for period, modules in period_stats.items():
rates[period] = {}
for module, stats in modules.items():
total = stats['success'] + stats['failed']
rate = (stats['success'] / total * 100) if total > 0 else 0
rates[period][module] = round(rate, 2)
return rates
def _calculate_overall_rate(self):
"""计算总成功率"""
total = len(self.sync_data)
success = len([r for r in self.sync_data if r['status'] == 'success'])
return round((success / total * 100), 2) if total > 0 else 0
使用示例
# 示例:使用SyncStatisticsAnalyzer
analyzer = SyncStatisticsAnalyzer()
# 添加模拟数据
for i in range(100):
import random
module = random.choice(['user', 'order', 'inventory', 'payment'])
status = 'success' if random.random() > 0.2 else 'failed'
timestamp = datetime.now() - timedelta(hours=random.randint(0, 48))
analyzer.add_sync_record(module, status, timestamp)
# 生成报告
report = analyzer.generate_report()
print(json.dumps(report, indent=2, default=str))
# 获取各模块成功率
module_rates = {}
for period_stats in report['time_period_stats'].values():
for module, rate in period_stats.items():
if module not in module_rates:
module_rates[module] = []
module_rates[module].append(rate)
# 计算平均成功率
for module, rates in module_rates.items():
avg_rate = sum(rates) / len(rates)
print(f"{module} 平均成功率: {avg_rate:.2f}%")
关键功能说明
- 数据来源灵活:支持CSV、JSON、数据库等多种数据源
- 时间维度分析:可按小时、天、月统计
- 失败模式识别:分析失败的时间规律
- 报告生成:自动生成统计报告
根据你的具体需求选择合适的方法,如果需要处理实时数据流,可以添加异步处理逻辑。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播