feat: Implementazione completa sistema schedulazione con intervalli personalizzati

- Aggiunto supporto schedulazione con intervalli flessibili (secondi/minuti/ore/giorni/settimane/mesi)
- Esteso modello ProfileSchedule con campi IntervalValue e IntervalUnit
- Ottimizzato ScheduledJobService per controlli ogni 30s con esecuzione parallela
- Implementata interfaccia UI completa con anteprima real-time in italiano
- Aggiunta migrazione database AddIntervalSchedulingFields
- Implementati metodi calcolo NextExecutionTime per intervalli
- Aggiunta gestione tracking anti-duplicati e cleanup automatico
- Creata documentazione completa (6 file, 2500+ righe)

Modifiche tecniche:
- ProfileSchedule.cs: Nuovi campi e metodi CalculateNextInterval/GetScheduleDescription
- ScheduledJobService.cs: Ridotto check interval a 30s, aggiunto parallel processing
- ProfileScheduleService.cs: Supporto calcolo intervalli in UpdateNextExecutionTimeAsync
- Scheduling.razor: Aggiunta sezione UI per configurazione intervalli
- Scheduling.razor.cs: Implementato GetIntervalPreview() e gestione stato campi
This commit is contained in:
2025-10-02 01:12:39 +02:00
parent b76a6760fb
commit d042863a56
71 changed files with 17860 additions and 144 deletions
+436
View File
@@ -0,0 +1,436 @@
# Guida all'Interfaccia di Schedulazione - Data-Coupler
## 📋 Overview
L'interfaccia di schedulazione di Data-Coupler permette di configurare esecuzioni automatiche dei profili di trasferimento dati con diverse modalità, inclusa la nuova funzionalità di **intervalli personalizzati**.
---
## 🎯 Accesso alla Pagina di Schedulazione
1. Avvia l'applicazione Data-Coupler
2. Nella barra di navigazione, clicca su **"Schedulazione Profili"** (icona orologio)
3. Vedrai la lista delle schedulazioni esistenti o un messaggio per crearne una nuova
---
## Creare una Nuova Schedulazione
### Passo 1: Aprire il Modal di Creazione
Clicca sul pulsante verde **"+ Nuova Schedulazione"** in alto a destra.
### Passo 2: Configurare i Campi Base
#### **Nome Schedulazione** (obbligatorio)
- Inserisci un nome descrittivo
- Esempio: `"Sync Clienti Salesforce"`, `"Import Ordini Ogni 5 Minuti"`
#### **Descrizione** (opzionale)
- Aggiungi note o dettagli aggiuntivi
- Esempio: `"Sincronizzazione automatica clienti da Salesforce a database locale"`
#### **Profilo** (obbligatorio)
- Seleziona dal dropdown il profilo di trasferimento da eseguire
- Verranno mostrati solo i profili attivi
### Passo 3: Scegliere il Tipo di Schedulazione
Seleziona una delle seguenti opzioni:
---
## ⏱️ Tipi di Schedulazione Disponibili
### 1. **Una Volta** (`once`)
Esecuzione singola in una data e ora specifica.
**Configurazione:**
- **Data e Ora di Esecuzione**: Seleziona data e ora usando il picker
- Formato: `GG/MM/AAAA HH:mm`
**Esempio:**
```
Tipo: Una volta
Data e Ora: 15/10/2025 14:30
```
---
### 2. **⭐ Intervallo Personalizzato** (`interval`) - NUOVO!
Esecuzione ripetuta ogni N unità di tempo.
**Configurazione:**
- **Intervallo**: Inserisci un numero (minimo 1)
- **Unità di Tempo**: Seleziona dal dropdown
- **Secondi** - Per test rapidi o requisiti real-time
- **Minuti** - Per sincronizzazioni frequenti
- **Ore** - Per aggiornamenti regolari
- **Giorni** - Per backup giornalieri
- **Settimane** - Per report settimanali
- **Mesi** - Per consolidamenti mensili
**Anteprima in Tempo Reale:**
Una volta configurati intervallo e unità, vedrai un'anteprima che mostra:
```
Esecuzione ogni 5 minuti
```
**Esempi Pratici:**
**Test/Sviluppo:**
```
Intervallo: 30
Unità: Secondi
Anteprima: Esecuzione ogni 30 secondi
```
**Sincronizzazione Frequente:**
```
Intervallo: 5
Unità: Minuti
Anteprima: Esecuzione ogni 5 minuti
```
**Aggiornamento Orario:**
```
Intervallo: 2
Unità: Ore
Anteprima: Esecuzione ogni 2 ore
```
**Backup Giornaliero:**
```
Intervallo: 1
Unità: Giorni
Anteprima: Esecuzione ogni 1 giorno
```
**Report Settimanale:**
```
Intervallo: 1
Unità: Settimane
Anteprima: Esecuzione ogni 1 settimana
```
**Consolidamento Mensile:**
```
Intervallo: 1
Unità: Mesi
Anteprima: Esecuzione ogni 1 mese
```
---
### 3. **Giornaliera** (`daily`)
Esecuzione ogni giorno alla stessa ora.
**Configurazione:**
- **Ora di Esecuzione**: Formato 24 ore (es: `14:30`)
**Esempio:**
```
Tipo: Giornaliera
Ora: 09:00
Risultato: Esegue ogni giorno alle 09:00
```
---
### 4. **Settimanale** (`weekly`)
Esecuzione in un giorno specifico della settimana.
**Configurazione:**
- **Ora di Esecuzione**: Formato 24 ore
- **Giorno della Settimana**: Seleziona dal dropdown
**Esempio:**
```
Tipo: Settimanale
Ora: 10:00
Giorno: Lunedì
Risultato: Esegue ogni Lunedì alle 10:00
```
---
### 5. **Mensile** (`monthly`)
Esecuzione in un giorno specifico del mese.
**Configurazione:**
- **Ora di Esecuzione**: Formato 24 ore
- **Giorno del Mese**: Numero da 1 a 31
**Esempio:**
```
Tipo: Mensile
Ora: 08:00
Giorno: 1
Risultato: Esegue il primo giorno di ogni mese alle 08:00
```
---
## 🎛️ Opzioni Avanzate
### Schedulazione Attiva
- **Checkbox "Schedulazione attiva"**
- Se spuntato: la schedulazione sarà abilitata e verrà eseguita
- Se non spuntato: la schedulazione sarà salvata ma non eseguita
### Override Database (Opzionale)
Se il profilo selezionato lo supporta, puoi sovrascrivere:
- **Database Sorgente**: Per eseguire su un database diverso
- **Database Destinazione**: Per scrivere su un database diverso
---
## 💾 Salvare la Schedulazione
1. Verifica che tutti i campi obbligatori siano compilati
2. Clicca sul pulsante **"💾 Salva"**
3. Vedrai un messaggio di conferma
4. La schedulazione apparirà nella lista principale
---
## 📊 Visualizzazione delle Schedulazioni
### Card Schedulazione
Ogni schedulazione è mostrata in una card con:
**Header:**
- Icona del tipo (🔁 per intervalli, 📅 per altre)
- Nome schedulazione
- Menu dropdown ⋮ per azioni
**Corpo:**
- **Profilo**: Nome del profilo associato
- **Descrizione**: Se presente
- **Tipo**: Descrizione leggibile del tipo di schedulazione
- Esempio per intervalli: `"INTERVALLO: Ogni 5 minuti"`
- **Prossima Esecuzione**: Data e ora della prossima esecuzione prevista
- **Ultima Esecuzione**: Data e ora dell'ultima esecuzione (se presente)
- **Status**: Badge colorato con risultato ultima esecuzione
- 🟢 Verde: Success
- 🔴 Rosso: Failed
- 🔵 Blu: Running
**Bordo Card:**
- 🟢 Verde: Schedulazione attiva
- ⚫ Grigio: Schedulazione disabilitata
---
## ⚙️ Azioni su Schedulazioni Esistenti
### Menu Dropdown (⋮)
**✏️ Modifica**
- Apre il modal di modifica
- Tutti i campi sono precompilati con i valori attuali
- Salva per applicare le modifiche
**▶️ Esegui Ora**
- Esegue immediatamente la schedulazione
- Non modifica la prossima esecuzione programmata
- Utile per test o esecuzioni fuori programma
**🗑️ Elimina**
- Richiede conferma
- Elimina permanentemente la schedulazione
- Non elimina il profilo associato
---
## 🔍 Monitoraggio Esecuzioni
### Pulsante "📜 Storico Esecuzioni"
In alto a destra, clicca per vedere:
- Tutte le esecuzioni passate
- Status (success/failed)
- Numero di record trasferiti
- Durata esecuzione
- Messaggi di errore (se presenti)
---
## 💡 Best Practices per Intervalli
### Ambienti Diversi
**Sviluppo/Test:**
- Usa intervalli brevi (30-60 secondi) per test rapidi
- Ricorda di disabilitare o eliminare dopo i test
**Staging:**
- Intervalli moderati (1-5 minuti)
- Simula il carico di produzione
**Produzione:**
- Intervalli consigliati: minimo 5-10 minuti
- Valuta il carico sul sistema e sulle API
- Monitora le performance
### Considerazioni Performance
**Intervalli Brevi (<1 minuto):**
- ⚠️ Usa solo se necessario
- Aumenta il carico su database e API
- Monitora CPU e memoria
- Considera limitazioni API rate limits
**Intervalli Ottimali (5-15 minuti):**
- ✅ Bilanciamento tra freschezza dati e performance
- ✅ Riduce carico sistema
- ✅ Permette completamento esecuzioni precedenti
**Intervalli Lunghi (>1 ora):**
- ✅ Ideale per grandi dataset
- ✅ Minimo impatto sistema
- ✅ Adatto per backup e consolidamenti
---
## 🎯 Esempi di Configurazione
### Caso d'Uso 1: Sincronizzazione Real-Time Salesforce
```
Nome: Sync Leads Salesforce Real-Time
Profilo: Salesforce to SQL - Leads
Tipo: Intervallo Personalizzato
Intervallo: 2
Unità: Minuti
Schedulazione Attiva: ✅
```
**Risultato**: Sincronizza leads ogni 2 minuti durante l'orario lavorativo.
---
### Caso d'Uso 2: Backup Database Notturno
```
Nome: Backup Database Notte
Profilo: Full Database Backup
Tipo: Giornaliera
Ora: 02:00
Schedulazione Attiva: ✅
```
**Risultato**: Backup completo ogni notte alle 02:00.
---
### Caso d'Uso 3: Report Settimanale
```
Nome: Report Vendite Settimanale
Profilo: Sales Report
Tipo: Settimanale
Ora: 09:00
Giorno: Lunedì
Schedulazione Attiva: ✅
```
**Risultato**: Genera report vendite ogni Lunedì mattina.
---
### Caso d'Uso 4: Test Incrementale
```
Nome: Test Sync Every 30s
Profilo: Test Profile
Tipo: Intervallo Personalizzato
Intervallo: 30
Unità: Secondi
Schedulazione Attiva: ✅
```
**Risultato**: Test con sincronizzazione ogni 30 secondi (ricorda di disabilitare dopo test!).
---
### Caso d'Uso 5: Consolidamento Mensile
```
Nome: Consolidamento Fine Mese
Profilo: Monthly Consolidation
Tipo: Mensile
Ora: 23:00
Giorno: 28
Schedulazione Attiva: ✅
```
**Risultato**: Consolidamento dati il 28 di ogni mese alle 23:00.
---
## 🛠️ Troubleshooting
### Schedulazione Non Si Esegue
**Verifica:**
1. ✅ Schedulazione è attiva (checkbox spuntato)
2. ✅ Profilo associato esiste ed è attivo
3. ✅ NextExecutionTime è impostato (visibile nella card)
4. ✅ Background service è in esecuzione (verifica log applicazione)
### Intervalli Troppo Frequenti
**Sintomi:**
- Alta CPU/Memoria
- Log pieni di esecuzioni
- Timeout o errori API
**Soluzione:**
1. Modifica schedulazione
2. Aumenta intervallo (es: da 30s a 5min)
3. Monitora per 30-60 minuti
### Esecuzioni Saltate
**Causa Possibile:**
- Esecuzione precedente ancora in corso
- Sistema sotto carico
**Soluzione:**
- Il sistema salta automaticamente se già in esecuzione
- Aumenta intervallo se succede spesso
- Verifica durata media esecuzioni nello storico
---
## 📞 Supporto
Per problemi o domande:
1. Controlla i log applicazione
2. Consulta la documentazione tecnica (`ADVANCED_SCHEDULING_SYSTEM.md`)
3. Verifica lo storico esecuzioni per errori specifici
---
## 🔄 Aggiornamenti Futuri
Funzionalità pianificate:
- Dashboard monitoraggio real-time
- Notifiche email su errori
- Pause/Resume schedulazioni
- Dependency chains tra schedulazioni
- Export/import configurazioni
---
**Versione**: 2.0
**Data**: Ottobre 2025
**Compatibile con**: Data-Coupler .NET 9.0
**Autore**: Alessio Dalsanto
---
## 🎉 Conclusione
La nuova interfaccia di schedulazione con intervalli personalizzati offre massima flessibilità per qualsiasi scenario di sincronizzazione dati. Utilizza gli esempi e le best practices per configurare schedulazioni ottimali per il tuo ambiente! 🚀