Nota

pywws documentation is now located at http://pywws.readthedocs.org/it/. This copy is no longer being updated and may be out of date.

Come impostare una registrazione ‘live’ con pywws

Introduzione

Ci sono due abbastanza differenti modalità di funzionamento con pywws. Tradizionalmente con Hourly viene eseguito a intervalli regolari (di solito un’ora) da cron. Questo è adatto per siti Web abbastanza statici, ma aggiornamenti più frequenti possono essere utili per i siti come Weather Underground (http://www.wunderground.com/). Il più recente programma LiveLog gira continuamente e può i caricare dati ogni 48 secondi.

Guida introduttiva

Prima di tutto, è necessario installare pywws e assicurarsi che si possono ottenere i dati dalla tua stazione meteo. Vedere Come iniziare con pywws per i dettagli.

Esecuzione di prova LiveLog dalla riga di comando, con un alto livello di verbosità in modo da poter vedere ciò che sta accadendo:

python -m pywws.LiveLog -vvv ~/weather/data

Entro cinque minuti (supponendo di aver impostato un intervallo di registrazione di 5 minuti) si dovrebbe vedere un messaggio ‘live_data new ptr’, seguita dal recupero di eventuali nuovi dati dalla stazione meteo ed elaborarli. Lasciate che LiveLog funzionare per un minuto o due o più, poi fermare il processo digitando ‘<Ctrl>C’.

Percorsi dei file di configurazione

Aprire il file weather.ini con un editor di testo. Si dovrebbe avere una sezione di [paths] simile al seguente (dove xxx è il tuo nome utente):

[paths]
work = /tmp/weather
templates = /home/xxx/weather/templates/
graph_templates = /home/xxx/weather/graph_templates/
local_files = /home/xxx/weather/results/

Modificare queste per soddisfare le vostre preferenze di installazione. work è una directory temporanea utilizzata per archiviare i file intermedi, templates è la directory per i tuoi file modello di testo e graph_templates è la directory per i tuoi file grafici di modello e local_files è una directory dove viene messo l’output del modello che non è stato caricato in un sito web. Non usare le directory di esempio pywws per questi, perchè saranno sovrascritti quando si aggiorna pywws.

Copiare i modelli di testo e grafico nelle directory appropriate. Si possono trovare alcuni esempi forniti con pywws utili per iniziare. Se hai installato pywws con pip gli esempi dovrebbero essere in /usr/share/pywws o /usr/local/share/pywws o simili.

Configurazione dell’esecuzione periodica

In weather.ini si dovrebbe avere una sezione [live] simile alla seguente:

[live]
services = []
plot = []
text = []

Questa sezione specifica cosa pywws dovrebbe fare ogni volta che ottiene una nuova lettura dalla stazione meteo, cioè ogni 48 secondi. La voce services è un elenco di servizi meteo online dove caricare dati, ad esempio ['underground_rf']. Le voci plot e text sono elenchi di file di modello grafici e file di testo che devono essere elaborati e, opzionalmente, caricati sul tuo sito web. Probabilmente si dovrebbe lasciare tutto questo vuoto tranne che per i servizi services.

Se si utilizza YoWindow (http://yowindow.com/) si può aggiungere una voce alla sezione [live] per specificare il file di YoWindow, ad esempio:

[live]
services = ['underground_rf']
text = [('yowindow.xml', 'L')]
...

Si noti l’uso del flag 'L' – questo dice a pywws si inviare il risultato alla directory “local files” invece di caricarlo sul tuo sito ftp.

Se non li hai già, create quattro altre sezioni nel file weather.ini: [logged], [hourly], [12 hourly] e [daily]. Queste sezioni dovrebbero avere voci simili alla sezione [live] e specificare cosa fare ogni volta i dati vengono registrati (5-30 minuti, a seconda l’intervallo di registrazione), ogni ora, due volte al giorno e una volta al giorno. Aggiungere i nomi dei file di modello alle voci appropriate, ad esempio:

[logged]
services = ['underground', 'metoffice']
plot = []
text = []

[hourly]
services = []
plot = ['7days.png.xml', '24hrs.png.xml', 'rose_24hrs.png.xml']
text = [('tweet.txt', 'T'), '24hrs.txt', '6hrs.txt', '7days.txt']

[12 hourly]
services = []
plot = []
text = []

[daily]
services = []
plot = ['28days.png.xml']
text = [('forecast.txt', 'T'), 'allmonths.txt']

Si noti l’uso del flag 'T' – questo dice a pywws si inviare il risultato a Twitter invece di caricarlo sul proprio sito ftp.

Cambiato nella versione 13.06_r1015: Aggiunto il flag 'T'. Precedentemente i modelli Twitter sono stati indicati separatamente in voci twitter in [hourly] e di altre sezioni. La sintassi precedente funziona ancora, ma è obsoleta.

Cambiato nella versione 13.05_r1013: aggiunto il modello 'yowindow.xml'. Precedentemente il file yowindow era generato da un modulo separato, richiamato dalla voce yowindow nella sezione [live]. La sintassi precedente funziona ancora, ma è obsoleta.

Upload asincrono

Nuovo nella versione 13.09_r1057.

Il caricamento dei dati in siti web o ‘services’ a volte può richiedere del tempo, in particolare se un sito è andato off line e i tempi di caricamento sono lunghi. In condizioni di normale funzionamento pywws attende che tutti i caricamenti siano elaborati prima di scaricare ulteriori dati dalla stazione meteo. Questo può portare alcune volte a dati di essere mancanti.

L’elemento asynchronous nella sezione [config] di weather.ini può essere impostato su True per dire a LiveLog per fare questi caricamenti in un processo separato. Questa funzionalità è ancora un po’ sperimentale – provatelo a vostro rischio.

Utilizzare gli script di utilità

L’installazione di pywws include un breve script pywws-livelog.py che viene installato in /usr/bin o /usr/local/bin o simili. Si dovrebbe essere in grado di utilizzare questo script per eseguire LiveLog:

pywws-livelog.py -v ~/weather/data

Esecuzione in background

Al fine di avere :py:mod: LiveLog in esecuzione dopo aver terminato di utilizzare il computer deve essere eseguito come un processo in background. Nella maggior parte dei sistemi Linux/UNIX è possibile farlo mettendo una e commerciale (‘&’) alla fine della riga di comando. Per esempio:

pywws-livelog.py ~/weather/data &

Tuttavia, sarebbe utile sapere cosa è andato storto se il programma si blocca per qualsiasi motivo. Con LiveLog è possibile memorizzare i messaggi in un file di log specificato con il opzione -l:

pywws-livelog.py -v -l ~/weather/data/pywws.log ~/weather/data &

Riavvio automatico

Ci sono diversi modi per configurare un sistema Linux per avviare un programma quando la macchina si avvia. In genere, questi comportano di mettere un file in /etc/init.d/, che richiede i privilegi di root. Il problema è leggermente più difficile da garantire se un programma si riavvia quando si blocca. La mia soluzione per entrambi i problemi è quello di eseguire il seguente script da cron, ogni ora.

#!/bin/sh

pidfile=/var/run/pywws.pid
datadir=/data/weather
logfile=$datadir/live_logger.log

# exit if process is running
[ -f $pidfile ] && kill -0 `cat $pidfile` && exit

# email last few lines of the logfile to see why it died
if [ -f $logfile ]; then
  log=/var/log/log-weather
  tail -40 $logfile >$log
  /home/jim/scripts/email-log.sh $log "weather log"
  rm $log
  fi

# restart process
pywws-livelog.py -v -l $logfile $datadir &
echo $! >$pidfile

Questo memorizza l’id di processo del LiveLog del pidfile. Se il processo è in esecuzione, lo script non serve a nulla. Se il processo si è bloccato, mi invia un e-mail con le ultime 40 righe del file di log (usando uno script che crea un messaggio e lo passa al sendmail) e poi si riavvia LiveLog. Avrete bisogno di modificare molto questo per soddisfare le posizioni dei file e così via, ma dà un’idea di cosa fare.


Commenti o domande? Si prega di iscriversi per al mailing list pywws http://groups.google.com/group/pywws e facci sapere.