Что делает скрипт и зачем он нужен?
Представленный ниже кусок кода – это «батч‑сканер» статического анализа кода для набора skill (т.е. модулей, функций или микросервисов). Он без вызова LLM проходит по всему корпусу файлов, собирает уязвимости и формирует готовые визуальные отчёты.
Основные шаги процесса
- Инициализация: вывод приветствия и подготовка контейнеров для итогов.
- Сканирование: для каждой
skillвызываетсяscan()без LLM, результат сохраняется в JSON. - Сбор метрик: из результата извлекаются
risk_score,risk_severity, рекомендации, наличие исполняемых скриптов и количество найденных проблем. - Агрегация находок: каждое нарушение сохраняется в таблицу
all_findingsс деталями (правило, уровень, категория, файл, строка, уверенность). - Формирование DataFrame‑ов: два Pandas‑фрейма – сводка по навыкам и детальная таблица находок.
- Вывод в консоль: таблица рисков, количество всех находок, распределение по категориям и уровням.
- Визуализация: три графика (риск‑баллы, распределение по уровню, топ‑категории) сохраняются в PNG‑файл и показываются пользователю.
Как адаптировать под свои проекты
- Определите «skill». Это может быть набор микросервисов, репозиториев или отдельных компонентов.
- Настройте функцию
scan(). Подключите нужный статический анализатор (Bandit, Semgrep, ESLint и т.п.) и укажите формат выводаjson. - Добавьте свои правила. В JSON‑ответе должны быть поля
rule_id,severity,category,message,file,start_line,confidence. - Подгоните шкалу риска. Функция
_normalize_sevуже приводит уровни к «CRITICAL», «HIGH», «MEDIUM», «LOW», но вы можете включить свои префиксы. - Сохраните графики. Путь
WORKDIR / "skillspector_dashboard.png"можно заменить на любую директорию CI‑pipeline.
Типичные ошибки и как их избежать
- Отсутствие полей в JSON. Если ваш анализатор не возвращает, например,
confidence, добавьте безопасный fallback (None). - Неоднородные уровни тяжести. Некоторые инструменты используют
ERRORвместоHIGH. Расширьте_normalize_sev, включив дополнительные сопоставления. - Переполнение консоли. При большом количестве навыков вывод может «залипнуть». Используйте
to_string(index=False, max_rows=20)или сохраняйте CSV‑файлы. - Неправильные цвета графиков. Если добавляются новые уровни, обновите словарь
colors, иначе будет использован синий по умолчанию.






















