Skip to content

victorhramos-dev/ais_ai

Repository files navigation

AIS Real-Time Processing System

Sistema de processamento em tempo real de mensagens AIS (Automatic Identification System) para rastreamento de embarcações marítimas no Porto de Santos.

Stack Tecnológico

Camada Tecnologia Versão
Backend Laravel 11.x
PHP PHP 8.2+
Database PostgreSQL 15+
Cache/Queue Redis + ReBloom 7.x
Parser pyais 2.x (Python 3.11+)
LLM Minimax.io API v1
WebSocket Laravel Reverb 1.x
Queue Laravel Horizon 5.x

Arquitetura

┌─────────────┐    ┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│   Antenas   │───▶│  Receiver   │───▶│  Dedup 3L  │───▶│   Parser    │
│  (TCP/UDP)  │    │  Service    │    │  (Redis)   │    │  (Python)   │
└─────────────┘    └─────────────┘    └─────────────┘    └─────────────┘
                                                                │
                                                                ▼
┌─────────────────────────────────────────────────────────────────────────┐
│                      Message Buffer (50 msgs / 2s)                       │
└─────────────────────────────────────────────────────────────────────────┘
                                      │
                                      ▼
┌─────────────────────────────────────────────────────────────────────────┐
│                      PostgreSQL (Batch Insert)                           │
└─────────────────────────────────────────────────────────────────────────┘
                                      │
                    ┌─────────────────┼─────────────────┐
                    ▼                 ▼                 ▼
              ┌──────────┐      ┌──────────┐      ┌──────────┐
              │   API    │      │ Analysis │      │ WebSocket│
              │  REST    │      │  (LLM)   │      │  Events  │
              └──────────┘      └──────────┘      └──────────┘

Requisitos

  • Docker 24+
  • Docker Compose 2.x
  • Make (opcional)

Quick Start

# Clone e setup
git clone <repo-url>
cd ais-system

# Copiar configuração
cp src/.env.example src/.env

# Iniciar containers
docker-compose up -d

# Instalar dependências
docker-compose exec app composer install

# Rodar migrations
docker-compose exec app php artisan migrate --database=ais

# Iniciar receiver AIS
docker-compose exec app php artisan ais:listen

Comandos Principais

# Desenvolvimento
make up                    # Inicia containers
make down                  # Para containers
make logs                  # Ver logs
make shell                 # Acessa shell do container

# Servidor de desenvolvimento
docker-compose exec app php artisan serve --host=0.0.0.0

# Receiver AIS
docker-compose exec app php artisan ais:listen --antenna=1

# Workers
docker-compose exec app php artisan horizon

# Testes
docker-compose exec app php artisan test
docker-compose exec app php artisan test --filter=Dedup
docker-compose exec app php artisan test --testsuite=Integration
docker-compose exec app php artisan test --testsuite=Performance

Configuração

Variáveis de Ambiente (.env)

# Database AIS
AIS_DB_CONNECTION=pgsql
AIS_DB_HOST=pgsql
AIS_DB_PORT=5432
AIS_DB_DATABASE=ais_database
AIS_DB_USERNAME=ais_user
AIS_DB_PASSWORD=ais_secret

# Redis
REDIS_HOST=redis
REDIS_PORT=6379

# Deduplicação
AIS_DEDUP_REDIS_TTL=300
AIS_DEDUP_BLOOM_CAPACITY=1000000
AIS_DEDUP_BLOOM_ERROR_RATE=0.001

# Buffer
AIS_BUFFER_SIZE=50
AIS_BUFFER_TIMEOUT=2

# LLM Minimax
MINIMAX_API_KEY=your-api-key
MINIMAX_GROUP_ID=your-group-id
MINIMAX_MODEL=abab6.5-chat

# Analysis Trigger
AIS_ANALYSIS_INTERVAL=180
AIS_ANALYSIS_BATCH_SIZE=100

API REST

Endpoints

Método Endpoint Descrição
GET /api/ais/messages Lista mensagens AIS
GET /api/ais/messages/{id} Detalhes da mensagem
GET /api/ais/messages/stats Estatísticas
GET /api/ais/vessels Lista embarcações
GET /api/ais/vessels/{mmsi} Detalhes por MMSI
GET /api/ais/vessels/{mmsi}/positions Histórico de posições
GET /api/ais/analysis Lista análises LLM
POST /api/ais/analysis/trigger Trigger manual
GET /api/ais/antennas Lista antenas
POST /api/ais/antennas Cria antena
GET /api/ais/system/health Health check

Filtros Suportados

GET /api/ais/messages?mmsi=123456789&type=1,3&from=2024-01-01&to=2024-01-31&per_page=50
GET /api/ais/vessels?search=CONTAINER&type=70
GET /api/ais/analysis?risk_level=high

WebSocket Events

Canal Evento Descrição
ais.messages MessageBatchInserted Novo batch inserido
ais.analysis AnalysisCompleted Análise LLM concluída
ais.receiver ReceiverStatusChanged Status do receiver

Estrutura do Projeto

src/
├── app/
│   ├── Console/Commands/       # Comandos Artisan
│   ├── Events/AIS/             # Eventos WebSocket
│   ├── Http/
│   │   ├── Controllers/API/AIS/  # Controllers REST
│   │   └── Resources/AIS/        # API Resources
│   ├── Jobs/AIS/               # Jobs assíncronos
│   ├── Models/                 # Eloquent Models
│   ├── Providers/              # Service Providers
│   └── Services/
│       ├── AI/                 # Minimax LLM
│       └── AIS/                # Core AIS services
├── config/
│   ├── ais.php                 # Config AIS
│   └── database.php            # Conexões DB
├── database/migrations/        # Migrations
├── python/
│   ├── ais_parser.py           # Parser Python
│   └── requirements.txt        # Deps Python
├── routes/api.php              # Rotas API
└── tests/
    ├── Unit/                   # Testes unitários
    ├── Feature/                # Testes de feature
    ├── Integration/            # Testes de integração
    └── Performance/            # Testes de carga

Sistema de Deduplicação

Estratégia de 3 camadas para garantir zero duplicatas:

  1. Camada 1 - Redis SET NX: TTL 5 min, O(1)
  2. Camada 2 - Bloom Filter: 1M capacity, 0.1% FPR
  3. Camada 3 - PostgreSQL: UPSERT ON CONFLICT

Métricas de Performance

Métrica Target
Throughput >= 50 msgs/s
Latência E2E < 500ms
Duplicatas 0%
API Response < 100ms (p95)

Documentação

Licença

Proprietary - All rights reserved.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages