Sistema reattivo di analisi eventi in tempo reale basato su Spring WebFlux, MongoDB e Redis.
Event Analyzer è un'applicazione Spring Boot reattiva progettata per la raccolta, l'elaborazione e l'analisi in tempo reale di eventi provenienti da diverse fonti. Utilizza MongoDB come storage principale e Redis per il caching, garantendo alta performance e scalabilità.
- Architettura reattiva - Utilizzo di WebFlux e Reactive MongoDB/Redis per un'elaborazione non bloccante
- Storage efficiente - MongoDB per la persistenza dei dati con indici ottimizzati
- Caching avanzato - Redis per migliorare le performance delle query frequenti
- Analisi in tempo reale - Aggregazioni e metriche calcolate periodicamente
- API RESTful - Endpoints per l'inserimento e la consultazione degli eventi
- Sicurezza - Autenticazione e autorizzazione integrate
- Spring Boot 3.2.x
- Spring WebFlux
- Spring Data MongoDB Reactive
- Spring Data Redis Reactive
- Spring Security
- MongoDB
- Redis
- TestContainers (per i test di integrazione)
- Java 17
- JDK 17 o superiore
- MongoDB 6.0+
- Redis (opzionale, ma consigliato)
- Maven 3.6+
# Installazione di MongoDB (Windows)
# Avvio del servizio MongoDB
mongod --dbpath="C:\data\db"
# Installazione di Redis (Windows)
# Avvio del servizio Redis
redis-server
- Clona il repository
git clone https://github.com/tuoutente/event-analyzer.git
cd event-analyzer
-
Configura le proprietà dell'applicazione in
src/main/resources/application.yml
-
Compila il progetto
mvn clean package
- Esegui l'applicazione
java -jar target/event-analyzer-0.0.1-SNAPSHOT.jar
src/main/java/com/analyzer/event_analyzer/
├── EventAnalyzerApplication.java
├── config/
│ ├── MongoConfig.java
│ ├── MongoIndexConfig.java
│ ├── RedisConfig.java
│ └── SecurityConfig.java
├── controller/
│ ├── EventController.java
│ └── AuthController.java
├── model/
│ ├── Event.java
│ └── EventAnalytics.java
├── repository/
│ ├── EventRepository.java
│ └── EventAnalyticsRepository.java
├── security/
│ └── JwtService.java
└── service/
├── EventService.java
├── AnalyticsService.java
├── EventAggregationService.java
└── CacheService.java
POST /api/events
- Crea un nuovo eventoGET /api/events/recent?type={type}&limit={limit}
- Ottieni eventi recenti per tipoGET /api/events/anomalies?threshold={threshold}
- Ottieni eventi anomaliGET /api/analytics/{eventType}?hours={hours}
- Ottieni analisi per tipo di eventoPOST /api/auth/login
- Autenticazione (se si utilizza JWT)
curl -X POST http://localhost:8080/api/events \
-H "Content-Type: application/json" \
-H "Authorization: Basic dXNlcjpwYXNzd29yZA==" \
-d '{
"type": "user_login",
"source": "web_app",
"userId": "user123",
"payload": {
"browser": "Chrome",
"ip": "192.168.1.100",
"device": "desktop"
}
}'
- Monitoraggio applicazioni: Tracciamento di eventi come login, logout, azioni utente
- Analisi IoT: Elaborazione dati provenienti da sensori e dispositivi
- Business Intelligence: Raccolta metriche per analisi di vendite o performance
- Sicurezza: Identificazione di eventi anomali o potenziali minacce
MIT License
Le pull request sono benvenute. Per modifiche importanti, apri prima un issue per discutere cosa vorresti cambiare.
Progetto sviluppato per il corso di Sistemi Distribuiti, Università XXX.