! Copyright (C) 2009 Doug Coleman.
-! See http://factorcode.org/license.txt for BSD license.
-USING: accessors alarms arrays calendar combinators
-combinators.smart continuations debugger http.client
-init io.streams.string kernel locals math math.parser
-namespaces sequences site-watcher.db site-watcher.db.private smtp ;
+! See https://factorcode.org/license.txt for BSD license.
+USING: accessors calendar continuations db http.client init
+kernel math math.parser namespaces sequences site-watcher.db
+site-watcher.email timers ;
IN: site-watcher
-SYMBOL: site-watcher-from
-"factor-site-watcher@gmail.com" site-watcher-from set-global
-
SYMBOL: site-watcher-frequency
-10 seconds site-watcher-frequency set-global
-
+5 minutes site-watcher-frequency set-global
+
SYMBOL: running-site-watcher
-[ f running-site-watcher set-global ] "site-watcher" add-init-hook
+STARTUP-HOOK: [ f running-site-watcher set-global ]
<PRIVATE
[ dup url>> http-get 2drop site-good ] [ site-bad ] recover
] each ;
-: site-up-email ( email site -- email )
- last-up>> now swap time- duration>minutes 60 /mod
+: site-up-email ( site -- body )
+ last-up>> ago duration>minutes 60 /mod
[ >integer number>string ] bi@
[ " hours, " append ] [ " minutes" append ] bi* append
- "Site was down for (at least): " prepend >>body ;
+ "Site was down for (at least): " prepend ;
-: site-down-email ( email site -- email ) error>> >>body ;
+: site-down-email ( site -- body ) error>> ;
: send-report ( site -- )
- [ <email> ] dip
- {
- [ email>> 1array >>to ]
- [ drop site-watcher-from get "factor.site.watcher@gmail.com" or >>from ]
- [ dup up?>> [ site-up-email ] [ site-down-email ] if ]
- [ [ url>> ] [ up?>> "up" "down" ? ] bi " is " glue >>subject ]
- } cleave send-email ;
+ [ ]
+ [ dup up?>> [ site-up-email ] [ site-down-email ] if ]
+ [ [ url>> ] [ up?>> "up" "down" ? ] bi " is " glue ] tri
+ send-site-email ;
: send-reports ( seq -- )
- [ ] [ [ send-report ] each ] if-empty ;
+ [ [ send-report ] each ] unless-empty ;
PRIVATE>
: watch-sites ( -- )
find-sites check-sites sites-to-report send-reports ;
-: run-site-watcher ( -- )
- running-site-watcher get [
- [ watch-sites ] site-watcher-frequency get every
- running-site-watcher set-global
+: run-site-watcher ( db -- )
+ [ running-site-watcher get ] dip '[
+ [ _ [ watch-sites ] with-db ] site-watcher-frequency get every
+ running-site-watcher set
] unless ;
: stop-site-watcher ( -- )
- running-site-watcher get [ cancel-alarm ] when* ;
+ running-site-watcher get [ stop-timer ] when* ;