(module poke-download-server mzscheme (require (lib "etc.ss") (lib "monitor-poke-web-server.ss" "web-server") (lib "monitor-emailer.ss" "web-server") (lib "match.ss") (lib "date.ss") (lib "xml.ss" "xml")) (define email-address "clements@ccs.neu.edu") (define logfile "/home/clements/download-server-downtime-log") (define html-log "/home/clements/.www/download-server-downtime.html") (date-display-format 'iso-8601) (define bgcolor "#9999CC") (define (send-email result server-name server-port) (send-email-alert email-address server-name server-port (result->message result))) (define (webinate result) ; write this error to the (sexp) log file (let ([message (result->message result)]) (call-with-output-file logfile (lambda (port) (write `(,(current-seconds) ,message) port)) 'append)) ; read in _all_ the error sexps (let ([error-sexps (call-with-input-file logfile (lambda (port) (let loop ([r (read port)]) (if (eof-object? r) null (cons r (loop (read port)))))))]) ; write out a web page representing them. (call-with-output-file html-log (lambda (port) (write-xml/content (xexpr->xml `(html (head (title "Download Server Status Log")) (center (h1 "Download Server Status Log") (table ,@(map (lambda (log-entry) (match log-entry [`(,seconds ,message) `(tr (td ((bgcolor ,bgcolor)) ,(date->string (seconds->date seconds) #t)) (td ((bgcolor ,bgcolor)) (pre ,message)))])) error-sexps))))) port)) 'truncate))) (let ([result-channel (make-channel)] [server-name "download.plt-scheme.org"] [server-port 80]) (poke-web-server result-channel server-name server-port 10) (let ([result (channel-get result-channel)]) (match result [`(ok) (void)] [else (send-email result server-name server-port) (webinate result)]))) ; check osterley:8181 (let ([another-channel (make-channel)] [server-name "osterley.ccs.neu.edu"] [server-port 8181]) (poke-web-server another-channel server-name server-port 75) (let ([result (channel-get another-channel)]) (match result [`(ok) (void)] [else (send-email result server-name server-port)]))))