GESSTPRC — Pannello di controllo sincronizzazione AreaGate¶
Identificazione¶
| Campo | Valore |
|---|---|
| Programma | GESSTPRC |
| Righe | 3.613 |
| Versione | 2.10.0 (allineata con AGLANCIO) |
| Tipo | Programma standalone (mmmask.cpy) con interfaccia grafica |
| Struttura UI | Scheletro griglia "MODO A" — due griglie: processi (GRID-DET) e istanze (GRID-IST) |
Funzione¶
GESSTPRC e' il pannello di controllo per la sincronizzazione tra il gestionale Eurocoge e AreaGate/AreaAPP. Permette di:
- Visualizzare lo stato di tutti i processi SWN* e delle istanze AGLANCIO
- Attivare/disattivare la sincronizzazione globale
- Accendere/spegnere istanze AGLANCIO (singole o tutte)
- Forzare l'esecuzione immediata di un processo
- Modificare parametri runtime dei processi (tempo attesa, istanza, direzione, limiti)
- Consultare i log delle procedure
- Richiedere il reload delle istanze
- Monitorare lo stato di salute (keepalive) delle istanze
Architettura dell'interfaccia¶
Due griglie¶
+------------------------------------------------------------------+
| Pannello di controllo sincronizzazione AREAGATE |
+------------------------------------------------------------------+
| [Sincronizzazione attiva: S/N] Sleep: NNNNs Versione: x.x.x |
| Standby: HH:MM - HH:MM Giorni: Lun,Sab,Dom |
+------------------------------------------------------------------+
| GRID-DET: Griglia processi (dettaglio) |
| ID | Nome | Programma | Ist | Attivo | Stato | T.Att | Dir | ...|
|-----|------|-----------|-----|--------|-------|-------|-----|------|
| ... | ... | ... | ... | ... | ... | ... | ... | ... |
+------------------------------------------------------------------+
| GRID-IST: Griglia istanze |
| Ist | Check Data | Check Ora | Stato | #Ass | #Att | Classe |
|------|------------|-----------|-------|------|------|-------------|
| ... | ... | ... | ... | ... | ... | ... |
+------------------------------------------------------------------+
Pulsanti e tasti funzione¶
| Tasto | Funzione | Contesto |
|---|---|---|
| F1 | Refresh / Configurazione | Ricarica dati + refresh keepalive |
| F3 | Conferma | Validazione e salvataggio impostazioni |
| F5 | Esecuzione immediata (GRID-DET) / Reload istanze (GRID-IST) | GRID-DET: lancia il processo selezionato; GRID-IST: ricarica tutte le istanze |
| F6 | Accendi/Spegni AGLANCIO | Crea/rimuove file di controllo |
| F7 | Log / Filtra | GRID-DET: consulta log processo; GRID-IST: filtra processi per istanza |
| Ctrl-S | Salva impostazione (commentato) | Salva filtro predefinito |
| Ctrl-F | Cerca impostazione (commentato) | Carica filtro predefinito |
| Shift-F4 | Amministrazione griglia | GRIDADMN: personalizzazione colonne |
| Shift-F5 | Esporta Excel | Export griglia selezionata |
Flusso principale¶
1. Inizializzazione¶
apri
+-- z-99-init-program (mmmask)
+-- gesdebug-loadconf + gesdebug-apri-principale
+-- Imposta path cartella controllo: ext-arc-dir/controllo/
+-- Imposta nomi file: aglancio-accendi.txt, aglancio-istanze.txt
+-- rd-azi (lettura anagrafica azienda)
+-- open-files
+-- x99-src-cfg (carica 7 parametri da COGCNF via RNEWCONF)
+-- x99-carica-processi-custom (carica processi AGCUSTOM (tabella da 50 elementi, loop carica 15))
+-- Verifica: attiva-areaapp = "S"? aglancio-attivo = "S"?
+-- Costruzione menu contestuali (popup griglia)
+-- Caricamento bitmap custom (4 set: ricerca, varie, labodonto2, variecont)
+-- Creazione pulsanti custom (Salva, Cerca, Refresh, Spegni, Accendi, Reload)
+-- Display maschera + costruisci controlli + prepara griglia
+-- Avvio thread m-thread-contatore (timer refresh)
2. Ciclo principale (a4)¶
a4 (loop)
+-- Inizializza tab-maschera con versione e sleep
+-- Imposta ordinamento predefinito griglie
+-- Carica filtro default (z-imppredf-carica-default)
+-- Verifica connessione DB PostgreSQL
| +-- sql-check-version-arpazien/arpproc/arpstprc (verifica versione schema DB)
+-- Se connessione OK:
| +-- carica-data-ora-check (legge ARPAZIEN, verifica switch ON/OFF)
| +-- carica-processi (popola GRID-DET e GRID-IST)
| +-- x-refresh-last-check (aggiorna keepalive istanze)
| +-- m-test-aglancio-attivo (verifica stato istanze)
+-- Se connessione KO: messaggio e uscita
+-- accept sincro-att (toggle sincronizzazione)
+-- a-leggi-dati-init: verifica processi obbligatori (ID 91, 70)
+-- a-leggi-dati: carica processi
+-- a-grid: gestione interattiva GRID-DET
+-- a-grid-ist: gestione interattiva GRID-IST
3. Accept griglia processi (a-grid-accept)¶
Ciclo con before-time di 100ms (monitoraggio periodico):
- F-TEMPO-SCADUTO: esegue
m-controlla-aglancio(refresh istanze) - F1: rigenera file istanze (
m-crea-fistanze), test AGLANCIO attivo, refresh - F5: esecuzione immediata del processo selezionato
- F6: accendi/spegni tutte le istanze (GRID-DET) o singola istanza (GRID-IST) (con dialogo a 3 stati)
- F7: consulta log processo (LOGPROC1 o GESLPRC)
- Shift-F4: GRIDADMN personalizzazione griglia
- Shift-F5: export Excel
Logica di business¶
Esecuzione immediata processo (F5)¶
Questa e' una delle funzioni piu' critiche: permette di lanciare manualmente un processo SWN dal pannello.
1. Verifica: processo disponibile? (fl-disp = "S")
2. Conferma utente ("Esecuzione immediata processo: confermi?")
3. Disattiva griglia (previene click multipli)
4. Aggiorna ARPSTPRC:
- stato = "I" (in corso)
- forzo-ese = "N" (reset forzatura)
- Salva date esecuzione precedente in prec-data/prec-ora
- Imposta att-data/att-ora = ora corrente
5. Prepara util-agprg:
- agprg-called = "AGPRG-CALLED"
- agprg-fl-manuale = "S" (esecuzione manuale, non schedulata)
- agprg-esporta-tutto = valore dalla griglia
- agprg-ope = operazione del processo
- agprg-id-processo = ID processo
6. CALL tm-r-prg(i) USING stringhe util-agprg ON OVERFLOW ...
7. CANCEL tm-r-prg(i)
8. Calcola durata (COGS62: data/ora fine - data/ora inizio)
9. Libera il processo:
- stato = "A" (in attesa)
- Calcola prossima esecuzione (calcola-prossima-esecuzione)
- Aggiorna statistiche: durata-ultimo, n-cicli-oggi, durata-tot-oggi, durata-media-oggi
10. Refresh riga griglia con dati aggiornati
Accensione/Spegnimento AGLANCIO¶
Il meccanismo e' basato su file di controllo nella cartella ext-arc-dir/controllo/:
Spegnimento (m-spegni-aglancio)¶
Per ogni istanza nella griglia GRID-IST:
1. Cancella eventuale file aglancio-accendi-NN.txt
2. Crea file aglancio-spegni-NN.txt → AGLANCIO lo rileva e si spegne
3. Crea file aglancio-restaspento-NN.txt → lo script di lancio non riavvia AGLANCIO
4. Aggiorna ISTANZESYNC: a-ist-fl-spenta = "S"
Accensione (m-accendi-aglancio)¶
Per ogni istanza con processi attivi (n-prc-att > 0):
1. Crea file aglancio-accendi-NN.txt → lo script di lancio avvia AGLANCIO
2. Cancella file aglancio-restaspento-NN.txt → riabilita riavvio automatico
3. Cancella file aglancio-spegni-NN.txt
4. Aggiorna ISTANZESYNC: a-ist-fl-spenta = " "
Reload istanze (F5 su GRID-IST)¶
Sequenza critica:
1. Imposta razi-aglancio-reload = 1 su ARPAZIEN
2. Spegni tutte le istanze
3. Ricarica processi (carica-processi)
4. Aggiorna griglia istanze
5. Riaccendi tutte le istanze
6. Messaggio: "Richiesto reload istanze"
Monitoraggio stato istanze¶
Thread contatore (m-thread-contatore)¶
Thread in background che ogni secondo:
1. Calcola secondi trascorsi dall'ultimo ciclo AGLANCIO
2. Calcola tm-ss-da-controllo = (sleep + 5) - secondi_trascorsi
3. Aggiorna il controllo visuale del countdown
Test AGLANCIO attivo (m-set-stato-istanza)¶
Confronta l'ora attuale con l'ultimo keepalive dell'istanza: - Se differenza > (sleep * 2) → stato "0" (spento) - Altrimenti → stato "1" (attivo)
Gestione switch remoto ON/OFF¶
In carica-data-ora-check, legge ARPAZIEN e verifica razi-switch-onoff:
- "ON": richiesta accensione da AreaGate → attiva sincronizzazione locale + remota
- "OFF": richiesta spegnimento da AreaGate → disattiva sincronizzazione locale + remota
Questo permette il controllo remoto del sistema di sincronizzazione dal pannello web AreaGate.
Caricamento processi (carica-processi → caricamento-dati)¶
Scansiona ARPPROC sequenzialmente (ID < 100.000): 1. Per ogni processo legge/crea ARPSTPRC 2. Conta: totali, attivi, non attivi, standby 3. Applica filtro per istanza se impostato 4. Per processi AGCUSTOM: mostra il nome del processo custom configurato 5. Determina se schedulazione fissa ha almeno una riga in ARPPRCSCHED 6. Popola GRID-DET (tabella transito con dati processo) 7. Popola GRID-IST (una riga per istanza, con contatori processi)
Classificazione istanze:
| Istanza | Classe | Significato |
|---|---|---|
| 80-89 | O (Orari) | Processi a orari fissi |
| 90 | P (Particolari) | Processi speciali 40000-49999 |
| 91 | C (Custom) | Processi speciali 90000-99999 |
| 92 | S (Sw-ing) | Database Sw-ing |
| 99 | F (Frontiera) | Database Frontiera |
| 0-79 | W (Work) | Processi standard ad intervalli |
Modifica parametri in griglia¶
Ogni modifica in GRID-DET aggiorna immediatamente ARPSTPRC su PostgreSQL:
| Campo modificabile | Logica |
|---|---|
| Istanza | Validazione: 0-79 solo intervalli, 80-89 solo orari fissi, >= 90 riservate. Propaga ai processi figli |
| Tempo attesa | Ricalcola prossima esecuzione con COGS62 |
| Attivazione | S/N/B |
| Direzione | T=bidirezionale, E=export, I=import |
| Forza esecuzione | Flag S/N |
| Esporta tutto | Flag S/N |
| Log level | Livello di dettaglio log |
| Modo schedulazione | T=intervalli, O=orari fissi |
| Limita record/errori | Soglie per il processo |
Configurazione¶
Parametri COGCNF (caricati via RNEWCONF)¶
| Pack | Gruppo | Chiave | Tipo | Descrizione |
|---|---|---|---|---|
| C | areaapp | cod-azienda | Stringa(6) | Codice azienda per KPN |
| C | abilita | attiva-areaapp | S/N | Sincronizzazione attiva |
| C | areaapp | email-segnalazioni-tecniche | Stringa(80) | Email per segnalazioni |
| C | areaapp | db-log-level | Numerico(2) | Livello log DB |
| C | areaapp | aglancio-sleep-seconds | Numerico(6) | Intervallo ciclo AGLANCIO (secondi) |
| C | AREAAPP | AGLANCIO-ATTIVO | S/N | Flag attivazione AGLANCIO |
| C | AREAAPP | AGLANCIO-CLOSE-DB | S/N | Chiudi DB tra i cicli |
Processi custom (AGCUSTOM)¶
Fino a 50 processi custom (tabella), 15 caricati nel loop configurabili in COGCNF con chiave AGLANCIO-CUSTOM e sub-indice 1-15.
Stringa di connessione DB¶
Recuperata tramite CALL "SWGETS" → swgets-str-conn (fino a 3 stringhe da 80 caratteri).
Tabelle database¶
In lettura/scrittura¶
| Tabella | Operazioni | Utilizzo |
|---|---|---|
| ARPAZIEN | Read/Rewrite | Config azienda, standby, switch ON/OFF, versioni, reload |
| ARPPROC | Read sequenziale | Catalogo processi (scan completa per popolare griglia) |
| ARPSTPRC | Read/Write/Rewrite | Stato runtime processi, modifiche da griglia |
| ARPPRCSCHED | Read sequenziale | Schedulazioni orarie fisse |
| ISTANZESYNC | Read/Write/Rewrite | Stato istanze, keepalive, spegnimento |
In lettura¶
| Tabella | Utilizzo |
|---|---|
| COGCNF | Configurazione (via RNEWCONF); scrittura per salvataggio sincro-att |
| FEURTAB | Tabella ausiliari (COGFILES) |
File di controllo¶
Directory: ext-arc-dir/controllo/
| File | Creato da | Letto da | Funzione |
|---|---|---|---|
aglancio-accendi-NN.txt |
GESSTPRC | Script lancio | Richiesta accensione istanza NN |
aglancio-spegni-NN.txt |
GESSTPRC | AGLANCIO | Richiesta spegnimento istanza NN |
aglancio-restaspento-NN.txt |
GESSTPRC | Script lancio | Impedisce riavvio automatico |
aglancio-istanze.txt |
GESSTPRC/AGLANCIO | Script lancio | Elenco istanze attive |
aglancio-alive-NN.txt |
AGLANCIO | GESSTPRC (obs.) | Heartbeat istanza (metodo file, superato) |
Nota: il metodo di verifica stato basato su file alive e' stato superato dal confronto keepalive su ISTANZESYNC (differenza tempo). Il vecchio metodo file (m-test-aglancio-istanza-file) e' ancora presente nel codice ma non usato nel flusso principale.
Copybook e moduli¶
Copybook specifiche¶
| Copybook | Tipo | Contenuto |
|---|---|---|
| gesstprc.select | SELECT | Definizione file griglia (c-grid-ist) |
| gesstprc.fd | FD | Record della griglia |
| gesstprc.wrk | WORKING | Variabili principali (dati griglia, contatori) |
| gesstprc.tm | TAB-MASCHERA | Campi modificabili gestiti da Screens |
| gesstprc.decla | DECLARATIVES | Gestione I/O errori |
| gesstprc.prc | PROCEDURE | Procedure SQL per PostgreSQL |
| gesstprc-01.scr | SCREEN | Definizione form grafica |
| gesstprc.imppredf | PROCEDURE | Import filtri predefiniti |
| gesstprc.imppredf-wrk | WORKING | Working per filtri predefiniti |
Copybook standard¶
wstato, wopenf, wgrave, wnscr, cogazien, wgrid, utilgdad, utils52, utils62, utils65, utils68, utils93, utilu10, utilu20, utilimppredf, utildlg, utilncnf, utilgesdate, utilgesdebug, utilagprg, utilswgets, utillogproc1
Chiamate esterne¶
| Programma | Funzione |
|---|---|
| RNEWCONF | Lettura configurazione da COGCNF |
| SWGETS | Recupero stringa connessione DB |
| COGS62 | Calcolo differenze temporali (secondi tra due date/ore) |
| GRIDADMN | Personalizzazione griglie |
| DIALOGS | Dialogo con opzioni multiple |
| LOGPROC1 | Consultazione log procedura di un processo |
| GESLPRC | Consultazione log procedura per nome |
| GESDATE | Calcolo date (somma giorni, info data) |
| SWN091 | Forzatura export azienda (se ARPAZIEN non esiste) |
| SWN* | Qualsiasi processo SWN (esecuzione diretta da F5) |
Thread¶
| Thread | Handle | Funzione |
|---|---|---|
m-thread-contatore |
w-thread-contatore | Countdown timer per refresh automatico. Ogni secondo calcola (sleep + 5) - secondi_trascorsi e aggiorna il display |
Il thread precedente m-thread-controlla-aglancio e' stato disabilitato (commentato) — il refresh avviene ora tramite il timer di GRID-DET (f-tempo-scaduto a 100ms).
Relazione con AGLANCIO¶
GESSTPRC e AGLANCIO sono strettamente accoppiati:
- Versione allineata:
k-versione-gesstprc = "2.10.0"deve corrispondere ak-versione-aglancio - Stesse tabelle DB: ARPAZIEN, ARPPROC, ARPSTPRC, ISTANZESYNC
- Comunicazione via file: spegni/accendi/alive/istanze nella cartella controllo
- Comunicazione via DB: switch ON/OFF su ARPAZIEN, reload su razi-aglancio-reload, keepalive su ISTANZESYNC
- Protocollo util-agprg: GESSTPRC usa lo stesso protocollo di AGLANCIO per lanciare i processi SWN
Note implementative¶
- Dual grid: il programma usa due griglie su file di transito indicizzati. La GRID-DET (processi) e la GRID-IST (istanze) vengono popolate con una singola scan di ARPPROC
- Thread safety: il thread contatore usa
lock thread/unlock thread(osynchronizedin ISC) per evitare conflitti - Metodo file vs DB per keepalive: il programma contiene ancora il codice per il metodo file (
m-test-aglancio-istanza-file) ma il flusso attivo usam-set-stato-istanzabasato su ISTANZESYNC - Processi custom AGCUSTOM: fino a 15 processi custom configurabili che vengono mostrati con il nome del programma associato
- Griglia clone: per il refresh periodico (da timer) usa una "clone" della griglia istanze (
c-grid-ist) per evitare conflitti con operazioni in corso - Propagazione istanza ai figli: quando si modifica l'istanza di un processo, la modifica viene propagata a tutti i processi che lo hanno come padre (
a-proc-padre-id) - Validazione istanze: le istanze >= 90 sono riservate e non modificabili dall'utente; le istanze 80-89 accettano solo processi a orari fissi; le istanze 0-79 accettano solo processi ad intervalli
- Versione lancio (
tm-versione-lancio): letta da ARPAZIEN e mostrata in testata; aggiornata automaticamente da AGLANCIO - Descrizione standby (
m-set-standby-des): costruisce la descrizione testuale delle fasce di standby attive leggendo i parametri da ARPAZIEN - Aggiornamento istanze (
m-aggiorna-istanze): rigenera GRID-IST dopo modifiche; per Siderpress, istanza 98 identifica SWA052 - Versione AGLANCIO per istanza: in GRID-IST viene mostrata
a-ist-versione-aglancio - Protezione form durante caricamento: in
carica-processie' presente, ma commentata, unamodify s-mm-1, enabled = 0(con relativa riabilitazione a fine caricamento) il cui scopo era evitare che click sui toolbar/controlli rientrino mentre l'event queue Windows viene pompata dalle chiamate SQL. Il blocco e' lasciato come riferimento ma attualmente non attivo.