13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;;
;; You should have received a copy of the GNU General Public License
;; along with Megatest. If not, see <http://www.gnu.org/licenses/>.
;;
(require-extension (srfi 18) extras tcp s11n)
(declare (unit portlogger))
(declare (uses debugprint))
(declare (uses dbmod))
(module portlogger
*
(import scheme chicken data-structures)
(import srfi-1 posix srfi-69 hostinfo dot-locking z3
(srfi 18) extras s11n)
(import scheme)
(cond-expand
(chicken-4
(import chicken data-structures)
(import posix
;; hostinfo
;; dot-locking
extras
)
(import (prefix sqlite3 sqlite3:))
(import debugprint dbmod)
)
(chicken-5
(import chicken.base
chicken.condition
chicken.file
chicken.pathname
chicken.process-context.posix
chicken.process
chicken.sort
chicken.string
chicken.time
chicken.random
system-information
)
(define file-write-access? file-writable?)
(define random pseudo-random-integer)
))
(import srfi-1 srfi-69 z3
(srfi 18) s11n)
(import (prefix sqlite3 sqlite3:))
(import debugprint dbmod)
;; lsof -i
(define (portlogger:open-db fname)
(let* (;; (avail (tasks:wait-on-journal fname 5 remove: #t)) ;; wait up to about 10 seconds for the journal to go away
(avail #t)
(exists (file-exists? fname))
(db (if avail
|
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
-
-
+
+
|
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)
(let* ((fname (conc "/tmp/." (current-user-name) "-portlogger.db"))
(avail (tasks:wait-on-journal fname 10))) ;; wait up to about 10 seconds for the journal to go away
(let* ((fname (conc "/tmp/." (current-user-name) "-portlogger.db")))
;; (avail (tasks:wait-on-journal fname 10))) ;; wait up to about 10 seconds for the journal to go away
(handle-exceptions
exn
(begin
;; (release-dot-lock fname)
(debug:print-error 0 *default-log-port* "portlogger:open-run-close failed. " proc " " params)
(debug:print 0 *default-log-port* " message: " ((condition-property-accessor 'exn 'message) exn))
;; (debug:print 5 *default-log-port* "exn=" (condition->list exn))
|