סקריפטים שימושיים

תיקיית scripts/ מכילה כלים חד-פעמיים ותהליכי תחזוקה. לפני ההרצה ודאו שסביבת ה-DB היא סביבת ניסוי/פיתוח ושיש גיבוי עדכני.

scripts/cleanup_repo_tags.py

  • מנקה תגיות repo:* כפולות בקולקציית code_snippets וממזג אותן לתג בודד עדכני.

  • אופציונלית: --clear-index מוחק את כל תגיות ה-repo:* עבור קבצים בשם index.html (מונע רעש מהייצוא האוטומטי).

  • מבצע backfill לשדות is_favorite ו-favorited_at במסמכים שאין בהם ערך.

דוגמת הרצה:

python scripts/cleanup_repo_tags.py --user-id 123456 --apply

משתני סביבה: MONGODB_URL (חובה), DATABASE_NAME (ברירת מחדל code_keeper_bot).

scripts/dev_seed.py

  • זורע סניפטים מתוך SNIPPETS.md אל ספריית הסניפטים (idempotent).

  • בודק שה-DB מקומי כדי למנוע טעויות; ניתן לעקוף עם --force או ALLOW_SEED_NON_LOCAL=1.

  • משייך סניפטים למשתמש המוגדר בקובץ (user_id=0) ומסמן אותם כמאושרים.

דוגמת הרצה:

# עבודה מול DB מקומי
MONGODB_URL="mongodb://localhost:27017/code_keeper_bot" python scripts/dev_seed.py

scripts/import_snippets_from_markdown.py

  • מייבא סניפטים מקובץ או URL (כולל GitHub/Gist) באמצעות ניתוח Markdown.

  • ניתן לבצע --dry-run כדי לראות כמה סניפטים ייווצרו ללא כתיבה.

  • ברירת המחדל מאשרת אוטומטית את הסניפטים החדשים; ניתן לבטל עם --no-approve.

דוגמת הרצה:

scripts/import_snippets_from_markdown.py --source docs/new-snippets.md --user-id 42 --username "Ops Bot"

scripts/migrate_workspace_collections.py

  • מייצר אוסף ”שולחן עבודה“ לכל משתמש שחסר לו אחד כזה (idempotent).

  • נשען על CollectionsManager ומייבא get_db בזמן ריצה כדי למנוע תלות מעגלית.

  • מדפיס סיכום בסיום (כמה משתמשים נבדקו וכמה אוספים נוצרו).

scripts/run_log_aggregator.py

  • מפעיל את monitoring.log_analyzer.LogEventAggregator על stdin ומנתח לוגים בזמן אמת.

  • צורך קובצי חתימות וקונפיגורציית התראות: ERROR_SIGNATURES_PATH (ברירת מחדל config/error_signatures.yml) ו-ALERTS_GROUPING_CONFIG (ברירת מחדל config/alerts.yml).

  • תומך בטעינה מחודשת מחזורית של חתימות דרך LOG_AGG_RELOAD_SECONDS ובמצב debug שמדפיס התאמות עם LOG_AGG_ECHO=1.

שימוש אופייני:

tail -F logs/app.log | LOG_AGG_ECHO=1 python scripts/run_log_aggregator.py

scripts/start_webapp.sh

  • מעטפת ל-Gunicorn עבור webapp/ עם הפקת ASSET_VERSION אוטומטית והפעלת warmup best-effort ל-/healthz.

  • מכבד PORT (ברירת מחדל 5000), WEBAPP_WSGI_APP ופרמטרי warmup (WEBAPP_ENABLE_WARMUP / WEBAPP_WARMUP_URL / WEBAPP_WARMUP_MAX_ATTEMPTS / WEBAPP_WARMUP_DELAY_SECONDS).

  • ברירת המחדל היא worker יחיד עם gevent; ניתן לשלוט ב-WEB_CONCURRENCY/WEBAPP_GUNICORN_WORKERS, WEBAPP_GUNICORN_WORKER_CLASS, WEBAPP_GUNICORN_WORKER_CONNECTIONS (ל-gevent) ו-WEBAPP_GUNICORN_THREADS (ל-gthread).

  • משמש להפעלה מקומית או ב-Render/Heroku כאשר אין Supervisor חיצוני.

scripts/start_with_worker.sh

  • מפעיל את הבוט Python (python main.py) ובמידת הצורך גם Worker מבוסס Node לטיפול ב-Web Push.

  • קורא קובץ .env.worker (לא מנוהל ב-git) כדי לטעון מפתחות VAPID פרטיים רק לתהליך ה-Worker.

  • מגדיר PUSH_DELIVERY_URL מקומי אם ה-Worker רץ על אותה מכונה וממתין ל-healthcheck קצר כדי למנוע race conditions.

scripts/run_all.sh

  • מריץ שני תהליכים באותו קונטיינר: ה-WebApp (Gunicorn דרך scripts/start_webapp.sh) וגם שירות AI Explain (AioHTTP דרך python -m services.webserver).

  • מגדיר ברירת מחדל ל-OBS_AI_EXPLAIN_URL ל-http://127.0.0.1:<internal_port>/api/ai/explain כאשר המשתנה לא הוגדר, כדי שהדשבורד יפנה פנימה.

  • אמינות: אם אחד מהתהליכים נסגר/נופל, הסקריפט עוצר גם את השני ויוצא עם קוד שגיאה (כדי שהקונטיינר לא ימשיך “חצי עובד”).

משתני סביבה שימושיים:

  • OBS_AI_EXPLAIN_INTERNAL_PORT (ברירת מחדל: 11000)

  • OBS_AI_EXPLAIN_INTERNAL_HOST (ברירת מחדל: 127.0.0.1)

  • OBS_AI_EXPLAIN_RUN_LOCAL_SERVICE (ברירת מחדל: true)

  • WEBAPP_START_SCRIPT (ברירת מחדל: scripts/start_webapp.sh)