Browse Source

docs: Complete comprehensive legacy feature analysis

- Added detailed analysis section with 11 subsections
- WebView mobile app interface
- Video proxy for social media
- Config format evolution (v1 hardcoded → v2 DB-driven)
- Complete WiFi data processing pipeline (4 steps)
- Complete BLE data processing pipeline
- File storage system (7 upload directories)
- VPN infrastructure with monitoring
- REST API endpoints for iBeacon
- Debug/testing features
- Data import/export systems
- Excel export system (PHPExcel)
- Full database schemas (MySQL + ClickHouse)
- X5 Retail Group integration

Total: 1408 lines documenting ALL legacy features
root 1 month ago
parent
commit
54e6ae2809
1 changed files with 563 additions and 7 deletions
  1. 563 7
      LEGACY_FEATURES.md

+ 563 - 7
LEGACY_FEATURES.md

@@ -843,10 +843,566 @@ GET /beacon/get-vpn.php?mac=ac:84:c6:42:17:90
 6. RSSI-based геолокация (близко/далеко)
 
 ### Инфраструктура:
-1. MySQL для конфигов и WiFi данных
-2. ClickHouse для BLE событий (phones2, blex5)
-3. Redis (упоминался, не видел использования)
-4. OpenVPN сервер
-5. Nginx reverse proxy
-6. PHP 7.x backend
-7. jQuery + DataTables + jEditable frontend
+1. **MySQL** - конфиги устройств, WiFi данные, пользователи
+   - Таблицы: `users`, `configs`, `clients`, `user_devices`
+2. **ClickHouse** (2 инстанса):
+   - Порт 8123 → таблица `phones2` (мобильные приложения)
+   - Порт 8124 → таблица `blex5` (BLE радары), `clients2` (WiFi дубликаты)
+3. **OpenVPN сервер** - туннели для удаленного доступа к радарам
+4. **Nginx** - reverse proxy для всех сервисов
+5. **PHP 7.x** - backend для всех эндпоинтов
+6. **jQuery + DataTables + jEditable** - фронтенд клиентской панели
+
+---
+
+## Дополнительный функционал (детальный анализ)
+
+### 1. Мобильное приложение - WebView интерфейс
+
+**Файл:** `webview.php`
+
+**Назначение:** Тестовая страница для WebView в мобильных приложениях
+
+**JavaScript Bridge:**
+```javascript
+mobile.setBootFlag()    // Установить флаг первого запуска
+mobile.getId()          // Получить IMEI/Device ID
+```
+
+**Use case:**
+- Гибридное приложение (нативный код + WebView)
+- Взаимодействие между JS и Android/iOS
+- Передача Device ID с устройства
+
+---
+
+### 2. Видео-прокси для соцсетей
+
+**Файл:** `getmp4.php`
+
+**Функционал:**
+- Проксирование видео с Instagram/социальных сетей
+- Поддержка byte ranges (streaming)
+- Частичная загрузка (HTTP 206 Partial Content)
+- User-Agent spoofing
+- Опциональный proxy для обхода блокировок
+
+**Параметр:** `?video=https://instagram.com/...video.mp4`
+
+**Use case:**
+- Воспроизведение видео из соцсетей в мобильном приложении
+- Обход CORS restrictions
+- Обход geo-блокировок
+
+---
+
+### 3. Конфигурация устройств - эволюция форматов
+
+#### Формат v1 (хардкод switch-case)
+
+**Файл:** `ib-config.php`
+
+**Формат ответа:**
+```
+MAC;wifi_flag;bt_flag;bt_addr;wifi_addr;
+```
+
+**Пример:**
+```
+d8:0d:17:5e:14:de;0;1;http://192.168.200.12/gw.php;http://my-beacon.ru/wifi.php;
+```
+
+**Проблема:** Хардкод для каждого устройства в switch-case
+
+---
+
+#### Формат v2 (БД configs)
+
+**Файл:** `getfile_v2.php`
+
+**Формат ответа:** key=value (plain text)
+```
+wf_client_ssid=Office_WiFi
+wf_client_psk=password123
+ovpn_flag=1
+ovpn_addr=https://beacon.e-bash.ru/get-vpn.php?mac=
+wf_flag=1
+wf_addr=https://beacon.e-bash.ru/wifi_receiver.php
+bt_flag=1
+bt_addr=https://beacon.e-bash.ru/newfilebeacon.php
+fw_flag=0
+fw_addr=https://beacon.e-bash.ru/fw_update.php?mac=
+reboot_flag=0
+ip=192.168.5.244
+```
+
+**Преимущество:** Гибкая настройка через БД
+
+---
+
+### 4. WiFi Data Processing Pipeline
+
+#### Шаг 1: Прием данных от радара
+
+**Endpoint:** `POST /beacon/wifi_receiver.php`
+
+**Формат входных данных:**
+```
+MAC радара
+timestamp1 -75dBm SA:source_mac1 "SSID_name1"
+timestamp2 -68dBm SA:source_mac2 "SSID_name2"
+...
+```
+
+**Пример:**
+```
+ac:84:c6:42:17:90
+1565183706 -75dBm SA:d8:0d:17:5e:07:94 "Home_WiFi"
+1565183710 -68dBm SA:ac:15:a2:3f:ee:26 "Office_WiFi"
+```
+
+#### Шаг 2: Парсинг и валидация
+
+1. **Разбор построчно:**
+   - Первая строка = MAC радара
+   - Остальные = детекции
+
+2. **Парсинг детекции:**
+   - `timestamp` - Unix timestamp
+   - `rssi` - уровень сигнала (dBm)
+   - `SA:source` - Source Address (MAC телефона)
+   - `ssid` - название сети
+
+3. **Фильтрация:**
+   - Проверка валидности MAC радара
+   - Фильтр locally administered MAC (второй символ: 2,3,6,7,a,b,e,f)
+   - Очистка SSID от спецсимволов
+
+**Логика фильтра LA bit:**
+```php
+$bb = $source[1];  // Второй символ MAC
+if ($bb=='2' || $bb=='3' || $bb=='6' || $bb=='7' ||
+    $bb=='a' || $bb=='b' || $bb=='e' || $bb=='f') {
+    // Пропустить - это рандомизированный MAC
+} else {
+    // Сохранить - это реальный MAC
+}
+```
+
+**Назначение:** iOS/Android рандомизируют MAC при сканировании WiFi для приватности
+
+#### Шаг 3: Сохранение данных (dual write)
+
+**a) MySQL → таблица `clients`:**
+```sql
+INSERT INTO clients (dev, ssid, source, rssi, time)
+VALUES ('ac:84:c6:42:17:90', 'Home_WiFi', 'd8:0d:17:5e:07:94', '-75dBm', '2024-12-27 15:30:45')
+```
+
+**Назначение:** Краткосрочное хранение для клиентской панели (последние 100 записей)
+
+**b) ClickHouse → таблица `clients2`:**
+```sql
+INSERT INTO clients2 (dev, ssid, source, devtime, rssi)
+VALUES (MACStringToNum('ac:84:c6:42:17:90'), 'Home_WiFi', MACStringToNum('d8:0d:17:5e:07:94'), '2024-12-27 15:30:45', -75)
+```
+
+**Назначение:**
+- Долгосрочное хранение (годы данных)
+- Аналитика больших объемов
+- Экспорты в Excel за месяцы
+
+**MACStringToNum:**
+- Конвертирует `ac:84:c6:42:17:90` → число
+- Экономия места в ClickHouse
+- Быстрые сравнения
+
+#### Шаг 4: Обновление Last Seen
+
+```sql
+UPDATE user_devices SET lastevent = '2024-12-27 15:30:45' WHERE mac='ac:84:c6:42:17:90'
+```
+
+**Назначение:**
+- Показать в админке когда радар был активен
+- Мониторинг доступности устройств
+
+---
+
+### 5. BLE Data Processing Pipeline
+
+#### Форматы данных от радаров
+
+**a) Text format (старые устройства):**
+
+Разделитель `;`
+
+**Примеры:**
+```
+ibeacon_android;ac:15:a2:3f:ee:26;FDA50693-A4E2-4FB1-AFCF-C6EB07647825;1565183706;-75;0;1000;10
+my-beacon_acc;ac:15:a2:3f:ee:26;FDA50693-A4E2-4FB1-AFCF-C6EB07647825;1565183706;-65;90;0.5;-0.3;9.8;28
+bracelet_acc;ac:15:a2:3f:ee:26;FDA50693-A4E2-4FB1-AFCF-C6EB07647825;1565183706;-60;0.1;-0.2;9.7
+bracelet_bat;ac:15:a2:3f:ee:26;FDA50693-A4E2-4FB1-AFCF-C6EB07647825;1565183706;-55;85
+```
+
+**Структура:**
+```
+type;radio_mac;bt_mac;timestamp;rssi;field1;field2;...;majorN;minorN
+```
+
+**Endpoint:** `POST /beacon/newfilebeacon.php`
+
+**Таблица:** ClickHouse `blex5` (mac, btmac, major, minor, rssi, bat, x, y, z, time)
+
+---
+
+**b) JSON format (мобильные приложения):**
+
+**Endpoint:** `POST /beacon/ble/get4.php`
+
+**Headers:**
+- `Content-Type: application/json`
+- `Content-Encoding: gzip` (опционально)
+
+**Обработка gzip:**
+```php
+$encoding = $_SERVER['HTTP_CONTENT_ENCODING'];
+if ($encoding === 'gzip') {
+    $data = gzdecode($rawBody);
+} elseif ($encoding === 'deflate') {
+    $data = zlib_decode($rawBody);
+}
+```
+
+**Таблица:** ClickHouse `phones2`
+
+---
+
+### 6. File Storage System
+
+#### Uploads директории:
+
+| Директория | Содержимое | Формат | Назначение |
+|------------|-----------|--------|-----------|
+| `uploads/` | WiFi данные | `.tar.gz`, `.wdata.gz` | Архив WiFi детекций |
+| `uploads2/` | WiFi данные (старые) | `.tar.gz` | Исторические данные |
+| `uploadsbeacon/` | BLE данные | `.tar.gz`, `.bdata.gz` | Архив BLE событий |
+| `uploadsbeacon2/` | BLE данные (версия 2) | `.bdata.gz` | |
+| `uploadsbeacon4/` | BLE данные (версия 4) | `.bdata.gz` | |
+| `uploadsbeacon49999/` | BLE данные (тест) | `.bdata.gz` | Тестовые данные |
+| `uploadsbeacon5/` | BLE данные (текущая) | `.bdata.gz` | Актуальная версия |
+
+**Схема работы:**
+
+1. **Радар создает локальный файл:**
+   - WiFi: `2024-12-27_15-30.wdata`
+   - BLE: `1703686200.bdata` (Unix timestamp)
+
+2. **Сжатие:** `gzip filename`
+
+3. **Упаковка в tar (WiFi):** `tar -czf archive.tar.gz file.wdata`
+
+4. **Upload на сервер:** `POST /beacon/upload.php`
+
+5. **Распаковка и импорт в БД:**
+   - Распаковать tar.gz
+   - Прочитать .wdata / .bdata
+   - Парсинг и INSERT в ClickHouse
+
+**Use case:**
+- Offline режим радара (нет интернета)
+- Batch upload при восстановлении связи
+- Backup исторических данных
+
+---
+
+### 7. VPN Infrastructure
+
+#### VPN Сервер
+
+**Файлы конфигов:**
+```
+/beacon/vpn/      - VPN v1
+/beacon/vpn2/     - VPN v2
+/beacon/vpn3/     - VPN v3 (текущий)
+/beacon/vpn4/     - VPN v4 (production)
+/beacon/vpn5/     - VPN v5
+/beacon/vpn6/     - VPN v6 (latest)
+/beacon/x5vpn/    - VPN для X5 проекта
+```
+
+**Пример конфига:** `1c:3b:f3:41:a2:be.ovpn`
+- Имя файла = MAC радара
+- Уникальный .ovpn для каждого устройства
+
+#### Endpoint для получения VPN
+
+**Файлы:**
+- `get-vpn.php` - основной
+- `get-vpn2.php` - версия 2
+- `get-vpn4.php` - версия 4
+- `get-vpn-x5.php` - для X5 проекта
+- `work_get-vpn.php` - рабочая версия
+
+**Запрос:** `GET /beacon/get-vpn.php?mac=ac:84:c6:42:17:90`
+
+**Ответ:** `.ovpn` файл (OpenVPN config)
+
+**Содержимое .ovpn:**
+```
+client
+dev tun
+proto udp
+remote beacon.e-bash.ru 1194
+ca ca.crt
+cert client_ac-84-c6-42-17-90.crt
+key client_ac-84-c6-42-17-90.key
+...
+```
+
+#### VPN Мониторинг
+
+**Файлы:**
+- `scanvpn.php` - сканер VPN для обычных радаров
+- `scanx5.php` - сканер VPN для X5 проекта
+
+**Функционал:**
+- Список подключенных радаров
+- VPN IP адреса (10.42.x.x)
+- Время подключения
+- Статус (online/offline)
+
+**Use case:**
+- Админ видит какие радары в VPN
+- Может SSH на 10.42.61.115
+- Отладка устройства удаленно
+
+---
+
+### 8. REST API для iBeacon
+
+**Endpoint:** `ib-get-rest.php`
+
+**Формат:** REST API для получения BLE данных
+
+**Назначение:** Альтернативный API для сторонних систем
+
+---
+
+### 9. Debug/Testing Features
+
+#### Debug endpoints:
+
+1. **post_debug.php** - логирование POST запросов
+2. **testfile.php** - тестовый upload файлов
+3. **test.php** - общие тесты
+4. **test3.php** - специфичные тесты
+5. **testt.php** - дополнительные тесты
+6. **tt.php** - быстрые тесты
+
+#### Лог файлы:
+
+- `incoming_raw_data.log` - сырые данные от устройств
+- `incoming_raw_data2.log` - backup лог
+- `clickhouse_bulk.log` - ошибки ClickHouse
+- `foreach_debug.log` - дебаг циклов обработки
+- `step_log.log` - пошаговое логирование
+- `post.log` - POST запросы
+- `count.log` - счетчики
+
+---
+
+### 10. Data Import/Export
+
+#### Import в БД:
+
+**Файл:** `file2db.php`
+
+**Назначение:**
+- Импорт исторических данных
+- Миграция между версиями
+- Восстановление из backup
+
+#### Export MAC addresses:
+
+**Файл:** `macsend.php`
+
+**Назначение:**
+- Генерация файла для Яндекс.Аудитории
+- Генерация файла для myTarget
+- Формат: один MAC на строку
+
+**Процесс:**
+1. Выбор периода (от-до)
+2. Выбор радаров
+3. Выборка DISTINCT MAC
+4. Генерация TXT файла
+5. Download
+
+---
+
+### 11. Excel Export System
+
+**Файл:** `exel/index2.php`
+
+**Библиотека:** PHPExcel-1.8
+
+**Функционал:**
+- Экспорт WiFi детекций в .xlsx
+- Фильтр по устройствам (мультиселект)
+- Фильтр по периоду (datepicker от-до)
+- Форматирование таблицы
+- Headers с названиями колонок
+
+**Колонки в Excel:**
+1. № п/п
+2. Радар (MAC)
+3. Время детекции
+4. MAC устройства
+5. SSID (сеть которую искал)
+6. RSSI (уровень сигнала)
+
+**Use case:**
+- Скачать за месяц все детекции
+- Анализ в Excel (сводные таблицы, графики)
+- Отчеты руководству
+- Аудит данных
+
+---
+
+### 12. Дополнительные фичи
+
+#### a) Календарь с подсветкой активных дат
+
+**Функция:** `my_calendar($fill)`
+
+**Параметр:** Массив дат с данными
+
+**Визуализация:**
+- Даты с данными → желтый фон
+- Текущая дата → жирный шрифт
+- Клик на дату → фильтр данных
+
+#### b) Выбор радара
+
+**Интерфейс:**
+```
+Список WiFi-радаров:
+ac:84:c6:42:17:90  был на связи 2024-12-27 15:30:45
+d8:0d:17:5e:07:94  был на связи 2024-12-27 15:28:12
+```
+
+**SESSION переменные:**
+- `$_SESSION['mac']` - выбранный радар
+- `$_SESSION['login-email']` - текущий пользователь
+- `$_SESSION['login-password']` - пароль (!)
+
+#### c) Множественные версии endpoints
+
+**Причина наличия версий:**
+- Разные версии прошивок радаров
+- Эволюция протоколов
+- Backward compatibility
+- A/B тестирование
+
+**Примеры:**
+- `getfile.php`, `getfile_v2.php`, `getfile_v22.php`
+- `getfilebeacon.php` → v2 → v3 → v5 → v6 → v7
+- `newfilebeacon.php` → newfilebeacon2 → newfilebeacon3
+- `get-vpn.php` → get-vpn2 → get-vpn4
+
+---
+
+## Полный список таблиц БД
+
+### MySQL (база `wifi`)
+
+1. **users** - клиенты системы
+   - login, password (plain text)
+   - device (MAC через `;`)
+   - till (дата оплаты до)
+   - dopinfo, paidTill
+
+2. **configs** - конфигурация радаров
+   - mac (уникальный)
+   - wf_client_ssid, wf_client_psk
+   - ovpn_flag, ovpn_addr
+   - wf_flag, wf_addr
+   - bt_flag, bt_addr
+   - fw_flag, fw_addr
+   - reboot_flag, ip
+   - time (last update)
+
+3. **clients** - WiFi детекции (краткосрочные)
+   - dev (MAC радара)
+   - source (MAC телефона)
+   - ssid (название сети)
+   - rssi (уровень сигнала)
+   - time (timestamp)
+
+4. **user_devices** - связь users ↔ devices
+   - mac (MAC радара)
+   - name (название)
+   - user_id (FK → users)
+   - max1000 (лимит: 0=нет, 1=1000 записей)
+   - segment (для Yandex.Аудитории)
+   - lastevent (последнее событие)
+
+### ClickHouse
+
+#### База: wifi_analytics
+
+1. **clients2** - WiFi детекции (долгосрочные)
+   - dev (UInt64 - MAC радара как число)
+   - source (UInt64 - MAC телефона)
+   - ssid (String)
+   - devtime (DateTime)
+   - rssi (Int8)
+
+#### База: ble_tracking
+
+2. **blex5** - BLE события от радаров
+   - mac (UInt64 - MAC радара)
+   - btmac (String - BT MAC устройства)
+   - major (UInt16)
+   - minor (UInt16)
+   - rssi (Int8)
+   - bat (UInt8 - батарея)
+   - x, y, z (Float32 - акселерометр)
+   - time (UInt32 - Unix timestamp)
+
+3. **phones2** - события от мобильных приложений
+   - mac (String - PHONE_UUID)
+   - nfc_id (String)
+   - type (Enum: status, beacon, accel, nfc)
+   - btmac (String - BT устройства)
+   - major, minor (UInt16)
+   - rssi (Int8)
+   - btuid (String - beacon UUID)
+   - lat, lon, alt, hdop (Float64 - GPS)
+   - perm (String - разрешения)
+   - bat (UInt8)
+   - x, y, z (Float32 - акселерометр)
+   - acc_temp (Float32)
+   - acc_bat (UInt8)
+   - provider (String - GPS provider)
+   - power_perm (String)
+   - time (UInt32)
+
+---
+
+## Специфичные проекты внутри Legacy
+
+### X5 Retail Group Integration
+
+**Файлы:**
+- `get-vpn-x5.php`
+- `scanx5.php`
+- `x5vpn/` (директория)
+
+**Специфика:**
+- Отдельная VPN сеть для X5
+- Специальные конфиги
+- Изолированный мониторинг
+
+**Назначение:** Крупный ритейлер - торговые сети X5 (Пятёрочка, Перекрёсток)