Scheduler e sincronizzazione KPN (C2)¶
Panoramica¶
Il sistema AGLANCIO + SWN gestisce la sincronizzazione bidirezionale tra il gestionale Eurocoge (file COBOL indicizzati) e un database PostgreSQL (DB KPN) utilizzato dall'app mobile AreaAPP*.
| Componente | Righe | Funzione |
|---|---|---|
| AGLANCIO | 2.276 | Scheduler multi-istanza: orchestra l'esecuzione dei processi SWN* |
| SWN001-SWN138 | 138 file, 183.857 righe totali | Programmi di sincronizzazione dati verso DB KPN |
AGLANCIO - Gestore schedulazione (v2.10.0)¶
Identificazione¶
- Programma: AGLANCIO (2.276 righe)
- Versione: 2.10.0 (22/04/2026) - vedi Versioni AGLANCIO
- Funzione: Scheduler always-on, multi-istanza (0-99), ciclo continuo di controllo e lancio processi
Interfaccia¶
cobol AGLANCIO istanza_01
Parametro LINKAGE: aglancio-linkage (stringa "istanza_NN") -> estrae w-aglancio-istanza (0-99).
Istanze speciali¶
| Istanza | Destinazione |
|---|---|
| 0 | Processi ad intervalli standard |
| 80-89 | Processi a orari fissi (ignorano standby) |
| 90 | Processi speciali (ID 40000-49999) |
| 91 | Processi speciali (ID 90000-99999) |
| 92 | Database Sw-ing (ignora standby) |
| 99 | Database Frontiera (ignora standby) |
Tabelle database (PostgreSQL)¶
| Tabella | Funzione | Campi chiave |
|---|---|---|
| ARPAZIEN | Config globale azienda | razi-attiva-sincro, razi-standby-inizio/fine, razi-gg-week-stop, razi-aglancio-sleep |
| ARPPROC | Catalogo processi | a-proc-id (PK), a-proc-prg (nome programma), a-proc-modo-sched (T/O), a-proc-tempo-std |
| ARPSTPRC | Stato runtime processi | a-stpr-id + a-stpr-azi (PK), a-stpr-fl-attivazione, a-stpr-stato (A/I), a-stpr-sched-data/ora |
| ARPPRCSCHED | Schedulazioni orarie fisse | a-prcs-id + a-prcs-ora + a-prcs-day-of-week + a-prcs-day-of-month |
| ISTANZESYNC | Stato istanza AGLANCIO | a-ist-istanza, a-ist-keepalive-data/ora, a-ist-processi-totali/attivi |
| AGLSTORICOISTANZA | Storico giornaliero | a-agsi-istanza + a-agsi-data, snapshot statistiche |
Modalita' di scheduling¶
| Modalita' | Campo | Logica |
|---|---|---|
| T (Intervalli) | a-stpr-tempo-attesa (minuti) | Prossima = ultima-esecuzione + N minuti (via COGS62) |
| O (Orari fissi) | ARPPRCSCHED righe multiple | Seleziona la schedulazione piu' vicina; supporta giorno-settimana + giorno-mese |
Condizioni di esecuzione¶
Un processo viene lanciato quando:
1. a-stpr-fl-attivazione = "S" (attivo) oppure a-stpr-forzo-ese = "S" (forzato)
2. a-stpr-processo-disponibile = "S" (programma trovato su disco)
3. a-stpr-istanza = w-aglancio-istanza (istanza corretta)
4. Timing raggiunto (w-tempo-sched <= w-tempo-attuale) oppure forzato
Lancio programmi¶
call a-proc-prg using stringhe util-agprg
on overflow
perform gesdebug-write-critico-es2000
end-call
cancel a-proc-prg
Protocollo util-agprg (parametri passati ai programmi SWN):
| Campo | Descrizione |
|---|---|
| agprg-esporta-tutto | Flag esportazione totale ("S"/"N") |
| agprg-ope | Operazione da eseguire (da a-proc-operazione) |
| agprg-id-processo | ID processo in esecuzione |
Standby¶
- Orario: RAZI-STANDBY-INIZIO / RAZI-STANDBY-FINE (HHMM), con gestione cambio-giorno
- Giornaliero: RAZI-GG-WEEK-STOP (stringa 7 caratteri, "1234567")
- Istanze 80-89, 92, 99 ignorano lo standby
Cache in-memory dei processi¶
Per ridurre il numero di query PostgreSQL durante il polling continuo, AGLANCIO mantiene una cache in-memory dei processi caricati da ARPPROC.
Struttura (working-storage aglancio.cbl ~riga 220):
| Variabile | Tipo | Funzione |
|---|---|---|
w-cache-processi |
array k-max-cache-proc = 1000 elementi |
slot dei processi cachati |
w-cp-pnt |
pic 9(04) |
numero processi attualmente in cache |
w-cp-full |
pic x(01) |
flag "cache piena" ("S"/"N") |
Paragrafi:
x-copia-cache-su-a-stpr- copia uno slot cache ina-stpr-rec/a-proc-rec(sostituiscerdnxt-arpstprcsu RDS)x-aggiorna-cache-dopo-esec- riallinea i campi cache dopo l'esecuzione di un processo (i campi modificati dalla CALL vengono riportati anche in cache)
Flusso modificato: il main loop scorre w-cache-processi invece di iterare ARPPROC su RDS. La cache si popola al primo giro / al riavvio e rimane allineata: ogni esecuzione processo aggiorna lo slot cache corrispondente. Al raggiungimento del limite (w-cp-full = "S") i processi eccedenti continuano a essere letti da RDS fino al riavvio.
Beneficio: riduzione di ~96% delle query verso RDS sul polling continuo.
Flusso principale¶
1. Startup
- Lettura COGCNF per config (cod-azienda, attiva-areaapp, sleep-seconds)
- Connessione PostgreSQL
- Creazione file "alive" (heartbeat)
- Avvio thread keep-alive in background
2. Main loop (ogni N secondi, configurabile 5-3600)
- Lettura ARPAZIEN (config azienda)
- Verifica standby (orario + giorni)
- Se RAZI-SWITCH-ONOFF = "OFF" -> skip
- Scan w-cache-processi (popolata da ARPPROC al primo giro)
- Per ogni processo: verifica scheduling -> CALL se timeout
- dopo CALL: x-aggiorna-cache-dopo-esec
- Update ISTANZESYNC (statistiche)
- Verifica file "spegni" -> shutdown se presente
3. Shutdown
- Stop thread keep-alive
- Chiusura connessioni DB
- Eliminazione file "alive"
File di controllo¶
| File | Funzione |
|---|---|
| alive | Heartbeat (aggiornato dal thread) |
| check | Status marker |
| spegni | Trigger shutdown (creato esternamente) |
| istanze | Elenco istanze attive |
| version | Versione marker |
Chiamate: COGS62 (calcolo date), GESDEBUG (logging), COPIAF (fileinfo), RNEWCONF¶
Programmi SWN - Suite sincronizzazione KPN v2.0¶
Architettura comune¶
Tutti i 138 programmi SWN seguono lo stesso pattern:
1. Init: RNEWCONF + tab-config, GESDEBUG
2. Verifica: cfg-attiva-areaapp, AGLANCIO-ATTIVO
3. Apertura DB PostgreSQL (X-APRI-TABELLE-DB)
4. IF direzione IN (Import, Bi):
C-IMPORTAZIONE: APP -> Gestionale
5. IF direzione IN (Export, Bi):
B-ESPORTAZIONE: Gestionale -> APP
6. Update APSTATOSYN (versione sincro)
7. X-CHIUDI-PROCESSO -> update ARPSTPRC
8. Chiusura DB
Direzione configurabile per processo: T=bidirezionale, E=solo export, I=solo import.
7 programmi principali (dettaglio)¶
SWN037 - Sincronizzazione chiamate/interventi (11.664 righe)¶
- ID Processo: 40
- Funzione: Sync bidirezionale chiamate assistenza e interventi tecnici
- Import: Scarica da mobile interventi eseguiti, tempi, materiali usati
- Export: Invia a tecnici chiamate/interventi aperti per assegnazione
- Gestioni speciali: Notifiche push assegnazione/disassegnazione tecnici, tab matricole in-memory (500 elem), ripristino chiamate "Z" (2000 elem)
- Tabelle: ASNCHTES, ASNINTES -> ARPINTES, ARPINTES2, ARPCHDET, ARPINDET, ARPINMAT
- Chiamate: ASNS24, ASNS78, CRMS08, ASN140, INSANA, COGU06
SWN117 - Sincronizzazione prescrizioni/commesse (5.398 righe)¶
- ID Processo: 117
- Funzione: Sync prescrizioni (ordini di servizio) e commesse verso APP
- Import: LODTABEL/LODPRESC -> ARPPRESCRTES/ARPPRESCRART, commesse con aggregazioni e versioni
- Export: Scan LODCMPREST, avanzamento fasi, tempi/costi -> ARPCHATMSG (risposte chat)
- Gestioni speciali: Clone staging TMPLODCMPREST, follow chat via CURL POST, cleanup DELETE fasi/materiali
- Tabelle: LODTABEL, LODPRESC, LODCMTES, LODCMAGG, LODCMAG2, LODCMASV -> ARPPRESCRTES, ARPLODCMFASI
- Chiamate: COGU10W, COGZA6, COGS94W, CURL
SWN069 - Sincronizzazione configurazioni (4.200 righe)¶
- ID Processo: 69
- Funzione: Sync parametri configurazione applicativa Eurocoge <-> APP
- Logica: Change-flag driven (rcfg-agg-app = "A" -> pending, " " -> synced)
- Parametri gestiti: numerazione web, gestione schede AreaGate, feature flags
- Versioning: APSTATOSYN per invalidamento cache APP
- Tabelle: COGCNF, ARPCONFIG
- Chiamate: RNEWCONF, SWGETS
SWN105 - Sincronizzazione merci/prestazioni (3.798 righe)¶
- ID Processo: 105
- Funzione: Sync catalogo prodotti/servizi (6+ tabelle sorgente)
- Export: COGMERCI, COGMERAP, COGMERA2, COGMERA3 -> ARPMERCI, ARPMERAP, ARPMERRAG
- Import: Aggiornamenti da APP -> gestionale
- Gestioni speciali: Classificazioni CMA a 3 livelli, sconto gruppo, cancellazione logica ARPMERRAG
- Tabelle: COGMERCI, COGMERAP, COGMERA2, COGMERA3, COGBARCO -> ARP*
- Chiamate: COGS62, COGS37B, SWLIVE, SWAFME
SWN052 - Sincronizzazione attivita' CRM (3.738 righe)¶
- ID Processo: 55
- Funzione: Sync bidirezionale attivita'/incarichi CRM con operatori, nominativi, allegati
- Import: APCRMATTIV (con agg_app <> "N") -> CRMATTIV; gestione allegati FTP
- Export: CRMATTIV modificate -> APCRMATTIV con operatori e nominativi collegati
- Gestioni speciali: Normalizzazione UTF-8 -> ASCII, correzione tipo "G" (giro) -> "A", archiviazione remota allegati
- Tabelle: CRMATTIV, CRMATTOP, CRMATTAN, CRMATTAL -> APCRMATTIV, APCRMATTOP, APCRMATTAN, APCRMATTAL
- Chiamate: CRM060, CRMS08, CRMS07, CRMS25, FTP, AZVALIDA
SWN089 - Sincronizzazione ordini clienti (3.192 righe)¶
- ID Processo: 89
- Funzione: Sync bidirezionale ordini di vendita
- Import: ARPORTES -> COGTESOR con numerazione COGS25, ricalcolo prezzi COGS01, consegne COGCONOR
- Export: COGTESOR modificati -> ARPORTES con righe e flexfield
- Gestioni speciali: Gestione destinazioni provvisorie, pre-ordini selettivi per azienda, cancellazione logica via COGEVLOG
- Tabelle: COGTESOR, COGRIGOR, COGRORAG, COGCONOR -> ARPORTES, ARPORDET, ARPORDETFLEX
- Chiamate: COGS25, COGS01, COGMA1, COGO16C, CRMS10
SWN126 - Esportazione documenti vendita (2.873 righe)¶
- ID Processo: 126
- Funzione: Export unidirezionale documenti DDT/bolle -> APP
- Modalita': COMPLETA (incrementale), ESPORTA-KEY (singolo), PULIZIA (cleanup orfani)
- Gestioni speciali: Autorizzazioni magazzino, filtro temporale (N mesi configurabili), cancellazione logica via COGEVLOG
- Tabelle: COGTESBO, COGMOMAG, COGMERCI -> ARPSTVEN, APCOGTESBO, APCOGMOMAG
- Chiamate: DTPRG, COGG31, COGU09
Censimento completo per area funzionale (131 programmi minori)¶
| Area funzionale | Programmi | Righe stimate | Descrizione |
|---|---|---|---|
| Anagrafiche e tabelle | SWN005, 019, 032, 041, 044, 045, 063-065, 079-086, 091, 097, 100, 106, 120-122, 137 | ~25.000 | Agenti, zone, settori, aliquote, pagamenti, tossicita', principi attivi, brand, magazzini, orari |
| Matricole e assistenza | SWN014-018, 026, 039, 040 | ~9.000 | Tipi/marche/modelli/componenti matricola, prestazioni default, distinte base |
| CRM e checklist | SWN008, 010, 022-025, 027, 031, 042-043, 048, 072, 075-078, 094 | ~18.000 | Info CRM, schede, pagine, gruppi, checklist, movimenti, fascicoli, festitivita' |
| Contratti | SWN034-036, 068, 087-088, 092 | ~9.000 | Testata/tariffe/matricole contratto, modelli, kit prestazioni |
| Chiamate e interventi | SWN001-004, 006-007, 020-021, 028-030, 033, 049-051, 054-055 | ~17.000 | Descrizioni, priorita', prestazioni, contatti, difetti, soluzioni, controlli, squadre, responsabili, causali, budget |
| Dossier CRM | SWN056-060 | ~6.000 | Testata, collegamento attivita'/nominativi, tipi, stati |
| Commerciale e listini | SWN053, 095-096, 102, 107-109, 111-114, 131 | ~14.000 | Gruppi sconto, scadenzario extracontabile, listini, saldi magazzino, set tipico, backorder, descrizioni lingua |
| Commesse | SWN061, 118-119 | ~3.500 | Righe commessa, testate, sottocommesse |
| Documenti e logistica | SWN013, 071, 098, 127-128, 132 | ~10.000 | Esportazione fatture, import report Jasper, trasferimenti, DDT/documenti, sviluppo articoli |
| Operatori e sistema | SWN009, 011-012, 046-047, 090, 115-116, 123, 125, 129-130, 133, 138 | ~15.000 | Codici merce alternativi, restrizioni operatori, gruppi operatori, giri giornalieri, post-it, dispositivi, fido, rilasci, ordini fornitori |
Utility comuni a tutti gli SWN¶
| Programma | Funzione |
|---|---|
| RNEWCONF | Caricamento configurazione runtime |
| SWGETS | Web sync GET / settings |
| GESSTR | Manipolazione stringhe |
| GESDEBUG | Logging strutturato (S=trace, E=errore, W=warning, I=info) |
| COGU06 | Utility gestore (valute, lingue, lookup) |
| AZVALIDA | Validazione date |
| COGS62 | Calcolo differenze temporali |
Architettura del sistema¶
+--------------------------------------------------------------+
| AGLANCIO |
| Scheduler multi-istanza (0-99) |
| |
| +---------+ +---------+ +----------+ +------------+ |
| | ARPPROC | |ARPSTPRC | |ARPPRCSCHED| |ISTANZESYNC | |
| |Catalogo | | Stato | |Orari fissi| | Istanza | |
| +----+----+ +----+----+ +-----+-----+ +------------+ |
| +--------------+-------------+ |
| v |
| CALL a-proc-prg |
| USING stringhe util-agprg |
+----------------------+---------------------------------------+
|
+-------------+-------------+
v v v
+----------+ +----------+ +----------+
| SWN037 | | SWN105 | | SWN069 | ... (138 processi)
|Chiamate/ | | Merci/ | | Config |
|Interventi| |Prestaz. | | |
+-----+----+ +-----+----+ +-----+----+
| | |
v v v
+-----------------------------------------+
| File COBOL indicizzati |
| (COG*, ASN*, CRM*, LOD*, CAP*, ...) |
+---------------------+-------------------+
| Sync
v
+-----------------------------------------+
| Database PostgreSQL (KPN) |
| (ARP*, AP*, TB*, AW*, RC*, MV*, ...) |
+---------------------+-------------------+
|
v
+-----------------------------------------+
| AreaAPP (mobile/web) |
+-----------------------------------------+
Pattern di sincronizzazione¶
| Pattern | Descrizione | Usato da |
|---|---|---|
| Change-flag | Flag agg-app ("A"=pending, " "=synced) su tabella ARP* |
SWN069 (configurazioni) |
| Timestamp-based | Confronto data/ora ultima sincronizzazione | SWN037, SWN089, SWN105 |
| Event log | COGEVLOG per tracciare cancellazioni | SWN089, SWN126 |
| Clone staging | Copia temporanea per evitare lock | SWN117 (TMPLODCMPREST) |
| Versione sincro | APSTATOSYN con id_sincro incrementale | Tutti |
Convenzioni tabelle¶
| Prefisso | Origine | Descrizione |
|---|---|---|
| ARP* | PostgreSQL | Tabelle "normali" sincronizzate |
| AP* | PostgreSQL | Tabelle "applicative" (composte) |
| TB* | PostgreSQL | Tabelle di lookup |
| AW* | PostgreSQL | Tabelle workflow (squadre) |
| RC* | PostgreSQL | Tabelle raccordo/controllo |
| MV* | PostgreSQL | Tabelle movimenti |
| COG* | COBOL | File indicizzati gestionale |
| ASN* | COBOL | File assistenza/matricole |
| CRM* | COBOL | File CRM |
| LOD* | COBOL | File odontotecnico (prescrizioni) |
| CAP* | COBOL | File cooperative/agenzie |