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:
@@ -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! 🚀
|
||||
Reference in New Issue
Block a user