כלי עזר למפתחים

עמוד זה מרכז שני כלים ייעודיים שנמצאים תחת 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 (אם נדרש) והרחיבו את הפילטרים בקובץ.