133 lines
3.6 KiB
Python
133 lines
3.6 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Dev Workflow CLI
|
|
|
|
开发工作流命令行工具,包含 Cross 模式统计报告功能。
|
|
"""
|
|
|
|
import argparse
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
# 添加当前目录到路径
|
|
sys.path.insert(0, str(Path(__file__).parent))
|
|
|
|
from stats import record_event, get_stats, format_stats_report
|
|
|
|
|
|
def cmd_stats(args):
|
|
"""显示统计报告"""
|
|
stats = get_stats()
|
|
report = format_stats_report(stats)
|
|
print(report)
|
|
|
|
|
|
def cmd_record_event(args):
|
|
"""记录一个事件"""
|
|
# 构建 metadata
|
|
metadata = {}
|
|
if args.metadata:
|
|
for item in args.metadata:
|
|
if "=" in item:
|
|
key, value = item.split("=", 1)
|
|
metadata[key] = value
|
|
|
|
success = record_event(
|
|
event_type=args.type,
|
|
mode=args.mode,
|
|
metadata=metadata if metadata else None,
|
|
status=args.status
|
|
)
|
|
|
|
if success:
|
|
print(f"✅ 事件记录成功: type={args.type}, mode={args.mode}, status={args.status}")
|
|
else:
|
|
print(f"❌ 事件记录失败")
|
|
sys.exit(1)
|
|
|
|
|
|
def cmd_clear_stats(args):
|
|
"""清除统计数据(谨慎使用)"""
|
|
from stats import STATS_FILE
|
|
import os
|
|
|
|
if STATS_FILE.exists():
|
|
if args.force or input("确认清除所有统计数据? [y/N]: ").lower() == "y":
|
|
os.remove(STATS_FILE)
|
|
print("✅ 统计数据已清除")
|
|
else:
|
|
print("操作已取消")
|
|
else:
|
|
print("统计数据文件不存在")
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(
|
|
description="Dev Workflow - 开发工作流工具",
|
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
epilog="""
|
|
示例:
|
|
# 查看统计报告
|
|
python3 dev_workflow.py stats
|
|
|
|
# 记录一个 Cross 模式辩论事件
|
|
python3 dev_workflow.py record-event --type debate --mode cross
|
|
|
|
# 记录一个失败的事件(带元数据)
|
|
python3 dev_workflow.py record-event --type review --mode normal --status failed --metadata pr_id=123
|
|
|
|
# 清除统计数据
|
|
python3 dev_workflow.py clear-stats --force
|
|
"""
|
|
)
|
|
|
|
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", "-t",
|
|
required=True,
|
|
choices=["debate", "review", "audit"],
|
|
help="事件类型: debate(辩论), review(评审), audit(审计)"
|
|
)
|
|
record_parser.add_argument(
|
|
"--mode", "-m",
|
|
required=True,
|
|
choices=["cross", "normal"],
|
|
help="运行模式: cross 或 normal"
|
|
)
|
|
record_parser.add_argument(
|
|
"--status", "-s",
|
|
default="success",
|
|
choices=["success", "failed"],
|
|
help="事件状态 (默认: success)"
|
|
)
|
|
record_parser.add_argument(
|
|
"--metadata",
|
|
nargs="*",
|
|
help="元数据,格式: key=value key2=value2"
|
|
)
|
|
record_parser.set_defaults(func=cmd_record_event)
|
|
|
|
# clear-stats 命令
|
|
clear_parser = subparsers.add_parser("clear-stats", help="清除统计数据")
|
|
clear_parser.add_argument("--force", "-f", action="store_true", help="强制清除,不询问")
|
|
clear_parser.set_defaults(func=cmd_clear_stats)
|
|
|
|
args = parser.parse_args()
|
|
|
|
if args.command is None:
|
|
parser.print_help()
|
|
sys.exit(0)
|
|
|
|
args.func(args)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|