Storie dalla Sala Macchine


Home Page | Commenti | Articoli | Faq | Documenti | Ricerca | Archivio | Storie dalla Sala Macchine | Contribuire | Imposta lingua:en it | Login/Register


Lo Script

Non dovrebbe essere una sorpresa per nessuno che io sia "script-happy". Ogni volta che c'e' da fare un qualche lavoro ripetitivo e/o noioso e/o minimamente complesso, io impugno la tastiera e comincio a creare uno script che faccia la maggioranza del lavoro.

Se non e' possibile farlo tutto.

Il bello degli script e' che sono, o dovrebbero essere, semplici ed accessibili e che tutti dovrebbero essere in grado di utilizzarli.

Gli script che faccio, cerco di farli in modo tale che siano leggibili e quindi manutenibili da chiunque, con un minimo di conoscenza. Quando diventano abbastanza complessi, li accoppio a documentazione che sia accessibile da chiunque abbia necessita' di accedervi (wiki aziendale etc.).

Ed in genere, quando tali scripts devono essere utilizzati da piu' persone, ogni volta che qualcuno mi domanda "come funziona sta cosa", mi siedo li' e glielo spiego e controllo che abbia capito e se necessario faccio cambiamenti alla documentazione.

Non mi pare che sia qualche cosa di straordinario... Oppure si?

Purtroppo, pare che questa mia attitudine sia pressoche' unica nel "mondo" informatico. Almeno in quello che frequento io.

La maggioranza di quelli che conosco oscillano tra "1-line-code" e "hoscrittounprogrammadi43milarighe" senza mezza misura.
E per quanto riguarda la documentazione, il massimo che riescono a fare e' scrivere il nome del coso su un post-it che poi viene
perso.

Tutto questo per parlare di $megaapplicazione di $megaditta, che fa, praticamente, tutto meno che il caffe'.

Oltre a gestire vendite, acquisti, fatturazione, ordini, contatti con i clienti e fornitori, gestione dei listini, cms con pubblicazione integrata e tasse, ha anche una qualche funzione di "statistiche" che sono usate da $megaditta per ... Ok, non lo so che se ne fanno, io so solo che ogni fottuta mattina alle 8 qualcuno comincia a telefonare isterico che "non hanno ancora ricevuto la mail con le statistiche della giornata".

Ed ovviamente IO dovrei mettere a posto il problema.

Ora, dopo la ventitreesima telefonata del genere, ho cercato di capire di che accidente parlano. Risulta che queste "statistiche" sono prodotte da una societa' esterna che adopera una paccata di dati, alcuni dei quali escono da questa dannata applicazione nella forma di un "export", anzi piu' di uno.

L'applicazione crea questi "export", in qualche modo e li piazza come file .csv da qualche parte, poi un secondo processo prende questi files e li trasferisce, via sftp su un server della societa' di consulting che usa questa roba per produrre dei bei grafichini colorati che tutti gli SL passano la giornata a guardare e commentare, beatamente ignari di che cosa esattamente significhino.

Quale e' il problema? E' che la procedura di 'export' fallisce di tanto in tanto e non produce niente, o produce solo parte dei dati. Oppure e' la procedura di sftp che fallisce (il caso piu' tipico e' che la directory sul server e' piena o i files che gia' esistono non sono scrivibili). In ogni caso, se qualche cosa va male, il risultato e' che l'intero processo si interrompe e qualcuno comincia a lagnarsi.

Dopo l'ennesima lamentazione, mi sono percio' deciso a cercare di capire quali sono i punti critici, perche' vanno male e che cosa e' possibile fare per metterci una pezza.

La prima fase e' stata cercare di capire come vengono generati questi files. Eccomi quindi ad interrogare CL che e' uno degli autori di questo accrocchio.

CL - ...e questo produce il file file_numero_3243.csv, poi leggiamo i dati dalla tabella pinco_pallino e li incrociamo con i dati della tabella igno_pignazio e questo produce il file file_numero_3244.csv e poi...
IO - Ok, ok, insomma voi fate una sequela di query e producete un file per ogni query, ma alla fine che cappero fate dato che di file da trasferire non ce ne sono cosi' tanti?
CL - ... ah, questo non lo so.
IO - ...come sarebbe a dire non lo sai?
CL - Questo e' quello che c'e' nello scheduler, che cosa succede dopo non lo so.
IO - ...fammi un po' vedere quello scheduler...

