MP.IOC
MAPO IOC: WebApi rest per la gestione delle chiamate dagli applicativi remoti sul campo (IOB-PI su Raspberry Pi e IOB-WIN su PC Windows) che si occupano di comunicare con le varie macchine di processo i dati da trasmettere al MES.
È la nuova implementazione del modulo IO (il precedente era fatto in .NET Framework 4.7.2) su cui si sta dirigendo lo sviluppo della soluzione MES MAPO.
Integra raccolta di informazioni riguardo ai compiti svolti e questi sono ottimizzati per l'impiego di cache e ottimizzazioni varie su ogni strato del progetto.
Build: ✅ 0 errori, 12 warnings
Sezioni Principali
- Api IOB (
api/IOB) — endpoint principale per comunicazioni da campo (52 metodi) - Benchmark Redis (
api/Bench) — tool di test per debugging Redis - Api Ricette (
api/Recipe) — recupero ricette per PODL - Dashboard Blazor — interfaccia web interattiva
Architettura
Livello Controller (MP.IOC/Controllers/)
| Controller | Routing | Methods | Descrizione |
|---|---|---|---|
IOBController |
api/IOB |
52 | Endpoint principale per IOB-PI/IOB-WIN |
BenchController |
api/Bench |
10 | Test/benchmark Redis |
RecipeController |
api/Recipe |
2 | API ricette (JSON) |
RecipeArchiveController |
api/RecipeArchive |
2 | API archive ricette (file) |
Livello Dati
| Componente | Tipologia | Descrizione |
|---|---|---|
MpDataService |
Singleton | Service di accesso dati principale (~3516 righe) |
MpIocController |
Singleton | 82 metodi EFCore nel progetto MP.Data |
Redis |
2 connessioni | redisConn, redisConnAdmin per dati IOB |
MongoDB |
Via MpMongoController |
Storage ricette |
Livello DbContext
| DbContext | ConnStr | Uso |
|---|---|---|
MoonProContext |
MP.Data |
Tabelle anagrafiche, ODL, produzione, macchine |
MoonPro_UtilsContext |
MP.Utils |
Tabelle utility (VMSFD, MicroStati) |
MoonPro_FluxContext |
MP.Flux |
FluxLog, configurazioni flusso |
Livello DI
Registrato via AddIocDataLayer() in MP.Data/DataServiceCollectionExtensions.cs:
Singleton: IMtcSetupRepository, IMtcSetupService, ProductionRepository, MpIocController, MpDataService, IFusionCacheSerializer, IConnectionMultiplexer, IFusionCache
Scoped: IIocRepository, IStatsAggrRepository, IStatsDetailRepository, IIocService, IStatsAggrService, IStatsDetailService
Livello Infrastruttura
- FusionCache — ✅ L1 Memory + L2 Redis Distributed + Redis Backplane (migrazione giugno 2026)
- MessagePipe — Broadcasting real-time tra servizi
- OpenTelemetry — Tracing configurabile (non abilitato in MP.IOC)
- Swagger — Documentazione API in sviluppo
Refactoring Completati
✅ Fase 1: Anti-Pattern Controllers
Rimossi static IConfiguration _configuration da tutti i 4 controller (IOBController, BenchController, RecipeController, RecipeArchiveController) e rimossa la dead code assignment dai costruttori.
✅ Fase 2: FusionCache + Redis Backplane
Pacchetti aggiunti (MP.IOC.csproj):
Microsoft.Extensions.Caching.StackExchangeRedisZiggyCreatures.FusionCacheZiggyCreatures.FusionCache.Backplane.StackExchangeRedisZiggyCreatures.FusionCache.Serialization.NewtonsoftJson
Configurazione (Program.cs):
- FusionCache attivo con L1 Memory + L2 Redis Distributed + Redis Backplane
- Serializer:
FusionCacheNewtonsoftJsonSerializer - Default Duration: 1 minuto con jitter max 5 secondi
Helper aggiunto (MpDataService.cs):
GetOrFetchAsync<T>()— wrapper FusionCache con ActivitySource tracking e source tagging (MEMORY/REDIS/DB)
18 metodi migrati dal pattern manuale Redis (redisDb.StringGetAsync/StringSetAsync) → FusionCache:
| # | Metodo | Fetch From |
|---|---|---|
| 1 | AnagStatiGetAllAsync |
IocDbController |
| 2 | ArticoliGetLastByMaccAsync |
IocDbController |
| 3 | ConfigGetAllAsync |
IocDbController |
| 4 | DecNumArtGetFiltAsync |
IocDbController |
| 5 | DossierLastByMachAsync |
IocDbController |
| 6 | GetLastOdlAsync |
IocDbController |
| 7 | ListValuesFilt |
IocDbController |
| 8 | Macchine2SlaveGetAllAsync |
IocDbController |
| 9 | MacchineGetFilt |
_productionRepository |
| 10 | MacchineRecipeArchive |
_productionRepository |
| 11 | MseGetAllAsync |
IocDbController (+ forceDb support) |
| 12 | OdlCurrByMaccAsync |
IocDbController |
| 13 | POdlGetByKey |
_productionRepository |
| 14 | POdlGetByMaccArtAsync |
IocDbController |
| 15 | ConfFluxMach |
IocDbController |
| 16 | FluxLogFirstByMachAsync |
IocDbController |
| 17 | FluxLogGetLastByMachAsync |
IocDbController |
✅ Build Verification
| Soluzione | Errori | Warnings | Stato |
|---|---|---|---|
| MP-IOC | 0 | 12 | ✅ |
| MP-SPEC | 0 | vari | ✅ |
| MP-LAND | 0 | 3 | ✅ |
| MP-MON | 0 | vari | ✅ |
Refactoring in Corso (Riferimento)
Piano Generale (Vedi refactor_plan.md)
Fase 1 — Anti-Pattern— ✅ CompletataFase 2 — FusionCache— ✅ Completata (18 metodi migrati)- Fase 3 — Repository IoC — Scomporre
MpIocController(1480 righe, 82 metodi) in 7-10 repository specialistici - Fase 4 — Scomposizione MpDataService — Il monolite da 3516 righe suddiviso in servizi tematici
- Fase 5 — Build & Verifica — Validazione finale
Stato attuale: Fasi 1-2 completate. Build stabile 0 errori.
Prossimi Passi
- Fase 3: Creare repository specialistici per
MpIocController(Vedi refactor_plan.md per il inventario completo) - Metodi atipici: Verificare manualmente 4 metodi con pattern non-standards (
GetCurrOdlAsync,StatoProdMacchinaAsync(private),verificaIdxMacchinaAsync,ListMasterAsync/ListSlaveAsync)