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.