E comincio a ravanarci dentro. Dopo numerose ore passate a stramaledire chi scrive software senza fare prove di uso o documentazione, scopro che dopo aver fatto una marea di query e prodotto una pletora di files, l'ultimo passo e'...  eseguire un qualche script sul server.

Mi fiondo sul server e guardo lo script. Che per prima cosa fa un bel rm -f *csv nella directory e poi esegue 4 (dicasi QUATTRO) query in croce e produce una dozzina di file .csv che sono quelli che ci servono.

Riporto la cosa a CL.

CL - Ah... Puo' darsi che sia stato CL2 a fare lo script, non mi ricordo bene...
IO - Quindi tu non puoi confermarmi che tutto quel casino nello scheduler sia completamente inutile e possiamo pure dimenticarcelo no?
CL - Non ne ho idea, non lo gestisco io lo scheduler e sinceramente non voglio manco toccarla sta roba.
IO - Perche' no?
CL - Perche' non voglio avere problemi se non funziona.
IO - Posso farti notare che non funziona gia' 3 volte su cinque? Qualunque cambiamento e' bene accetto a questo punto.

Ovviamente CL risulta inamovibile nella sua posizione, per evitare di fare qualche cosa che possa fare danno, meglio non fare niente.

Ergo: ci teniamo il gran casino nello scheduler e cerchiamo di risolvere i problemi a valle.

Dopo aver dato un'occhiata a questo script, decido di "aggiornarlo" e migliorare un pelo la leggibilita' della cosa, rifare le query per cercare di evitare i tablescan. Il risultato e che lo script funziona in meno tempo (poca cosa, ma sempre meglio che niente). Aggiunto un po' di logging per capire dove sono i problemi, mi metto in attesa del giorno dopo.

Ed ovviamente tutto quanto funziona perfettamente... Quando cerchi un errore, non ne trovi nessuno.

Lascio tutto come sta ed attendo. Un paio di giorni dopo, la "trappola" funziona: sembra che l'export sia fallito.

Mi collego sul server e controllo il log: tutto normale. Secondo il log, lo script ha generato i suoi files alle 2 del mattino come se niente fosse. Dopo essermi grattato la pera per un po' decido che forse il problema e' stato nell'FTP. Ma no, anche quello sembra aver funzionato. A questo punto decido di contattare la societa' di analisi e domandare a loro.

Il CL di guardia, mi informa che dalla loro parte il processo e' partito e si e' fermato immediatamente.

IO - Oh bello, e perche'?
CL2 - Perche' la procedura controlla che i files ci siano tutti prima di procedere, ma si e' bloccata perche' i files erano mancanti.
IO - Quali files?
CL2 - Non lo so quali files, vedo solo che l'errore e' "files mancanti".
IO - ...mmm... secondo il log dell'ftp sono stati trasferiti 12 files csv.
CL2 - Si', dovrebbero essere quelli.
IO - ...quindi li abbiamo trasferiti tutti... che cosa c'e' che non gli e' piaciuto?
CL2 - Non lo so, non ho fatto io la procedura.
IO - Ok, e chi e' che l'ha fatta ed e' possibile capire che cosa c'e' che non ha funzionato?
CL2 - Mi informero'.

Grumblesmurfbeoti che non documentano i loro script del cazzo...

Comunque sia, menzione d'onore a CL2 che scova l'autore e salta fuori che lo script non controlla in effetti quali files sono stati trasferiti, ma che esistano dei files di "indicazione" che consistono in un semplice "finito.xxx" con una diversa estensione a seconda del processo che genera quel gruppo di files.

Ok, guardo sul server e quei files non sono in quella directory, quindi o non sono stati generati oppure c'e' qualche inghippo. Un controllo nello scriptone mi dice che quello non genera nessun file 'finito', quindi tali files vengono da qualche altra parte... Domandiamo a CL.

CL - Oh... quei files...
IO - Si', "quei files". Da dove saltano fuori? Perche' non ho trovato niente che li genera, non sono prodotti dallo script.
CL - No, non credo siano prodotti da niente.
IO - ...come sarebbe a dire?
CL - Quei files sono sempre li' e vengono sempre trasferiti ogni volta, non li generiamo mai.
IO - Ma, da qualche parte devono saltare fuori perche' adesso non ci sono sul server.
CL  Eh no...
IO - ...che hai combinato?
CL - Li ho cancellati.
IO - ...
CL - Mi sembravano vecchi e li ho eliminati.
IO - Cioe', fammi capire... tu ti rifiuti di toccare o anche solo guardare di traverso gli scripts che producono i files, e poi vai ad eliminare dei files che NON SONO prodotti da nessuno script?
CL - Eh...

