27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
(sqlite3:execute db "PRAGMA synchronous = 0;")
(if (not exists)
(sqlite3:execute
db
"CREATE TABLE ports (
port INTEGER PRIMARY KEY,
state TEXT DEFAULT 'not-used',
fail_count INTEGER DEFAULT 0);"))
db))
(define (portlogger:open-run-close proc . params)
(handle-exceptions
exn
(print "ERROR: portlogger:open-run-close failed. " proc " " params)
(let* ((db (portlogger:open-db (conc "/tmp/." (current-user-name) "-portlogger.db")))
(res (apply proc db params)))
(sqlite3:finalize! db)
res)))
;; (fold-row PROC INIT DATABASE SQL . PARAMETERS)
(define (portlogger:take-port db portnum)
(let* ((qry1 (sqlite3:prepare db "INSERT INTO ports (port,state) VALUES (?,?);"))
(qry2 (sqlite3:prepare db "UPDATE ports SET state=? WHERE port=?;"))
(qry3 (sqlite3:prepare db "SELECT state FROM ports WHERE port=?;"))
(res (sqlite3:with-transaction
db
(lambda ()
;; (fold-row (lambda (var curr) (or var curr)) #f db "SELECT var FROM foo WHERE id=100;")
(let* ((curr #f)
(res #f))
|
|
>
|
|
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
(sqlite3:execute db "PRAGMA synchronous = 0;")
(if (not exists)
(sqlite3:execute
db
"CREATE TABLE ports (
port INTEGER PRIMARY KEY,
state TEXT DEFAULT 'not-used',
fail_count INTEGER DEFAULT 0,
update_time TIMESTAMP DEFAULT (strftime('%s','now')) );"))
db))
(define (portlogger:open-run-close proc . params)
(handle-exceptions
exn
(print "ERROR: portlogger:open-run-close failed. " proc " " params)
(let* ((db (portlogger:open-db (conc "/tmp/." (current-user-name) "-portlogger.db")))
(res (apply proc db params)))
(sqlite3:finalize! db)
res)))
;; (fold-row PROC INIT DATABASE SQL . PARAMETERS)
(define (portlogger:take-port db portnum)
(let* ((qry1 (sqlite3:prepare db "INSERT INTO ports (port,state) VALUES (?,?);"))
(qry2 (sqlite3:prepare db "UPDATE ports SET state=?,update_time=strftime('%s','now') WHERE port=?;"))
(qry3 (sqlite3:prepare db "SELECT state FROM ports WHERE port=?;"))
(res (sqlite3:with-transaction
db
(lambda ()
;; (fold-row (lambda (var curr) (or var curr)) #f db "SELECT var FROM foo WHERE id=100;")
(let* ((curr #f)
(res #f))
|
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
(sqlite3:finalize! qry2)
(sqlite3:finalize! qry3)
res))
;; set port to "released", "failed" etc.
;;
(define (portlogger:set-port db portnum value)
(sqlite3:execute db "UPDATE ports SET state=? WHERE port=?;" value portnum))
;; set port to failed (attempted to take but got error)
;;
(define (portlogger:set-failed db portnum)
(sqlite3:execute db "UPDATE ports SET state='failed',fail_count=fail_count+1 WHERE port=?;" portnum))
;;======================================================================
;; MAIN
;;======================================================================
|
|
|
|
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
(sqlite3:finalize! qry2)
(sqlite3:finalize! qry3)
res))
;; set port to "released", "failed" etc.
;;
(define (portlogger:set-port db portnum value)
(sqlite3:execute db "UPDATE ports SET state=?,update_time=strftime('%s','now') WHERE port=?;" value portnum))
;; set port to failed (attempted to take but got error)
;;
(define (portlogger:set-failed db portnum)
(sqlite3:execute db "UPDATE ports SET state='failed',fail_count=fail_count+1,update_time=strftime('%s','now') WHERE port=?;" portnum))
;;======================================================================
;; MAIN
;;======================================================================
|