Files
mapo-core/MP.IOC
2026-06-09 19:26:39 +02:00
..
2024-11-04 08:58:51 +01:00
2026-06-09 19:26:39 +02:00
2023-02-14 17:51:55 +01:00
2023-02-14 17:16:51 +01:00
2026-06-09 19:26:39 +02:00
2026-04-10 12:34:09 +02:00
2026-06-09 19:26:39 +02:00
2023-04-05 09:32:09 +02:00
2023-04-04 19:36:47 +02:00

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.StackExchangeRedis
  • ZiggyCreatures.FusionCache
  • ZiggyCreatures.FusionCache.Backplane.StackExchangeRedis
  • ZiggyCreatures.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)

  1. Fase 1 — Anti-Pattern Completata
  2. Fase 2 — FusionCache Completata (18 metodi migrati)
  3. Fase 3 — Repository IoC — Scomporre MpIocController (1480 righe, 82 metodi) in 7-10 repository specialistici
  4. Fase 4 — Scomposizione MpDataService — Il monolite da 3516 righe suddiviso in servizi tematici
  5. 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)