/
Dmitry-F
/
cbt_tool
Обзор
Документация
Войти
/
Dmitry-F
/
cbt_tool
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
python-ml-service
bin/audio_audit_pro
228 строк
10 KB
Dmitriy-Filatov
🧹 ФИНАЛЬНАЯ СТЕРИЛИЗАЦИЯ ИНФРАСТРУКТУРЫ
17 мар 2026, 10:59
17 мар 2026, 10:59
d3fec0b
Код
Авторство
О чём код?
#!/bin/bash echo "=========================================" echo "🔊 ПРОФЕССИОНАЛЬНЫЙ АУДИТ АУДИО (v2.0)" echo "=========================================" echo "" # Создаём временную папку REPORT_DIR="/tmp/cbt_audio_pro_$(date +%s)" mkdir -p "$REPORT_DIR" REPORT_FILE="$REPORT_DIR/audio_audit_pro.txt" # ========================================= # 1. ИНФРАСТРУКТУРА И ХРАНЕНИЕ # ========================================= echo "📁 1. ИНФРАСТРУКТУРА ХРАНЕНИЯ" >> "$REPORT_FILE" echo "----------------------------------------" >> "$REPORT_FILE" # Проверка ActiveStorage if rails runner "ActiveStorage::Blob.count" 2>/dev/null; then echo "✅ ActiveStorage установлен и работает" >> "$REPORT_FILE" else echo "❌ ActiveStorage НЕ установлен" >> "$REPORT_FILE" echo " 🔧 Выполни: bin/rails active_storage:install && bin/rails db:migrate" >> "$REPORT_FILE" fi # Проверка миграций ActiveStorage if ls db/migrate/*active_storage* 2>/dev/null; then echo "✅ Миграции ActiveStorage присутствуют" >> "$REPORT_FILE" else echo "❌ НЕТ миграций ActiveStorage" >> "$REPORT_FILE" fi # Проверка Solid Queue (для фоновой обработки) if grep -q "solid_queue" "Gemfile" 2>/dev/null; then echo "✅ Solid Queue в Gemfile (фоновые задачи)" >> "$REPORT_FILE" else echo "⚠️ Solid Queue не найден (добавь gem 'solid_queue')" >> "$REPORT_FILE" fi echo "" >> "$REPORT_FILE" # ========================================= # 2. СИСТЕМНЫЕ УТИЛИТЫ # ========================================= echo "📁 2. СИСТЕМНЫЕ УТИЛИТЫ" >> "$REPORT_FILE" echo "----------------------------------------" >> "$REPORT_FILE" # Проверка FFmpeg (конвертация аудио) if command -v ffmpeg &> /dev/null; then FFMPEG_VERSION=$(ffmpeg -version | head -n1 | cut -d' ' -f3) echo "✅ FFmpeg установлен (версия $FFMPEG_VERSION)" >> "$REPORT_FILE" else echo "❌ FFmpeg НЕ УСТАНОВЛЕН" >> "$REPORT_FILE" echo " 🔧 Установи: brew install ffmpeg (Mac) или apt install ffmpeg (Linux)" >> "$REPORT_FILE" fi # Проверка libvips (для обработки изображений, может пригодиться) if command -v vips &> /dev/null; then echo "✅ libvips установлен" >> "$REPORT_FILE" else echo "⚠️ libvips не найден (опционально, для изображений)" >> "$REPORT_FILE" fi echo "" >> "$REPORT_FILE" # ========================================= # 3. МОДЕЛЬ DIARYENTRY # ========================================= echo "📁 3. МОДЕЛЬ DIARYENTRY" >> "$REPORT_FILE" echo "----------------------------------------" >> "$REPORT_FILE" MODEL_FILE="engines/smer_diary/app/models/smer_diary/diary_entry.rb" if [ -f "$MODEL_FILE" ]; then echo "✅ Модель существует" >> "$REPORT_FILE" # Проверка has_one_attached if grep -q "has_one_attached" "$MODEL_FILE"; then echo "✅ has_one_attached присутствует (можно прикреплять файлы)" >> "$REPORT_FILE" else echo "❌ НЕТ has_one_attached" >> "$REPORT_FILE" echo " 🔧 Добавь: has_one_attached :audio_recording" >> "$REPORT_FILE" fi # Проверка поля для транскрипта if grep -q "audio_transcript" "$MODEL_FILE"; then echo "✅ Поле audio_transcript есть" >> "$REPORT_FILE" else echo "⚠️ НЕТ поля audio_transcript (добавить позже для хранения текста)" >> "$REPORT_FILE" fi else echo "❌ МОДЕЛЬ НЕ НАЙДЕНА" >> "$REPORT_FILE" fi echo "" >> "$REPORT_FILE" # ========================================= # 4. ФОРМА СМЭР # ========================================= echo "📁 4. ФОРМА СМЭР" >> "$REPORT_FILE" echo "----------------------------------------" >> "$REPORT_FILE" FORM_FILE="engines/smer_diary/app/views/smer_diary/entries/_form.html.erb" if [ -f "$FORM_FILE" ]; then echo "✅ Форма существует" >> "$REPORT_FILE" # Проверка наличия data-controller if grep -q "data-controller=\"audio-recorder\"" "$FORM_FILE"; then echo "✅ Stimulus-контроллер audio-recorder подключен" >> "$REPORT_FILE" else echo "❌ ОТСУТСТВУЕТ data-controller=\"audio-recorder\"" >> "$REPORT_FILE" fi # Проверка поля event с target if grep -q "audio_recorder_target=\"input\"" "$FORM_FILE"; then echo "✅ Поле 'event' связано с audio-recorder" >> "$REPORT_FILE" else echo "❌ НЕТ связи поля с audio_recorder_target" >> "$REPORT_FILE" fi # Проверка кнопки микрофона if grep -q "data-action=\".*audio-recorder#start.*audio-recorder#stop\"" "$FORM_FILE"; then echo "✅ Кнопка микрофона с действиями start/stop есть" >> "$REPORT_FILE" else echo "❌ НЕТ кнопки микрофона" >> "$REPORT_FILE" fi # Проверка поля для загрузки файлов if grep -q "file_field.*audio" "$FORM_FILE"; then echo "✅ Поле для загрузки аудиофайлов есть" >> "$REPORT_FILE" else echo "⚠️ НЕТ поля для загрузки файлов (добавить позже)" >> "$REPORT_FILE" fi else echo "❌ ФОРМА НЕ НАЙДЕНА" >> "$REPORT_FILE" fi echo "" >> "$REPORT_FILE" # ========================================= # 5. STIMULUS-КОНТРОЛЛЕР # ========================================= echo "📁 5. STIMULUS-КОНТРОЛЛЕР" >> "$REPORT_FILE" echo "----------------------------------------" >> "$REPORT_FILE" CONTROLLER_FILE="app/javascript/controllers/audio_recorder_controller.js" if [ -f "$CONTROLLER_FILE" ]; then echo "✅ Контроллер существует" >> "$REPORT_FILE" # Проверка Web Speech API if grep -q "SpeechRecognition" "$CONTROLLER_FILE"; then echo "✅ Web Speech API используется" >> "$REPORT_FILE" else echo "❌ НЕТ поддержки Web Speech API" >> "$REPORT_FILE" fi # Проверка Direct Upload (для файлов) if grep -q "DirectUpload" "$CONTROLLER_FILE" || grep -q "@rails/activestorage" "$CONTROLLER_FILE"; then echo "✅ Direct Upload поддерживается (загрузка файлов)" >> "$REPORT_FILE" else echo "⚠️ Direct Upload не реализован (нужно добавить для файлов)" >> "$REPORT_FILE" fi # Проверка визуализации (волна) if grep -q "canvas\|Waveform\|visualizer" "$CONTROLLER_FILE"; then echo "✅ Визуализация звука есть" >> "$REPORT_FILE" else echo "⚠️ НЕТ визуализации (волны) — добавить позже для UX" >> "$REPORT_FILE" fi # Проверка таймера if grep -q "timer\|duration\|timeout" "$CONTROLLER_FILE"; then echo "✅ Таймер записи присутствует" >> "$REPORT_FILE" else echo "⚠️ НЕТ таймера записи — добавить для UX" >> "$REPORT_FILE" fi else echo "❌ КОНТРОЛЛЕР НЕ НАЙДЕН" >> "$REPORT_FILE" fi echo "" >> "$REPORT_FILE" # ========================================= # 6. КОНТРОЛЛЕР И МАРШРУТЫ # ========================================= echo "📁 6. КОНТРОЛЛЕР И МАРШРУТЫ" >> "$REPORT_FILE" echo "----------------------------------------" >> "$REPORT_FILE" # Проверка разрешённых параметров в entries_controller if grep -q "params\.require.*permit.*:audio" "engines/smer_diary/app/controllers/smer_diary/entries_controller.rb" 2>/dev/null; then echo "✅ В контроллере разрешён параметр :audio" >> "$REPORT_FILE" else echo "❌ Параметр :audio НЕ разрешён в strong parameters" >> "$REPORT_FILE" fi # Проверка импорта ActiveStorage в importmap if grep -q "@rails/activestorage" "config/importmap.rb" 2>/dev/null; then echo "✅ @rails/activestorage подключён в importmap" >> "$REPORT_FILE" else echo "⚠️ @rails/activestorage не найден — добавить для Direct Upload" >> "$REPORT_FILE" fi echo "" >> "$REPORT_FILE" # ========================================= # 7. ФИНАЛЬНЫЙ ЧЕК-ЛИСТ # ========================================= echo "📋 7. ФИНАЛЬНЫЙ ЧЕК-ЛИСТ ВНЕДРЕНИЯ" >> "$REPORT_FILE" echo "----------------------------------------" >> "$REPORT_FILE" echo "✅ Этап 1 (База): ActiveStorage + has_one_attached" >> "$REPORT_FILE" echo "✅ Этап 2 (Запись): Web Speech API + микрофон" >> "$REPORT_FILE" echo "🟡 Этап 3 (Загрузка файлов): Direct Upload + file_field" >> "$REPORT_FILE" echo "🟡 Этап 4 (Обработка): Solid Queue + FFmpeg конвертация" >> "$REPORT_FILE" echo "🟡 Этап 5 (Визуализация): Волна + таймер + индикатор громкости" >> "$REPORT_FILE" echo "🔴 Этап 6 (Безопасность): Временные ссылки + шифрование" >> "$REPORT_FILE" # ========================================= # 8. КОПИРОВАНИЕ В БУФЕР # ========================================= cat "$REPORT_FILE" | pbcopy echo "" echo "✅ ГОТОВО! Профессиональный аудит скопирован в буфер (Cmd+V)" echo "📊 КРАТКИЙ ИТОГ:" grep -E "✅|❌|⚠️|🟡|🔴" "$REPORT_FILE" | head -25 echo "" echo "🔍 Полный отчёт в буфере обмена." echo ""