74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
-
+
|
;;======================================================================
;; state: 'live, 'shutting-down, 'dead
(define (tasks:server-register mdb pid hostname port priority state)
(sqlite3:execute
mdb
"INSERT OR REPLACE INTO servers (pid,hostname,port,start_time,priority,state) VALUES(?,?,?,strftime('%s','now'),?,?);"
pid hostname port priority state))
pid hostname port priority (conc state)))
(define (tasks:server-deregister mdb hostname #!key (port #f)(pid #f))
(if pid
(sqlite3:execute mdb "DELETE FROM servers WHERE hostname=? AND pid=?;" hostname pid)
(if port
(sqlite3:execute mdb "DELETE FROM servers WHERE hostname=? AND port=?;" hostname port)
(debug:print 0 "ERROR: tasks:server-deregister called with neither pid nor port specified"))))
|
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
-
+
|
"SELECT id,server_id,pid,hostname,cmdline,login_time,logout_time FROM clients WHERE server_id=?;"
server-id)))
(define (tasks:have-clients? mdb server-id)
(null? (tasks:get-logged-in-clients mdb server-id)))
(define (tasks:get-best-server mdb)
(let ((res '()))
(let ((res #f))
(sqlite3:for-each-row
(lambda (id hostname port)
(set! res (list hostname port)))
mdb
"SELECT id,hostname,port FROM servers WHERE state='live' ORDER BY start_time DESC LIMIT 1;")
res))
|