Faz e Belfast
Storia di un pessimo servizio, storia di un ottimo servizio.
Quattro giorni dopo essere arrivato a Belfast, sia il portatile che il tablet smettono di ricaricarsi, a quattro ore di distanza l’uno dall’altro, di Sabato.
Corro verso il centro, chiedendo a Massimo Manganaro di cercare su Google un riparatore. Ne trova uno a 100 metri da dove sono io, in pieno centro, Pottinger Entry. Entro, lascio il portatile e corro a cercare un telefono (il tablet faceva da telefono).
Troppo tardi, alle 17:30 qui inizia a desertificarsi. Con la poca batteria che rimane avviso chi di dovere, ciao mamma eh, che per quella sera non sarò raggiungibile.
La Domenica, rigorosamente di pomeriggio che qui la mattina non si muove una foglia, vado da Argos e prendo un Moto G seconda generazione. Torno a casa, configuro tutto e torno online.
Nelle 2 settimane seguenti passo ogni tanto dal negozio per sapere che ne è del portatile.
“Lo apro domani”.
“Ho ordinato il pezzo”
“Non arriva il pezzo”
“Tiro via il pezzo da un altro computer, passa domani”
Fino ad arrivare a oggi, 16 giorni dopo, con:
“Non ho il pezzo, nemmeno quelli dei vecchi Vaio che ho qui vanno bene, non riesco ad aggiustarlo”.
Esco e vado veloce verso Templemoore, dove tempo prima avevo visto un riparatore.
Entro, trovo un ragazzo indiano che guarda prova con un tester l’alimentatore poi guarda l’attacco al Vaio e sentenzia:
“L’attacco non è ben fermo. Apro il pc, lo fermo e dovrebbe essere tutto a posto”.
“Ok, quando me lo dai”, dico io.
“Fra un’oretta”, dice lui.
Seeeeeeeeeeeeeeeeeeeeeeee.
“Allora vado a fare la spesa, sto cercando una pentola per il sugo”.
“Ah, se al semaforo giri a destra, poi al prossimo a sinistra e vai sempre dritto, dopo un kilometro trovi un grosso tesco e lì hanno tutto. Per quando torni dovrebbe essere pronto, lasciamo il numero di cellulare che quando è pronto ti mando un sms”.
Vado, il Tesco è lì dove mi aveva detto, ci trovo una pentola, un po’ piccolina ma meglio che niente, e pasta italiana, pure il pesto.
Finisco la spesa, mi avvio al ritorno pensando di passare per il negozio e dire che si, ma anche domani va bene.
Ding! Il telefono riceve un sms: “Gentile cliente, bla, bla, passi dentro che è pronto”.
Urka!
Passo dentro. Faz, il proprietario è lì che riconsegna un cellulare a un suo cliente con il quale è in confidenza.
“Era solo il connettore allentato, non ho cambiato nessun pezzo, facciamo 20 sterline e va bene”.
Iniziamo a parlare, tutti e tre, il cliente, nord irlandese mi spiega un po’ di idiosincrasie dell’accento di Belfast, si parla dell’Italia, della Francia, di macchine.
Nel frattempo Faz va nel retro e ci chiede se vogliamo del caffé o del té. Vada per quest’ultimo.
Doveva chiudere alle 19 perché, dice lui, apre la mattina verso le 10:30 tanto sono tutti al lavoro e chi ci va da lui a farsi riparare computer, telefoni e tv. E’ la sera, dopo il lavoro che vengono e, mi pare, non abbia tutti i torti, visto che io sono andato lì e a quell’ora molti dei suoi concorrenti sono chiusi da un pezzo.
Si chiacchera fino alle otto meno un quarto. Ops, si è fatto tardi, mannaggia, ho il mocio, la scopa, un secchio e una borsata di roba.
“Non ti preoccupare, ti porto io a casa, tanto ho la macchina”.
Eh?????
“Ma si, io senza macchina non potrei vivere, ma ti pare che debba mettermi ad aspettare l’autobus? Io a casa guidavo da quando avevo 12 anni!”.
Salutiamo il suo amico, mi carica in macchina insieme alle mie cose e mi lascia vicino casa salutandomi calorosamente e dicendo che si, si era goduto la chiacchierata e l’energia positiva che ne era scaturita.
Domani sono di nuovo da lui a portare il tablet, mentre ora sto scrivendo dal mio vecchio portatile, finalmente di nuovo fra le mie mani.
Non per fare pubblicità, ma se vi trovate a Belfast, passate da idevice ad Albertsbridge Road e fatevi offrire un té!
name space
The various services being used by a process are gathered together into the process’s name space, a single rooted hierarchy of file names.
Nagios – Check BigIP F5 memory
This is the last plugin I coded for F5 BigIP. As usual, I just found this old Nagios plugin of mine, sitting in a directory, taking dust.
As usual, I’m not a programmer, so I just do quick and dirty tricks to get what I need, so here it is the plugin in all it’s bash glory.
The plugin is commented, although in Italian, but google can translate the comments.
I wrote this plugins some years ago, it works using SNMP as protocol and with the standard (at those times) OID for BigIP. If they’ve not changed, it should work with no efforts. It’s based on v3 of SNMP protocol and the auth and priv are “hardcoded”, so you may want to change them.
Have fun.
#!/bin/sh # License: GPL # # Author: Giorgio Zarrelli <zarrelli@linux.it> # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # SNMP_GET=$(which snmpget) SED=$(which sed) BC=$(which bc) ECHO=$(which echo) # Nagios return codes STATE_OK=0 STATE_WARNING=1 STATE_CRITICAL=2 STATE_UNKNOWN=3 WARNING_THRESHOLD=${WARNING_THRESHOLD:="50"} CRITICAL_THRESHOLD=${CRITICAL_THRESHOLD:="80"} HOST=${HOST:="change me"} LOGIN=${LOGIN:="change me"} PASSWORD=${PASSWORD:="change me"} # Indico l'OID dei dati che voglio reperire TOTAL_HOST_MEMORY=".1.3.6.1.4.1.3375.2.1.7.1.1.0" TOTAL_TMM_MEMORY=".1.3.6.1.4.1.3375.2.1.1.2.1.44.0" USED_HOST_MEMORY=".1.3.6.1.4.1.3375.2.1.7.1.2.0" USED_TMM_MEMORY=".1.3.6.1.4.1.3375.2.1.1.2.1.45.0" print_help() { echo "" echo "Questo plugin consente di monitorare la banda occupata " echo "su una interfaccia di rete per gli F5. -w per la percentuale di warning, -c per la critica," echo " -H per l'host name o l'host address del server da controllare, -l per la login, -p per la password." echo "" exit 0 } # Parse parameters while [ $# -gt 0 ]; do case "$1" in -h | --help) print_help exit ${STATE_OK} ;; -H | --hostname) shift HOST=$1 ;; -w | --warning) shift WARNING_THRESHOLD=$1 ;; -c | --critical) shift CRITICAL_THRESHOLD=$1 ;; -l | --login) shift LOGIN=$1 ;; -p | --password) shift PASSWORD=$1 ;; -i | --interface) shift INTERFACE=$1 ;; *) echo "Unknown argument: $1" print_help exit ${STATE_UNKNOWN} ;; esac shift done if [ -n "${SNMP_GET}" ] ; then # Se la variabile SNMP_GET contiene almeno un carattere, controllo che il suo contenuto punti # al percorso dell'eseguibile echo if [ -f "${SNMP_GET}" ] ; then # Se il contenuto di SNMP_GET punta al file binario snmpget # allora non faccio nulla : else # Se non presente il file echo, non posso stampare a video alcunche'. # Allora esco silenziosamente dal programma ${ECHO} "La variabile SNMP_GET e' istanziata ma non punta a un file preciso" exit ${STATE_UNKNOWN} # Chiudo la struttura di controllo sul puntamento a file del contenuto della variabile SNMP_GET fi else # Se il contenuto di SNMP_GET risulta vuoto, non e' presente il file echo # e quindi non posso stampare a video dei messaggi ed esco silenziosamente ${ECHO} "La variabile SNMP_GET non risulta istanziata" exit ${STATE_UNKNOWN} # Chiudo la struttura di controllo relativa all'istanziazione della variabile SNMP_GET (contenuto non vuoto) fi if [ -n "${BC}" ] ; then # Se la variabile BC contiene almeno un carattere, controllo che il suo contenuto punti # al percorso dell'eseguibile echo if [ -f "${BC}" ] ; then # Se il contenuto di BC punta al file binario snmpget # allora non faccio nulla : else # Se non presente il file echo, non posso stampare a video alcunche'. # Allora esco silenziosamente dal programma ${ECHO} "La variabile BC e' istanziata ma non punta a un file preciso" exit ${STATE_UNKNOWN} # Chiudo la struttura di controllo sul puntamento a file del contenuto della variabile BC fi else # Se il contenuto di BC risulta vuoto, non e' presente il file echo # e quindi non posso stampare a video dei messaggi ed esco silenziosamente ${ECHO} "La variabile BC non risulta istanziata" exit ${STATE_UNKNOWN} # Chiudo la struttura di controllo relativa all'istanziazione della variabile BC (contenuto non vuoto) fi controlla_limiti () { if (( $(echo "scale=2; ${WARNING_THRESHOLD} >= ${CRITICAL_THRESHOLD}" | bc ) )) ; then echo "Il valore di WARNING (${WARNING_THRESHOLD}) deve essere minore rispetto a quello di CRITICAL (${CRITICAL_THRESHOLD})" exit 1 else : fi } aggiorna () { if ! POLL=`/usr/bin/snmpget -Oqvt -t 1 -r 5 -m '' -v 3 -l authPriv -a MD5 -u ${LOGIN} -A ${PASSWORD} -x DES -X ${PASSWORD} ${HOST}:161 ${TOTAL_HOST_MEMORY} ${TOTAL_TMM_MEMORY} ${USED_HOST_MEMORY} ${USED_TMM_MEMORY}` then exit ${STATE_CRITICAL} fi CONVERT_POLL=$( echo $POLL | awk 'BEGIN{ FS=" " } { print $1 "\n" $2 "\n" $3 "\n" $4}' ) ARRAY_POLL=($CONVERT_POLL) TOTAL_HOST_MEMORY_POLL=$((${ARRAY_POLL[0]} / 1000000)) TOTAL_TMM_MEMORY_POLL=$((${ARRAY_POLL[1]} / 1000000)) USED_HOST_MEMORY_POLL=$((${ARRAY_POLL[2]} / 1000000)) USED_TMM_MEMORY_POLL=$((${ARRAY_POLL[3]} / 1000000)) HOST_MEMORY_PERCENTUALE=$(echo "scale=2; (${USED_HOST_MEMORY_POLL} * 100) / (${TOTAL_HOST_MEMORY_POLL})" | bc) USED_MEMORY_PERCENTUALE=$(echo "scale=2; (${USED_TMM_MEMORY_POLL} * 100) / (${TOTAL_TMM_MEMORY_POLL})" | bc) if (( $(echo "scale=6; ${HOST_MEMORY_PERCENTUALE} >= ${WARNING_THRESHOLD}" | bc ) )) && (( $(echo "scale=2; ${HOST_MEMORY_PERCENTUALE} < ${CRITICAL_THRESHOLD}" | bc ) )) ; then echo "MEMORIA BIGIP WARNING - THM=${TOTAL_HOST_MEMORY_POLL} MB;UHM=${USED_HOST_MEMORY_POLL} MB;TMM=${TOTAL_TMM_MEMORY_POLL} MB;UTM=${USED_TMM_MEMORY_POLL} MB | THM=${TOTAL_HOST_MEMORY_POLL} MB;UHM=${USED_HOST_MEMORY_POLL} MB;TMM=${TOTAL_TMM_MEMORY_POLL} MB;UTM=${USED_TMM_MEMORY_POLL}MB" exit ${STATE_WARNING} elif (( $(echo "scale=6; ${HOST_MEMORY_PERCENTUALE} >= ${CRITICAL_THRESHOLD}" | bc ) )) ; then echo "MEMORIA BIGIP CRITICAL - THM=${TOTAL_HOST_MEMORY_POLL} MB;UHM=${USED_HOST_MEMORY_POLL} MB;TMM=${TOTAL_TMM_MEMORY_POLL} MB;UTM=${USED_TMM_MEMORY_POLL} MB | THM=${TOTAL_HOST_MEMORY_POLL} MB;UHM=${USED_HOST_MEMORY_POLL} MB;TMM=${TOTAL_TMM_MEMORY_POLL} MB;UTM=${USED_TMM_MEMORY_POLL} MB" exit ${STATE_CRITICAL} elif (( $(echo "scale=2; ${USED_MEMORY_PERCENTUALE} >= ${WARNING_THRESHOLD}" | bc ) )) && (( $(echo "scale=2; ${USED_MEMORY_PERCENTUALE} < ${CRITICAL_THRESHOLD}" | bc ) )) ; then echo "MEMORIA BIGIP WARNING - THM=${TOTAL_HOST_MEMORY_POLL} MB;UHM=${USED_HOST_MEMORY_POLL} MB;TMM=${TOTAL_TMM_MEMORY_POLL} MB;UTM=${USED_TMM_MEMORY_POLL} MB | THM=${TOTAL_HOST_MEMORY_POLL} MB;UHM=${USED_HOST_MEMORY_POLL} MB;TMM=${TOTAL_TMM_MEMORY_POLL} MB;UTM=${USED_TMM_MEMORY_POLL} MB" exit ${STATE_WARNING} elif (( $(echo "scale=6; ${USED_MEMORY_PERCENTUALE} >= ${CRITICAL_THRESHOLD}" | bc ) )) ; then echo "MEMORIA BIGIP CRITICAL - THM=${TOTAL_HOST_MEMORY_POLL} MB;UHM=${USED_HOST_MEMORY_POLL} MB;TMM=${TOTAL_TMM_MEMORY_POLL} MB;UTM=${USED_TMM_MEMORY_POLL} MB | THM=${TOTAL_HOST_MEMORY_POLL} MB;UHM=${USED_HOST_MEMORY_POLL} MB;TMM=${TOTAL_TMM_MEMORY_POLL} MB;UTM=${USED_TMM_MEMORY_POLL} MB" exit ${STATE_CRITICAL} else echo "MEMORIA BIGIP OK - THM=${TOTAL_HOST_MEMORY_POLL} MB;UHM=${USED_HOST_MEMORY_POLL} MB;TMM=${TOTAL_TMM_MEMORY_POLL} MB;UTM=${USED_TMM_MEMORY_POLL} MB | THM=${TOTAL_HOST_MEMORY_POLL} MB;UHM=${USED_HOST_MEMORY_POLL} MB;TMM=${TOTAL_TMM_MEMORY_POLL} MB;UTM=${USED_TMM_MEMORY_POLL} MB" exit ${STATE_OK} fi } controlla_limiti aggiorna