Vai al contenuto

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-processicaricamento-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:

  1. Versione allineata: k-versione-gesstprc = "2.10.0" deve corrispondere a k-versione-aglancio
  2. Stesse tabelle DB: ARPAZIEN, ARPPROC, ARPSTPRC, ISTANZESYNC
  3. Comunicazione via file: spegni/accendi/alive/istanze nella cartella controllo
  4. Comunicazione via DB: switch ON/OFF su ARPAZIEN, reload su razi-aglancio-reload, keepalive su ISTANZESYNC
  5. Protocollo util-agprg: GESSTPRC usa lo stesso protocollo di AGLANCIO per lanciare i processi SWN

Note implementative

  1. 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
  2. Thread safety: il thread contatore usa lock thread / unlock thread (o synchronized in ISC) per evitare conflitti
  3. 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 usa m-set-stato-istanza basato su ISTANZESYNC
  4. Processi custom AGCUSTOM: fino a 15 processi custom configurabili che vengono mostrati con il nome del programma associato
  5. Griglia clone: per il refresh periodico (da timer) usa una "clone" della griglia istanze (c-grid-ist) per evitare conflitti con operazioni in corso
  6. 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)
  7. 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
  8. Versione lancio (tm-versione-lancio): letta da ARPAZIEN e mostrata in testata; aggiornata automaticamente da AGLANCIO
  9. Descrizione standby (m-set-standby-des): costruisce la descrizione testuale delle fasce di standby attive leggendo i parametri da ARPAZIEN
  10. Aggiornamento istanze (m-aggiorna-istanze): rigenera GRID-IST dopo modifiche; per Siderpress, istanza 98 identifica SWA052
  11. Versione AGLANCIO per istanza: in GRID-IST viene mostrata a-ist-versione-aglancio
  12. Protezione form durante caricamento: in carica-processi e' presente, ma commentata, una modify 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.