2009-03-18 18:43:49 -04:00
|
|
|
! Copyright (C) 2009 Doug Coleman.
|
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
|
|
|
USING: accessors continuations db db.sqlite db.tuples db.types
|
2009-03-18 19:05:05 -04:00
|
|
|
io.directories io.files.temp kernel io.streams.string calendar
|
|
|
|
debugger combinators.smart sequences ;
|
2009-03-18 18:43:49 -04:00
|
|
|
IN: site-watcher.db
|
|
|
|
|
2009-03-18 19:18:57 -04:00
|
|
|
TUPLE: account account-id account-name email ;
|
2009-03-18 18:43:49 -04:00
|
|
|
|
2009-03-18 19:18:57 -04:00
|
|
|
: <account> ( account-name -- account )
|
2009-03-18 18:43:49 -04:00
|
|
|
account new
|
2009-03-18 19:18:57 -04:00
|
|
|
swap >>account-name ;
|
2009-03-18 18:43:49 -04:00
|
|
|
|
|
|
|
account "ACCOUNT" {
|
2009-03-18 20:36:04 -04:00
|
|
|
{ "account-name" "ACCOUNT_NAME" VARCHAR +user-assigned-id+ }
|
2009-03-18 18:43:49 -04:00
|
|
|
{ "email" "EMAIL" VARCHAR }
|
|
|
|
} define-persistent
|
|
|
|
|
|
|
|
TUPLE: site site-id url up? changed? last-up error last-error ;
|
|
|
|
|
|
|
|
: <site> ( url -- site )
|
|
|
|
site new
|
|
|
|
swap >>url ;
|
|
|
|
|
|
|
|
site "SITE" {
|
|
|
|
{ "site-id" "SITE_ID" INTEGER +db-assigned-id+ }
|
|
|
|
{ "url" "URL" VARCHAR }
|
|
|
|
{ "up?" "UP" BOOLEAN }
|
|
|
|
{ "changed?" "CHANGED" BOOLEAN }
|
|
|
|
{ "last-up" "LAST_UP" TIMESTAMP }
|
|
|
|
{ "error" "ERROR" VARCHAR }
|
|
|
|
{ "last-error" "LAST_ERROR" TIMESTAMP }
|
|
|
|
} define-persistent
|
|
|
|
|
2009-03-18 20:36:04 -04:00
|
|
|
TUPLE: watching-site account-name site-id ;
|
2009-03-18 18:43:49 -04:00
|
|
|
|
2009-03-18 20:36:04 -04:00
|
|
|
: <watching-site> ( account-name site-id -- watching-site )
|
2009-03-18 18:43:49 -04:00
|
|
|
watching-site new
|
|
|
|
swap >>site-id
|
2009-03-18 20:36:04 -04:00
|
|
|
swap >>account-name ;
|
2009-03-18 18:43:49 -04:00
|
|
|
|
|
|
|
watching-site "WATCHING_SITE" {
|
2009-03-18 20:36:04 -04:00
|
|
|
{ "account-name" "ACCOUNT_NAME" VARCHAR +user-assigned-id+ }
|
2009-03-18 18:43:49 -04:00
|
|
|
{ "site-id" "SITE_ID" INTEGER +user-assigned-id+ }
|
|
|
|
} define-persistent
|
2009-03-18 19:05:05 -04:00
|
|
|
|
2009-03-18 19:06:00 -04:00
|
|
|
TUPLE: reporting-site email url up? changed? last-up? error last-error ;
|
|
|
|
|
|
|
|
<PRIVATE
|
|
|
|
|
2009-03-18 19:05:05 -04:00
|
|
|
: set-notify-site-watchers ( site new-up? -- site )
|
|
|
|
[ over up?>> = [ t >>changed? ] unless ] keep >>up? ;
|
|
|
|
|
|
|
|
: site-good ( site -- )
|
|
|
|
t set-notify-site-watchers
|
|
|
|
now >>last-up
|
|
|
|
f >>error
|
|
|
|
f >>last-error
|
|
|
|
update-tuple ;
|
|
|
|
|
|
|
|
: site-bad ( site error -- )
|
|
|
|
[ error. ] with-string-writer >>error
|
|
|
|
f set-notify-site-watchers
|
|
|
|
now >>last-error
|
|
|
|
update-tuple ;
|
|
|
|
|
|
|
|
: sites-to-report ( -- seq )
|
2009-03-19 17:48:32 -04:00
|
|
|
"select users.email, site.url, site.up, site.changed, site.last_up, site.error, site.last_error from users, site, watching_site where users.username = watching_site.account_name and site.site_id = watching_site.site_id and site.changed = '1'" sql-query
|
2009-03-18 19:05:05 -04:00
|
|
|
[ [ reporting-site boa ] input<sequence ] map
|
2009-03-19 17:48:32 -04:00
|
|
|
"update site set changed = 0;" sql-command ;
|
2009-03-18 19:05:05 -04:00
|
|
|
|
|
|
|
: insert-site ( url -- site )
|
2009-03-18 20:36:04 -04:00
|
|
|
<site> dup select-tuple [ ] [ dup t >>up? insert-tuple ] ?if ;
|
2009-03-18 19:05:05 -04:00
|
|
|
|
2009-03-18 19:18:57 -04:00
|
|
|
: insert-account ( account-name -- ) <account> insert-tuple ;
|
2009-03-18 19:05:05 -04:00
|
|
|
|
|
|
|
: find-sites ( -- seq ) f <site> select-tuples ;
|
|
|
|
|
2009-03-18 20:36:04 -04:00
|
|
|
: select-account/site ( username url -- account site )
|
|
|
|
insert-site site-id>> ;
|
2009-03-18 19:05:05 -04:00
|
|
|
|
2009-03-18 19:06:00 -04:00
|
|
|
PRIVATE>
|
|
|
|
|
2009-03-18 20:36:04 -04:00
|
|
|
: watch-site ( username url -- )
|
2009-03-18 19:05:05 -04:00
|
|
|
select-account/site <watching-site> insert-tuple ;
|
|
|
|
|
2009-03-18 20:36:04 -04:00
|
|
|
: unwatch-site ( username url -- )
|
2009-03-18 19:05:05 -04:00
|
|
|
select-account/site <watching-site> delete-tuples ;
|
2009-03-18 20:36:04 -04:00
|
|
|
|
|
|
|
: watching-sites ( username -- sites )
|
|
|
|
f <watching-site> select-tuples
|
2009-03-18 23:00:08 -04:00
|
|
|
[ site-id>> site new swap >>site-id select-tuple ] map ;
|
2009-03-19 17:48:32 -04:00
|
|
|
|
|
|
|
: site-watcher-path ( -- path ) "site-watcher.db" temp-file ; inline
|
|
|
|
|
|
|
|
: with-site-watcher-db ( quot -- )
|
|
|
|
site-watcher-path <sqlite-db> swap with-db ; inline
|