f86bb7043c
- stats.py: record_event, get_stats, format_stats_report - dev_workflow.py: stats 和 record-event CLI 命令 - 安全特性: 文件权限 600, 文件锁, 敏感数据过滤 - .gitignore: 排除数据文件
122 lines
3.1 KiB
Python
122 lines
3.1 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Dev Workflow - 开发工作流工具
|
|
提供 Cross-Debate 统计报告等功能
|
|
"""
|
|
|
|
import sys
|
|
import argparse
|
|
from pathlib import Path
|
|
|
|
# 添加当前目录到 Python 路径
|
|
sys.path.insert(0, str(Path(__file__).parent))
|
|
|
|
from stats import record_event, get_stats, format_stats_report
|
|
|
|
|
|
def cmd_stats(args):
|
|
"""查看统计报告"""
|
|
print(format_stats_report())
|
|
return 0
|
|
|
|
|
|
def cmd_record_event(args):
|
|
"""记录事件"""
|
|
try:
|
|
# 构建 metadata
|
|
metadata = {}
|
|
if args.metadata:
|
|
for item in args.metadata:
|
|
if '=' in item:
|
|
key, value = item.split('=', 1)
|
|
metadata[key] = value
|
|
|
|
# 记录事件
|
|
record_event(
|
|
event_type=args.type,
|
|
mode=args.mode,
|
|
metadata=metadata,
|
|
status=args.status
|
|
)
|
|
|
|
print(f"✅ 事件已记录: type={args.type}, mode={args.mode}, status={args.status}")
|
|
return 0
|
|
|
|
except ValueError as e:
|
|
print(f"❌ 错误: {e}", file=sys.stderr)
|
|
return 1
|
|
except Exception as e:
|
|
print(f"❌ 记录事件失败: {e}", file=sys.stderr)
|
|
return 1
|
|
|
|
|
|
def main():
|
|
"""主函数"""
|
|
parser = argparse.ArgumentParser(
|
|
description='Dev Workflow - 开发工作流工具',
|
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
epilog="""
|
|
示例:
|
|
# 查看统计报告
|
|
python3 dev_workflow.py stats
|
|
|
|
# 记录一个 cross 模式的 debate 事件
|
|
python3 dev_workflow.py record-event --type debate --mode cross --status success
|
|
|
|
# 记录带元数据的事件
|
|
python3 dev_workflow.py record-event --type review --mode normal --metadata files=5 issues=2
|
|
"""
|
|
)
|
|
|
|
subparsers = parser.add_subparsers(dest='command', help='可用命令')
|
|
|
|
# stats 命令
|
|
stats_parser = subparsers.add_parser('stats', help='查看统计报告')
|
|
stats_parser.set_defaults(func=cmd_stats)
|
|
|
|
# record-event 命令
|
|
record_parser = subparsers.add_parser('record-event', help='记录事件')
|
|
record_parser.add_argument(
|
|
'--type',
|
|
required=True,
|
|
choices=['debate', 'review', 'audit'],
|
|
help='事件类型 (debate|review|audit)'
|
|
)
|
|
record_parser.add_argument(
|
|
'--mode',
|
|
required=True,
|
|
choices=['cross', 'normal'],
|
|
help='模式 (cross|normal)'
|
|
)
|
|
record_parser.add_argument(
|
|
'--status',
|
|
default='success',
|
|
choices=['success', 'failed'],
|
|
help='事件状态 (success|failed),默认为 success'
|
|
)
|
|
record_parser.add_argument(
|
|
'--metadata',
|
|
nargs='*',
|
|
help='元数据,格式为 key=value(可多个)'
|
|
)
|
|
record_parser.set_defaults(func=cmd_record_event)
|
|
|
|
# 解析参数
|
|
args = parser.parse_args()
|
|
|
|
# 如果没有指定命令,显示帮助
|
|
if not args.command:
|
|
parser.print_help()
|
|
return 0
|
|
|
|
# 执行命令
|
|
if hasattr(args, 'func'):
|
|
return args.func(args)
|
|
else:
|
|
parser.print_help()
|
|
return 0
|
|
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(main())
|