Vai al contenuto

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 in a-stpr-rec / a-proc-rec (sostituisce rdnxt-arpstprc su 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