📋 Changelog
Storico completo delle modifiche alla piattaforma Cutting Edges DWG Processing
Versione 3.3.0 BUGFIX
26 Gennaio 2026
🐛 Bug Fix Critici
- BUG 1 - Race Condition DWG/INI (CRITICO)
- Problema: FileWatcher elaborava i DWG con l'INI sbagliato perché il file veniva salvato in JobsCut prima che l'INI corretto fosse deployato
- Soluzione: I DWG ora vanno in
C:/JobsStaging/, il queue_processor deploya l'INI e POI sposta il DWG in JobsCut
- Questo garantisce che FileWatcher usi sempre la configurazione corretta
- BUG 2 - Confronto filename case-sensitive
- Problema:
getJobByFilename() usava confronto case-sensitive, ma Windows è case-insensitive
- Soluzione: Aggiunto fallback con
strcasecmp()
- BUG 3 - Over-matching in checkResult
- Problema: Il fallback "basename_match" poteva trovare file sbagliati (es. cercando "disegno_em.dwg" trovava "disegno_vecchio_em.dwg")
- Soluzione: Rimosso fallback troppo generico, si usa solo match esatto o case-insensitive
- BUG 4 - Notifica email in check-only mode
- Problema:
notifyServiceDown() veniva chiamata anche quando si eseguiva solo check
- Soluzione: Notifica spostata dentro il blocco
if (!$checkOnly)
📁 File Modificati
upload.php: v3.3 - DWG salvati in staging invece di JobsCut
queue_processor.php: v1.1 - Sposta DWG da staging a JobsCut, fix over-matching
job_queue.php: v1.1 - Confronto filename case-insensitive
auto_recovery.php: v1.1 - Notifica solo in modalità recovery
📁 Directory Create
C:/JobsStaging/: Directory staging per DWG in attesa di elaborazione
⏰ Scheduled Tasks Installati
- CuttingEdges_QueueProcessor (ogni minuto): Elabora i job in coda, sposta DWG da staging a JobsCut
- CuttingEdges_AutoRecovery (ogni 5 minuti): Monitora processi FprCad bloccati, riavvia FileWatcher se fermo
- CuttingEdges_Cleanup (ogni ora): Pulisce file orfani, lock file scaduti e job vecchi
⚠️ Flusso Elaborazione Aggiornato
- Upload → DWG va in JobsStaging (non più JobsCut!)
- Queue Processor → Deploya INI → STRIPPERCONFIG.ini
- Queue Processor → Sposta DWG da Staging → JobsCut
- FileWatcher → Rileva DWG, usa INI corretto, lancia FprCad
- FprCad → Elabora, output in JobsOUT
- Queue Processor → Rileva output, marca job completato
Versione 3.2.0 NEW
26 Gennaio 2026
📊 Performance e Monitoring Avanzato
- Sistema Performance Tracking: Nuovo modulo
performance.php
- Compressione Gzip automatica per risposte HTTP
- Headers caching ottimizzati con ETag e 304 Not Modified
- Metriche automatiche: tempo risposta, memoria usata, peak memory
- Rotazione giornaliera file metriche in formato JSONL
- Statistiche aggregate per data con totale richieste, tempi medi/max
- SimpleCache: Sistema caching in memoria e su file
- Cache get/set con TTL configurabile (default 5 minuti)
- Metodo
remember() per cache-aside pattern
- Pulizia automatica entry scadute
- Persistenza su file per cache cross-request
🖥️ Dashboard Monitoring Real-Time
- Nuovo pannello admin:
admin/monitoring.php
- Statistiche job in tempo reale: pending, processing, completed, failed
- Success rate con indicatore visivo colorato
- Monitoraggio spazio disco per JobsCut, JobsOUT, JobsQueue
- Stato processi: FileWatcher.exe, FprCad.exe
- Sistema alert per job falliti e processi bloccati
- Grafici storici: Chart.js per visualizzazione trend
- Job completati ultimi 7 giorni
- Tempi medi di elaborazione
- Refresh automatico ogni 30 secondi
- API endpoints:
?api=status - Stato generale sistema
?api=metrics - Metriche performance
?api=jobs - Lista job recenti
?api=history - Dati storici per grafici
?api=alerts - Alert attivi
📁 File Creati
performance.php: v1.0 - NUOVO - Performance tracking e caching
admin/monitoring.php: v1.0 - NUOVO - Dashboard monitoring real-time
C:/Logs/performance/: Directory metriche giornaliere
C:/Logs/cache/: Directory file cache
📁 File Modificati
upload.php: v3.2 - Integrazione performance tracking
download.php: v2.3 - Integrazione performance tracking
check_result.php: v2.3 - Integrazione performance tracking
job_status.php: v1.1 - Integrazione performance tracking
🔗 Accesso Dashboard
La dashboard di monitoring è accessibile da: /admin/monitoring.php
Versione 3.1.0 BUGFIX
26 Gennaio 2026
🔧 Fix Critici da Analisi Log
- Retry per File Lock: Nuovo modulo
file_utils.php con operazioni file con retry automatico
md5FileWithRetry() - calcolo hash con retry se file bloccato
unlinkWithRetry() - eliminazione con retry ed exponential backoff
scheduleDelayedDelete() - programma eliminazione ritardata per file bloccati
processScheduledDeletes() - processa eliminazioni programmate
- Validazione Suffisso: Rileva e avvisa se il nome file contiene un suffisso diverso dall'opzione selezionata
- Es: carica "file_ef.dwg" ma seleziona "Estrattore maschio" → Warning
- Warning visibile sia nel frontend che nei log
- Pulizia Tracking Stale: I file di tracking bloccati in "active" per più di 24 ore vengono spostati in "failed"
📧 Sistema Notifiche Email
- Nuovo modulo
notifications.php
- Notifica job falliti
- Notifica processi bloccati (FprCad stuck)
- Notifica servizi non attivi (FileWatcher down)
- Report giornaliero statistiche
- Throttling per evitare spam (max 10/ora, cooldown 5 min)
- Template HTML professionali
📁 File Creati/Modificati
file_utils.php: v1.0 - NUOVO - Operazioni file con retry
notifications.php: v1.0 - NUOVO - Sistema notifiche email
upload.php: v3.1 - Usa FileUtils per md5, aggiunta validazione suffisso
download.php: v2.2 - Usa FileUtils per unlink con retry e eliminazione programmata
auto_recovery.php: v1.1 - Integrazione notifiche email, processa eliminazioni programmate
cleanup_orphans.php: v1.1 - Aggiunta pulizia tracking files stale
cuttingedges.html: v3.1 - Warning visivo per mismatch suffisso
⚙️ Configurazione Email
Per attivare le notifiche email, modificare notifications.php:
Notifications::setAdminEmails(['admin@tuodominio.com']);
Versione 2.7.0 NEW
26 Gennaio 2026
🚀 Sistema di Coda e Auto-Recovery
- Job Queue System: Nuovo sistema di coda lavori per gestire elaborazioni multiple
- Ogni job ha il suo file INI unico - elimina race condition
- Stati: pending, processing, completed, failed, retry
- Retry automatico fino a 3 tentativi per errori temporanei
- Lock file per evitare elaborazioni concorrenti
- Auto-Recovery: Sistema automatico di recupero
- Rileva processi FprCad bloccati (> 10 minuti)
- Termina automaticamente processi stuck
- Riavvia FileWatcher se non attivo
- Pulisce lock files orfani
- Recupera job stuck nella coda
- Queue Processor: Processore coda dedicato
- Modalità daemon per elaborazione continua
- Modalità singola esecuzione per scheduled task
- Copia INI job → STRIPPERCONFIG.ini solo al momento dell'elaborazione
📊 API e Monitoraggio
- job_status.php: Nuovo endpoint per stato job
- Query per job_id o filename
- Posizione in coda, tempo trascorso, errori
- Modalità debug per info dettagliate
- queue_processor.php?action=status: Statistiche coda in tempo reale
- auto_recovery.php?action=check: Check senza azioni correttive
🔧 Scheduled Tasks
- install_scheduled_tasks.bat: Script per installare task Windows
- CuttingEdges_QueueProcessor - ogni minuto
- CuttingEdges_AutoRecovery - ogni 5 minuti
- CuttingEdges_Cleanup - ogni ora
📁 File Creati
job_queue.php: v1.0 - Classe JobQueue per gestione coda
queue_processor.php: v1.0 - Processore coda lavori
auto_recovery.php: v1.0 - Sistema auto-recovery
job_status.php: v1.0 - API stato job
install_scheduled_tasks.bat: Script installazione task
C:/JobsQueue/: Directory per dati coda
📁 File Modificati
process_monitor.php: v1.1 - Aggiunti metodi per auto-recovery (getFprCadProcesses, killProcess, getServiceStatus, etc.)
upload.php: v3.0 - Integrazione Job Queue, ogni upload crea un job in coda
cuttingedges.html: v3.0 - Usa job_status.php per polling, mostra posizione in coda e stato retry
🔄 Flusso Elaborazione Aggiornato
- Upload → DWG salvato in JobsCut + Job creato in coda con INI univoco
- Queue Processor (scheduled) → Prende job, copia INI → STRIPPERCONFIG.ini
- FileWatcher → Rileva DWG, lancia FprCad
- FprCad → Elabora con STRIPPERCONFIG.ini, output in JobsOUT
- Queue Processor → Rileva output, marca job completato
- Frontend → Polling job_status.php, abilita download
Versione 2.6.0 BUGFIX
26 Gennaio 2026
🐛 Bug Fix Critici (Problemi segnalati da Michela)
- Case-sensitivity nei suffissi: Corretto bug critico in
check_result.php dove il confronto dei suffissi era case-sensitive
- Prima:
substr(...) === $suffix (case-sensitive)
- Ora:
strcasecmp(...) === 0 (case-insensitive)
- Questo risolveva il problema di file non trovati quando case non corrispondeva
- Ricerca file case-insensitive: Aggiunto fallback glob per trovare file con case differente sia in
check_result.php che download.php
- Prima cerca match esatto con
file_exists()
- Se non trovato, cerca con glob case-insensitive
- Risolve problema download falliti nonostante file generato
🔍 Diagnostica Avanzata
- Rilevamento file simili:
check_result.php ora rileva e segnala file con nome simile ma case/suffisso diverso
- Rilevamento lock files: Segnala presenza di file
.dwl/.dwl2 che indicano elaborazione bloccata
- Rilevamento file orfani con timestamp: Identifica pattern
filename_TIMESTAMP.dwg che indicano elaborazioni fallite
- Campo diagnostics nella risposta JSON: Informazioni strutturate per debug
🎯 Feedback Utente Migliorato
- Tempo trascorso durante polling: L'utente vede ora il tempo di elaborazione in secondi
- Hint dal server: Messaggi diagnostici dal server mostrati durante attesa
- Stato elaborazione bloccata: Avviso se rilevati lock files
🧹 Utility Pulizia Automatica
- Nuovo file
cleanup_orphans.php: Script per pulizia automatica file orfani
- Rimuove lock files vecchi (> 10 minuti)
- Rimuove file con timestamp nel nome (> 30 minuti)
- Segnala file vuoti/corrotti
- Modalita' report e clean
- Eseguibile via browser o CLI
📁 File Modificati
check_result.php: v2.2 - Fix case-insensitive, diagnostica avanzata
download.php: v2.1 - Fix case-insensitive file search
cuttingedges.html: v2.6 - Feedback polling migliorato con tempo trascorso
cleanup_orphans.php: v1.0 - NUOVO - Pulizia automatica file orfani
Versione 2.5.0
22-23 Gennaio 2026
✨ Nuove Funzionalità
- File INI sempre come STRIPPERCONFIG.ini: Il file INI caricato viene ora salvato SEMPRE con il nome
STRIPPERCONFIG.ini nella cartella C:/JobsINI/
- Opzione Conversione migliorata: Quando attiva, aggiunge automaticamente all'INIZIO del file INI:
- Se Estrattore femmina:
[OPERAZIONE] TIPO=FEMMINA
- Se Estrattore maschio:
[OPERAZIONE] TIPO=MASCHIO
Eventuali sezioni [OPERAZIONE] già presenti nel file originale vengono sostituite.
- Sovrascrittura automatica ad ogni nuovo upload
- Conforme alle specifiche del servizio di elaborazione
- Supporto suffissi multipli: Il sistema ora supporta tutti e 4 i suffissi di output
_ef - Estrattore femmina (opzione 1)
_em - Estrattore maschio (opzione 2)
_gi - Ghigliottina inferiore (opzione 4)
_gs - Ghigliottina superiore (opzione 8)
- Campo expectedSuffix nella risposta: L'API upload.php ora restituisce il suffisso atteso per il file elaborato
🔄 Modifiche Importanti
- UNA SOLA opzione alla volta: Modificata la logica di selezione da checkbox multipli a radio button
- L'utente può ora selezionare solo UNA opzione di elaborazione
- Combinazioni valide ridotte a: 1, 2, 4, 8 (singole opzioni)
- Rimossa la possibilità di combinazioni multiple
- check_result.php v2.0: Supporto parametro
suffix per cercare il file con il suffisso corretto
- Retrocompatibile: se suffix non specificato, usa
_ef come default
- Logging aggiornato con campo
expected_suffix
🎨 Interfaccia Utente
- Radio button: I checkbox sono stati sostituiti con radio button in
cuttingedges.html
- Testo aggiornato: "Seleziona UNA opzione di elaborazione" invece di "Opzioni di elaborazione"
- Istruzioni aggiornate: Rimosso riferimento fisso a "_ef", ora indica "suffisso in base all'opzione scelta"
🔧 Backend
upload.php v2.5: Salvataggio INI come STRIPPERCONFIG.ini, validazione singola opzione, campo expectedSuffix, opzione Conversione con [OPERAZIONE] TIPO=X
check_result.php v2.0: Supporto parametro suffix per tutti i tipi di output
cuttingedges.html: Radio button, passaggio suffix a check_result.php
📁 File Modificati
upload.php: v2.5 - STRIPPERCONFIG.ini, singola opzione, expectedSuffix, Conversione
check_result.php: v2.0 - Parametro suffix per _ef/_em/_gi/_gs
cuttingedges.html: Radio button, traduzioni aggiornate
changelog.php: Aggiunta v2.5
🧪 Test Effettuati
- Upload con opzione 1 (Estrattore femmina) → STRIPPERCONFIG.ini con USERI5=1, suffisso _ef ✅
- Upload con opzione 2 (Estrattore maschio) → STRIPPERCONFIG.ini con USERI5=2, suffisso _em ✅
- Sovrascrittura STRIPPERCONFIG.ini ad ogni upload ✅
- check_result.php con tutti i suffissi ✅
- Conversione con femmina → [OPERAZIONE] TIPO=FEMMINA all'inizio del file ✅
- Conversione con maschio → [OPERAZIONE] TIPO=MASCHIO all'inizio del file ✅
Versione 2.4.0
23 Dicembre 2025
✨ Nuove Funzionalità
- Sistema di Logging Avanzato: Implementato sistema di logging centralizzato
- Nuovo file
logger.php con classe Logger
- 5 livelli di log: DEBUG, INFO, WARNING, ERROR, CRITICAL
- Log separati per categoria (upload, check, download, errori PHP)
- Rotazione automatica giornaliera dei log
- Cattura automatica errori PHP e eccezioni non gestite
- Informazioni dettagliate: IP client, User-Agent, timestamp, contesto JSON
- Supporto Modalità Legacy: Compatibilità retroattiva con interfaccia SCT
- Supporto parametro
file per upload solo DWG
- Modalità automatica basata sui parametri ricevuti
- index.html ora funziona correttamente con upload.php
- Documentazione Tecnica Completa: Nuovo file DOCUMENTAZIONE.md
- API Reference completa
- Guida configurazione directory e permessi
- Sezione troubleshooting
- Documentazione sistema di logging
🐛 Correzioni Bug
- Directory C:/JobsINI mancante: Creata directory mancante che causava errori upload
- Directory C:/Logs mancante: Creata directory per i log
- Permessi IIS: Configurati correttamente i permessi per IIS_IUSRS
- Compatibilità index.html: Risolto bug parametro
file vs dwgFile
🔧 Backend
upload.php v2.4: Supporto dual-mode (legacy + completo)
check_result.php v1.1: Integrazione logging
download.php v1.1: Integrazione logging
logger.php v1.0: Nuovo sistema di logging centralizzato
📁 File Modificati/Aggiunti
logger.php: NUOVO - Sistema di logging centralizzato
upload.php: Aggiornato a v2.4 con supporto legacy e logging
check_result.php: Aggiornato a v1.1 con logging
download.php: Aggiornato a v1.1 con logging
DOCUMENTAZIONE.md: NUOVO - Documentazione tecnica completa
changelog.php: Aggiornato con v2.4
📊 Log Files
C:/Logs/all_YYYY-MM-DD.log: Tutti i log
C:/Logs/upload_YYYY-MM-DD.log: Solo upload
C:/Logs/check_YYYY-MM-DD.log: Solo controlli stato
C:/Logs/download_YYYY-MM-DD.log: Solo download
C:/Logs/errors_YYYY-MM-DD.log: Solo errori critici
Versione 2.3.0
25 Novembre 2025
✨ Nuove Funzionalità
- Modalità CONVERSIONE: Aggiunta opzione per gestire file con formato speciale
- Nuovo checkbox "CONVERSIONE" nell'interfaccia utente
- Feedback visivo con spunta verde quando attivato
- Quando attivato, il file INI viene generato con formato alternativo:
- Sezione:
[USERI5] invece di [OPERAZIONI]
- Parametri:
OPERAZIONE=X e CONVERSIONE=yes
🎨 Interfaccia Utente
- cuttingedges.html: Checkbox CONVERSIONE attivo e funzionante
- index.html (SCT): Checkbox CONVERSIONE disabilitato con badge BETA
- Design distintivo con sfondo arancione gradient per evidenziare la nuova funzionalità
🔧 Backend
- Gestione parametro
conversione in upload.php
- Generazione dinamica del contenuto INI basata sul flag conversione
- Logging aggiornato per tracciare l'uso della modalità conversione
📁 File Modificati
cuttingedges.html: Aggiunto checkbox CONVERSIONE con feedback visivo
index.html: Aggiunto checkbox CONVERSIONE disabilitato (BETA)
upload.php: v2.3 con supporto modalità conversione
Versione 2.2.0 UPDATE
24 Novembre 2025
🔄 Modifiche
- Separazione cartelle DWG e INI: I file DWG e INI vengono ora salvati in cartelle separate
- File DWG: salvati in
C:/JobsCut/
- File INI: salvati in
C:/JobsINI/
- Gestione duplicati aggiornata: Il controllo duplicati verifica entrambe le cartelle e applica il timestamp sincronizzato a entrambi i file
- Logging migliorato: I log ora mostrano i percorsi completi di destinazione per entrambi i file
📁 File Modificati
upload.php: v2.2 con supporto per cartelle separate DWG e INI
Versione 2.1.0 FIX UPDATE
20 Novembre 2025
🐛 Correzioni Bug
- Validazione combinazioni: Aggiunta validazione obbligatoria che richiede la selezione di almeno una opzione di elaborazione
- Validazione lato server: Aggiunto controllo in
upload.php che blocca upload con combinazione = 0
- Messaggi utente: Aggiunti messaggi di errore per "Nessuna opzione selezionata" in italiano e inglese
✨ Miglioramenti
- Migliorata UX con feedback immediato quando l'utente tenta di caricare senza selezionare opzioni
- Validazione più robusta sia lato client che lato server
- Aggiunto link Changelog nel footer di tutte le pagine
- Naming file INI: Il file INI viene salvato con lo stesso nome del file DWG (es:
disegno.dwg → disegno.ini)
- Gestione duplicati sincronizzata: Se uno dei due file esiste già, il timestamp viene aggiunto a entrambi (DWG e INI) in modo sincronizzato
Versione 2.0.0 MAJOR
20 Novembre 2025
🚀 Nuove Funzionalità
- Sistema combinazioni blade: Implementato sistema completo di selezione combinazioni con validazione real-time
- 9 combinazioni valide: 1, 2, 3, 4, 5, 8, 9, 13, 15
- Validazione automatica con messaggi di warning per combinazioni non valide
- Calcolo automatico del valore combinazione (1=Estrattore Femmina, 2=Estrattore Maschio, 4=Ghigliottina Inferiore, 8=Ghigliottina Superiore)
- Upload multiplo DWG + INI: Sistema di caricamento simultaneo di file DWG e INI
- Gestione separata dei due file con validazione indipendente
- Display informazioni dettagliate per entrambi i file (nome e dimensione)
- Validazione MIME type e estensioni (.dwg e .ini)
- Elaborazione automatica file INI: Sistema di modifica intelligente dei file INI
- Lettura contenuto file INI originale
- Aggiunta automatica sezione
[OPERAZIONI] alla fine del file
- Inserimento parametro
USERI5=<numero_combinazione>
- Gestione corretta dei caratteri di fine riga
🔄 Modifiche
- Etichette aggiornate:
- "Ghigliottina femmina" → "Ghigliottina inferiore"
- "Ghigliottina maschio" → "Ghigliottina superiore"
- Upload.php v2.0: Riscrittura completa per supportare doppio upload
- Parametri POST:
dwgFile, iniFile, combination
- Validazione separata DWG e INI
- Limite dimensioni: 1GB per DWG, 10MB per INI
- Logging dettagliato con tracciamento combinazioni
- Traduzioni: Aggiornate tutte le traduzioni IT/EN per le nuove funzionalità
📁 File Modificati
cuttingedges.html: UI completa con checkbox attivi, validazione, upload multiplo
index.html: Etichette aggiornate (funzionalità in BETA, disabilitate)
upload.php: v2.0 con supporto DWG+INI e gestione combinazioni
🔒 Sicurezza
- Mantenute tutte le validazioni di sicurezza esistenti
- Validazione magic bytes per file DWG
- Sanitizzazione nomi file
- Protezione XSS con escaping HTML
- Gestione duplicati con timestamp
Versione 1.5.0
Novembre 2025
🎨 Aggiornamenti UI/UX
- Aggiunto supporto per SCT Informatica branding
- Nuovi loghi e colori aziendali (#226584)
- Layout responsive ottimizzato per mobile
- Lingua switcher IT/EN migliorato
📝 Contenuti
- Aggiornati meta tag SEO
- Footer con informazioni aziendali complete
- Link a Privacy Policy e Cookie Policy
Versione 1.0.0 INITIAL
Ottobre 2025
🎉 Release Iniziale
- Upload file DWG: Sistema di caricamento file con validazione completa
- Validazione 5 livelli: errori PHP, estensione, dimensione (max 1GB), MIME type, magic bytes
- Supporto solo file .dwg
- Sanitizzazione nomi file e gestione duplicati
- Elaborazione automatica: Integrazione con FileWatcher Service
- Monitoraggio cartella
C:/JobsCut/
- Elaborazione tramite AutoCAD Core Console
- Plugin CTECT_edgesCRX.crx per processing
- Output in
C:/JobsOut/ con suffisso _ef
- Download risultati: Sistema di download file elaborati
- Polling ogni 2 secondi (max 5 minuti)
- Chunked reading per file grandi (8KB chunks)
- Headers HTTP corretti per download
- Sistema notifiche: 4 tipi di notifiche (info, success, warning, error)
- Logging: Sistema completo di logging in
C:/Logs/uploads.log
- Sicurezza:
- Content Security Policy headers
- XSS prevention
- File type validation
- Magic bytes verification
- Interfaccia bilingue: Supporto completo italiano/inglese
📚 Documentazione
- README.md completo
- Guide di sicurezza
- API Reference
- Troubleshooting guide
- Deployment checklist