Auto-Guardian-Core / scripts /generate_report.py
AbdulElahGwaith's picture
Upload folder using huggingface_hub
7270c96 verified
#!/usr/bin/env python3
# سكريبت إنشاء تقارير الأمان
import json
import os
from datetime import datetime
def load_json_file(filepath):
"""تحميل ملف JSON"""
if os.path.exists(filepath):
with open(filepath, 'r', encoding='utf-8') as f:
return json.load(f)
return None
def generate_markdown_report(data):
"""إنشاء تقرير Markdown"""
if not data:
return None
summary = data.get('summary', {})
findings = data.get('findings', [])
metadata = data.get('metadata', {})
# تصنيف المشاكل حسب الشدة
critical = [f for f in findings if f.get('severity') == 'CRITICAL']
high = [f for f in findings if f.get('severity') == 'HIGH']
medium = [f for f in findings if f.get('severity') == 'MEDIUM']
low = [f for f in findings if f.get('severity') == 'LOW']
report = f"""# تقرير الأمان - Auto-Guardian
## معلومات التقرير
- **تاريخ الفحص:** {metadata.get('timestamp', 'غير متوفر')}
- **الالتزام:** {metadata.get('git', {}).get('commit_sha', 'غير متوفر')}
- **الفرع:** {metadata.get('git', {}).get('branch', 'غير متوفر')}
- **إصدار الأداة:** {metadata.get('version', '1.0.0')}
---
## ملخص النتائج
| المقياس | القيمة |
|---------|--------|
| **نتيجة الأمان** | {summary.get('security_score', 0)}/100 |
| **التقدير** | {summary.get('grade', '-')} |
| **إجمالي المشاكل** | {summary.get('total_issues', 0)} |
| **ملفات مفحوصة** | {summary.get('files_scanned', 0)} |
| **مشاكل حرجة** | {len(critical)} |
| **مشاكل عالية** | {len(high)} |
| **مشاكل متوسطة** | {len(medium)} |
| **مشاكل منخفضة** | {len(low)} |
---
## المشاكل الحرجة ({len(critical)})
"""
if critical:
for i, finding in enumerate(critical, 1):
report += f"""### {i}. {finding.get('rule_name', finding.get('rule_id', 'غير معروف'))}
- **الملف:** `{finding.get('file', 'غير معروف')}:{finding.get('line', 0)}`
- **الأداة:** {finding.get('tool_name', finding.get('tool', 'غير معروف'))}
- **الوصف:** {finding.get('message', finding.get('description', 'غير متوفر'))}
- **مستوى الثقة:** {finding.get('confidence', 'غير معروف')}
- **اللغة:** {finding.get('language', 'غير معروفة')}
"""
else:
report += "لا توجد مشاكل حرجة! ممتاز! 🎉\n\n"
report += f"""---
## المشاكل العالية ({len(high)})
"""
if high:
for i, finding in enumerate(high, 1):
report += f"""### {i}. {finding.get('rule_name', finding.get('rule_id', 'غير معروف'))}
- **الملف:** `{finding.get('file', 'غير معروف')}:{finding.get('line', 0)}`
- **الأداة:** {finding.get('tool_name', finding.get('tool', 'غير معروف'))}
- **الوصف:** {finding.get('message', finding.get('description', 'غير متوفر'))}
"""
else:
report += "لا توجد مشاكل عالية! 🎉\n\n"
report += f"""---
## التوصيات
"""
# إضافة توصيات بناءً على النتائج
if len(critical) > 0:
report += "1. **أولوية قصوى:** معالجة المشاكل الحرجة المكتشفة فوراً.\n"
if len(high) > 0:
report += "2. **أولوية عالية:** حل المشاكل العالية في أقرب وقت ممكن.\n"
if len(medium) > 0:
report += "3. **أولوية متوسطة:** جدولة حل المشاكل المتوسطة في الدورة القادمة.\n"
if len(low) > 0:
report += "4. **أولوية منخفضة:** يمكن معالجة المشاكل منخفضة عند توفر الوقت.\n"
report += """
---
## اللغات المفحوصة
"""
languages = data.get('languages', {})
for lang in languages.get('detected', []):
lines = languages.get('lines_of_code', {}).get(lang, 0)
tools = languages.get('tools_used', {}).get(lang, {})
report += f"- **{lang}:** {lines:,} سطر من الكود (فحص بـ {tools.get('issues', 0)} مشاكل)\n"
report += f"""
---
## أدوات الفحص المستخدمة
"""
tools_used = languages.get('tools_used', {})
for tool, info in tools_used.items():
report += f"- **{tool}:** {info.get('issues', 0)} مشاكل مكتشفة (الحالة: {info.get('status', 'غير معروف')})\n"
report += f"""
---
*تم إنشاء هذا التقرير تلقائياً بواسطة Auto-Guardian في {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}*
"""
return report
def main():
"""الدالة الرئيسية"""
print("=" * 50)
print("Auto-Guardian: إنشاء تقرير الأمان")
print("=" * 50)
# تحميل بيانات الفحص
data = load_json_file('scan_results.json')
if not data:
print("❌ لم يتم العثور على بيانات الفحص!")
print(" يرجى تشغيل aggregate_results.py أولاً")
return
# إنشاء التقرير
report = generate_markdown_report(data)
if report:
# حفظ التقرير
output_file = 'reports/security_report.md'
os.makedirs('reports', exist_ok=True)
with open(output_file, 'w', encoding='utf-8') as f:
f.write(report)
print(f"✅ تم إنشاء التقرير بنجاح!")
print(f" الملف: {output_file}")
print("=" * 50)
else:
print("❌ فشل في إنشاء التقرير")
if __name__ == "__main__":
main()