Dopo aver aggiunto una linea con un bel 'touch finito.xxx finito.yyy finito.zzz' allo script ho potuto osservare che questa volta tutto ha funzionato liscio. Adesso dovro' vedere come migliorare la parte di SFTP. E come trapiantare il cervello di CL.
E documentare l'intera procedura ovviamente. Parlo dello script, non del cervello di CL.

Davide
18/04/2018 12:26

Precedente Successivo

I commenti sono aggiunti quando e soprattutto se ho il tempo di guardarli e dopo aver eliminato le cagate, spam, tentativi di phishing et similia. Quindi non trattenete il respiro.

8 messaggi this document does not accept new posts

Fabio

Di Fabio postato il 30/04/2018 11:36

Ricapitolando:

- ti sei preso in carico un problema di $megaditta

- hai trovato la fonte problema, che già non accade sempre.

- hai risolto il problema

Ora non resta che farsi pagare la consulenza da $megaditta... :-D

-- Fabio

Diavolo_Rosso

Di Diavolo_Rosso postato il 30/04/2018 12:12

Io documenterei anche il trapianto di CL. Qualcosa mi dice che sarà utile come paziente 0. 

-- Diavolo_Rosso

trekfan1

Di trekfan1 postato il 01/05/2018 08:48

Documentare il cervollo di CL? Molto semplice:

nano cervellodicl > /dev/null

-- trekfan1

Anonymous coward

@ trekfan1 Di Anonymous coward postato il 01/05/2018 15:19

Meglio: touch cervellodicl

Documentare il cervollo di CL? Molto semplice:

nano cervellodicl > /dev/null

 

 

-- Anonymous coward

Il solito anonimo codardo

Di Il solito anonimo codardo postato il 02/05/2018 09:25

Si può fare un bel rm -f CL? Risolverebbe almeno uno dei millemila problemi alla radice!

-- Il solito anonimo codardo

Davide Bianchi

@ Il solito anonimo codardo Di Davide Bianchi postato il 02/05/2018 09:44

Si può fare un bel rm -f CL? Risolverebbe almeno uno dei millemila problemi alla radice!

Poi dovrei provisionarne un'altro...

 

-- Davide Bianchi

Anonymous coward

Di Anonymous coward postato il 02/05/2018 10:29

Tranquillo non sei solo... qui qualcuno ha messo in piedi un sistema di massima sicurezza, il che significa che l'unico servizio attivo è SFTP, e non c'è accesso SSH interattivo... peccato che lo stesso qualcuno abbia installato una versione del demone SFTP appositamente modificata per eseguire qualunque comando di shell (come root!) quando prefissato da una certa parola "segreta".

Quindi lo script parte da un sistema Windows, scrive su una share CIFS di un volume NAS, che viene letto tramite una export NFS da un sistema HPUX, che usa SFTP per copiare i file sul server Solaris, poi esegue comandi usando "l'estensione" di SFTP, per copiare via FTP (non sicuro, ma attraverso una VPN "diventa sicuro") i file su un server remoto. Su cui probabilmente sono leggibili da everyone in full control.

Ovviamente la password dell'utente che può dare qualunque comando, è uguale al nome dell'utente. Per sicurezza.

Quel qualcuno non lavora più qui da circa 20 anni.

-- Anonymous coward

Davide Bianchi

@ Anonymous coward Di Davide Bianchi postato il 02/05/2018 16:38

...un sistema di massima sicurezza, ... SFTP

..."massima sicurezza" e "SFTP" nella stessa frase?

-- Davide Bianchi

8 messaggi this document does not accept new posts

Precedente Successivo


Il presente sito e' frutto del sudore della mia fronte (e delle mie dita), se siete interessati a ripubblicare uno degli articoli, documenti o qualunque altra cosa presente in questo sito per cortesia datemene comunicazione (o all'autore dell'articolo se non sono io), cosi' il giorno che faccio delle aggiunte potro' avvisarvi e magari mandarvi il testo aggiornato.


Questo sito era composto con VIM, ora e' composto con VIM ed il famosissimo CMS FdT.

Questo sito non e' ottimizzato per la visione con nessun browser particolare, ne' richiede l'uso di font particolari o risoluzioni speciali. Siete liberi di vederlo come vi pare e piace, o come disse qualcuno: "Finalmente uno dei POCHI siti che ancora funzionano con IE5 dentro Windows 3.1".

Web Interoperability Pleadge Support This Project
Powered By Gojira