כלי עזר למפתחים
עמוד זה מרכז שני כלים ייעודיים שנמצאים תחת tools/ ונועדו לסייע באיתור צווארי בקבוק במאגר ובסדר הקוד. לפני השימוש ודאו שהקבצים אינם מתועדים במקום אחר כדי למנוע כפילות.
tools/analyze_queries.py
מטרה
הפעלת MongoDB profiler לפרק זמן קצר כדי לאסוף שאילתות איטיות (לפי
--min-ms).הפקת מדדים על שימוש באינדקסים באמצעות
collStats.קבלת
explain()עבור שאילתות טיפוסיות במאגר.
דרישות
משתני סביבה:
MONGODB_URLו-DATABASE_NAME(ברירת מחדלcode_keeper_bot).התקנת
motorבסביבת העבודה.הרשאות להפעלת profiler על האינדקס שבו אתם משתמשים.
דוגמת הרצה
export MONGODB_URL="mongodb://localhost:27017"
export DATABASE_NAME="code_keeper_bot"
python tools/analyze_queries.py --duration 60 --min-ms 120
פלט אופייני
Slow Queries– רשימה ממוינת לפיmillisעם פירוט פעולה, namespace ופילטר.Index Usage– ספירת אינדקסים לפיcollStatsכדי לאתר אוספים ללא אינדקס מתאים.Explain common queries– זמן ביצוע משוער עבור שאילתות נפוצות בקולקציות הליבה.
טיפים
הפעילו את הכלי בסביבת staging/נתונים מקומיים בלבד והחזירו את רמת ה-profiler ל-
0בסיום (הסקריפט עושה זאת אוטומטית).לשאילתות ייעודיות אפשר לשנות את samples בסוף הקובץ כדי לקבל
explainאחר.ניתן להריץ במצב shadow בעת ניתוח production על-ידי יצוא הנתונים מקבצי profile ושימוש במכונה מקומית.
tools/dup_scan.py
מטרה
איתור קבצים זהים (sha1/hash) בתוך עץ פרויקט כדי למנוע כפילויות או קוד מודבק.
שימוש במודול
duplicate_detectorשסורק ברמת תוכן ולא רק בשם הקובץ.
דוגמת הרצה
# חיפוש כפילויות בקבצי Python גדולים מ-5 שורות
python tools/dup_scan.py --path . --include "*.py" --min-lines 5
# הרצת JSON עבור אינטגרציה עם CI
python tools/dup_scan.py --path src --include "*.py" --json > dup-report.json
פרמטרים חשובים
--path– בסיס הסריקה. ברירת המחדל היא הספרייה הנוכחית.--include– ניתן לחזור כמה פעמים כדי למקד לקבצים ספציפיים (למשל--include "*.py").--min-lines– הסף המינימלי לקבצים שייכנסו לחישוב (ברירת מחדל 5).--max-files– מונע סריקות ענקיות בטעות (ברירת מחדל 500 קבצים).--json– פלט מרוכז בפורמט JSON לשימוש בטסטים/CI.
Best Practices
הפעילו את הכלי כחלק מבדיקות refactoring כדי לוודא שלא הועתק קוד בין handlers/services.
במקרה של פלט גדול, התחילו מה-hash עם מספר הקבצים הגבוה ביותר וצרו issue ממוקד לכל קבוצה.
לצמצום false positives הוסיפו
.dup-scan-ignore(אם נדרש) והרחיבו את הפילטרים בקובץ.