Removing web-server monitor. Not our job and poorly written. Renaming launchers

svn: r6416
This commit is contained in:
Jay McCarthy 2007-05-30 17:59:00 +00:00
parent 8b1cb2bda9
commit 3b675372d9
7 changed files with 5 additions and 178 deletions

View File

@ -5,11 +5,11 @@
(list))
(define mzscheme-launcher-libraries
(list "private/text-launch.ss" "private/monitor-launch.ss" "private/setup-launch.ss" ))
(list "private/launch-text.ss" "private/setup-launch.ss" ))
(define mzscheme-launcher-names
(list "PLT Web Server Text" "PLT Web Server Monitor" "PLT Web Server Setup"))
(list "PLT Web Server Text" "PLT Web Server Setup"))
(define mred-launcher-libraries
(list "private/gui-launch.ss"))
(list "private/launch-gui.ss"))
(define mred-launcher-names
(list "PLT Web Server")))

View File

@ -1,4 +1,4 @@
(module gui-launch mzscheme
(module launch-gui mzscheme
(require (lib "class.ss")
(lib "mred.ss" "mred"))
(require "launch.ss")

View File

@ -1,4 +1,4 @@
(module text-launch mzscheme
(module launch-text mzscheme
(require "launch.ss"
(only "../web-server.ss" do-not-return))
(serve)

View File

@ -1,19 +0,0 @@
(module monitor-emailer mzscheme
(require (lib "sendmail.ss" "net")
(lib "contract.ss"))
(provide/contract [send-email-alert (string? ; email address
string? ; server-name
number? ; server-port
string? ; message
. -> .
void?)])
; send-email-alert : send an email to the specified address informing them of the failure.
(define (send-email-alert alert-address server-name server-port message)
(send-mail-message alert-address
(format "The server ~a:~a is not responding!" server-name server-port)
(list alert-address)
null
null
(list message '("" "Fix it ASAP!!!")))))

View File

@ -1,31 +0,0 @@
; The main program of the "web-server-monitor" launcher.
(module monitor-launch mzscheme
(require "monitor-server.ss"
"util.ss"
(lib "cmdline.ss"))
; handle-numeric-flag : sym -> str str -> (cons sym num)
(define (handle-numeric-flag name)
(lambda (dc-flag arg)
(cons name (string->number arg))))
(parse-command-line
"web-server-monitor"
(current-command-line-arguments)
`((once-each
[("-p" "--port")
,(handle-numeric-flag 'port)
("Connects to the network port <port>." "port")]
[("-f" "--frequency")
,(handle-numeric-flag 'frequency)
("Polls every <frequency> seconds." "frequency")]
[("-t" "--timeout")
,(handle-numeric-flag 'timeout)
("Assumes failure after <timeout> seconds." "timeout")]))
(lambda (flags email-address host-name)
(monitor email-address
host-name
(extract-flag 'port flags default-server-port)
(extract-flag 'frequency flags default-poll-frequency-seconds)
(extract-flag 'timeout flags default-server-response-timeout-seconds)))
'("email-address" "host-name")))

View File

@ -1,85 +0,0 @@
(module monitor-poke-web-server mzscheme
(require (lib "contract.ss")
(lib "match.ss"))
;; this file contains functions to check whether a given host is responding to HTTP requests,
;; specifically to a "HEAD ~a HTTP/1.0" request, where ~a is supplied by the caller.
;; the original code was Paul Graunke's, refactored & encontracted by John Clements
(define (poke-result? result)
(match result
[`(fail ,(? string? server-name) ,(? number? server-port) ,(? string? msg)) #t]
[`(timeout ,(? string? server-name) ,(? number? server-port) ,(? number? timeout-seconds)) #t]
[`(exn ,(? string? server-name) ,(? number? server-port) ,(? exn? exn)) #t]
[`(ok) #t]
[else #f]))
(provide/contract [poke-web-server (channel? ; result-channel
string? ; server-name
number? ; server-port
number? ; timeout-seconds
. -> .
void?)]
[poke-web-server/path (string? ; path
channel? ; result-channel
string? ; server-name
number? ; server-port
number? ; timeout-seconds
. -> .
void?)]
[result->message (poke-result? . -> . string?)])
(define OK-REGEXP (regexp "^HTTP/[0-9]*.[0-9]* 200"))
; result->message : given a poke-result?, produce a reasonable error message.
(define (result->message result)
(match result
[`(fail ,server-name ,server-port ,line)
(string-append
(format "The web server ~a:~a did not respond\n" server-name server-port)
"to a head request for its home page with an 'okay' result.\n"
(format "Received: ~a\n" line))]
[`(timeout ,server-name ,server-port ,timeout-seconds)
(string-append
(format "Attempting to send a head request to ~a:~a\n" server-name server-port)
(format "timed out after ~a seconds.\n" timeout-seconds))]
[`(exn ,server-name ,server-port ,exn)
(string-append
(format "Attempting to send a head request to ~a:~a\n" server-name server-port)
"resulted in the following exception:\n"
"\n"
(format "~a\n" (if (exn? exn)
(exn-message exn)
exn)))]
[`(ok) "no error"]))
(define (poke-web-server result-channel server-name server-port timeout-seconds)
(poke-web-server/path "/" result-channel server-name server-port timeout-seconds))
(define (poke-web-server/path path result-channel server-name server-port timeout-seconds)
(let* ([cust (make-custodian)]
[blow-up-handler (lambda (exn)
(channel-put result-channel `(exn ,server-name ,server-port ,exn))
(custodian-shutdown-all cust))])
(parameterize ([current-custodian cust])
(thread (lambda ()
(with-handlers ([void blow-up-handler])
(sleep timeout-seconds))
(channel-put result-channel `(timeout ,server-name ,server-port ,timeout-seconds))
(custodian-shutdown-all cust)))
(thread
(lambda ()
(with-handlers ([void blow-up-handler])
(let-values ([(in out) (tcp-connect server-name server-port)])
(fprintf out "HEAD ~a HTTP/1.0\r\n" path)
(fprintf out "Host: ~a\r\n\r\n" server-name) ; what the jiminy cricket does this line do;?
(flush-output out) ;; now required for all TCP ports
(let ([line (read-line in)])
(if (regexp-match OK-REGEXP line)
(channel-put result-channel '(ok))
(channel-put result-channel `(fail ,server-name ,server-port ,line)))
(custodian-shutdown-all cust))))))
(void)))))

View File

@ -1,38 +0,0 @@
(module monitor-server mzscheme
(require (lib "etc.ss")
(lib "contract.ss")
(lib "match.ss"))
(require "monitor-poke-web-server.ss"
"monitor-emailer.ss")
(define default-server-port 80)
(define default-poll-frequency-seconds 3600)
(define default-server-response-timeout-seconds 75)
; monitor : str str [nat] [num] [num] -> doesn't
(define monitor
(opt-lambda (email-address
server-name
[server-port default-server-port]
[poll-frequency-seconds default-poll-frequency-seconds]
[server-response-timeout-seconds default-server-response-timeout-seconds])
(define result-channel (make-channel))
(define (send-email msg)
(send-email-alert email-address server-name server-port msg))
(let check-server ()
(poke-web-server result-channel server-name server-port server-response-timeout-seconds)
(let ([result (channel-get result-channel)])
(match result
[`(ok) (void)]
[else (send-email (result->message result))])
(sleep poll-frequency-seconds)
(check-server)))))
(provide/contract
[monitor ((string? string?) (number? number? number?) . opt-> . void)]
[default-server-port number?]
[default-poll-frequency-seconds number?]
[default-server-response-timeout-seconds number?]))